Vaststellen welke hoek bij sinus hoort.

Moderators: dirkwb, Xilvo

Gebruikersavatar
Berichten: 342

Re: Vaststellen welke hoek bij sinus hoort.

Ik ben hier even naar aan het kijken (en van alles over het astronomisch coördinaten stelsel aan het leren) en ik denk dat er nog twee stukjes informatie missen.

Het horizontale coördinaten stelsel is een lokaal assenstelsel dat gebaseerd is op waar je op dat moment bent en hoe laat het is. Namelijk waar t.o.v. jou noord is (Azimuth) en hoe hoog boven de horizon het object is (Altitude). Het equatoriale coördinaten systeem is gebaseerd op het zonnestelsel en is daarmee onafhankelijk van tijd en plaats.

Dus wat er mist is tijd en plaats. Als dat niet op een of andere manier in je formules zit zal je nooit een juiste transformatie kunnen maken. Het lijkt me dus dat de formule die je hierboven geeft veel te simpel is.

Hier is een online tool dat deze transformatie voor je kan doen. Dat is iig een goede check.
https://frostydrew.org/utilities.dc/con ... ordinates/

Er zijn blijkbaar ook apps op je telefoon die dit kunnen:
https://astrobackyard.com/astronomy-app ... targazing/

Verder is de transformatie vrij ingewikkeld merk ik (omdat het dus ook van tijd en plaats afhangt), dus ik ga nu niet een hele tool in elkaar bouwen die deze transformatie kan doen. Bovendien hebben vele mensen dit al een keer voor je gedaan en moet er online wel veel te vinden zijn. Maar dat kan ik niet voor je doen omdat ik niet weet waar je precies naar opzoek bent.

Berichten: 463

Re: Vaststellen welke hoek bij sinus hoort.

@ irArjan:
Tijd en lengtegraad zitten in de uurhoek (Hour Angle).
Missen we alleen nog de breedtegraad φ, in Nederland/Belgie rond de 51 a 52 graden.

De transformatie formules vallen mee, zie bijvoorbeeld
https://aa.quae.nl/en/reken/hemelpositie.html#1_10


@ REND:
Mocht je een en ander in een eigen programma willen programeren, dan kan je mogelijk onderstaande code gebruiken, en met name de transformatie-functies Hd2Ah() en Ah2Hd() hierin:
(de goniometrische functies eindigend op 'd' werken in graden;
Azimuth A is gedefinieerd als op bovenstaande site, Azimuth A-accent is jouw Azimuth;
via de atan2() functie kom je goed uit in het hele 0 .. 360 graden gebied)

Code: Selecteer alles

\\ breedtegraad waarnemer (default = 52 graden)
phi=52;

\\ zet breedtegraad waarnemer:
setphi(p)={
phi=p;
}

\\ (Hour Angle, Declitation) to (Azimuth, Altitude):
Hd2Ah(H,d)={
h=asind(sind(phi)*sind(d)+cosd(phi)*cosd(d)*cosd(H));
A=atan2d(sind(H), cosd(H)*sind(phi)-tand(d)*cosd(phi));
}

\\ (Azimuth, Altitude) to (Hour Angle, Declitation):
Ah2Hd(A,h)={
d=asind(sind(phi)*sind(h)-cosd(phi)*cosd(A)*cosd(h));
H=atan2d(sind(A)*cosd(h)*cosd(phi), sind(h)-sind(phi)*sind(d));
H=(H+360)%360;  \\ atan2 loopt van -180 tot 180, we willen van 0 tot 360
}

\\ IN:  st=ster, ha=HourAngle, delta=Declination:
\\ OUT: print de input, converteer naar Az/hoogte, converteer terug
test(st,ha,delta)={

print("--------------------------------------------");
print("HA = ",ha);
print("Decl = ", delta);
print("--------------------------------------------");
Hd2Ah(ha,delta);
print("azimuth A = ",A);      \\ Azimuth A: N=-180, O=-90, Z=0, W=90
Aacc=(A+180)%360;             \\ A-accent : N=0, O=90, Z=180, W=270
print("azimuth A' = ",Aacc);
print("altitude h = ",h);
print("--------------------------------------------");
Ah2Hd(A,h);           \\ terugrekenen vanuit Azimuth A
print("H = ",H);
print("d = ",d);
print("--------------------------------------------");
Ah2Hd(Aacc-180,h);    \\ terugrekenen vanuit Azimuth A-accent
print("H = ",H);
print("d = ",d);
print("--------------------------------------------");
printf("%-12s  %10.6f  %10.6f  %10.6f  %10.6f  %10.6f  %10.6f\n",st,ha,delta,Aacc,h,H,d);
print("--------------------------------------------");

}


\\ MAIN PROGRAM:
{
\\ zet breedtegraad waarnemer op 51 graden:
setphi(51);

\\ test de hele tabel:
test("polaris", 254.5625, 89.3556);
test("mirfak", 254.9542, 49.9372);
test("sadalmelik", 332.0458, -0.2142);
test("albaldah", 16.5292 , -20.9883);
test("arcturus", 95.1250 , 19.0683);
test("alioth", 111.5208 , 55.8425);
test("menkulinan", 215.6833 , 44.9483);
}
en hier de volledige output:

Code: Selecteer alles

--------------------------------------------
HA = 254.56250000000000000000000000000000000
Decl = 89.355600000000000000000000000000000000
--------------------------------------------
azimuth A = -179.01667219866287906626521251801419720
azimuth A' = 0.98332780133712093373478748198580280453
altitude h = 50.824330048414265745721241381717608051
--------------------------------------------
H = 254.56250000000000000000000000000000004
d = 89.355599999999999999999999999999999999
--------------------------------------------
H = 254.56250000000000000000000000000000004
d = 89.355599999999999999999999999999999999
--------------------------------------------
polaris       254.562500   89.355600    0.983328   50.824330  254.562500   89.355600
--------------------------------------------
--------------------------------------------
HA = 254.95420000000000000000000000000000000
Decl = 49.937200000000000000000000000000000000
--------------------------------------------
azimuth A = -134.53193598288672664008694405389617722
azimuth A' = 45.468064017113273359913055946103822781
altitude h = 29.316511002849151948083440606335438231
--------------------------------------------
H = 254.95420000000000000000000000000000000
d = 49.937200000000000000000000000000000000
--------------------------------------------
H = 254.95420000000000000000000000000000000
d = 49.937200000000000000000000000000000000
--------------------------------------------
mirfak        254.954200   49.937200   45.468064   29.316511  254.954200   49.937200
--------------------------------------------
--------------------------------------------
HA = 332.04580000000000000000000000000000000
Decl = -0.21420000000000000000000000000000000000
--------------------------------------------
azimuth A = -34.236501604075829416576546707616868436
azimuth A' = 145.76349839592417058342345329238313156
altitude h = 33.571947803753828511669517841438798055
--------------------------------------------
H = 332.04580000000000000000000000000000000
d = -0.21420000000000000000000000000000000000
--------------------------------------------
H = 332.04580000000000000000000000000000000
d = -0.21420000000000000000000000000000000000
--------------------------------------------
sadalmelik    332.045800   -0.214200  145.763498   33.571948  332.045800   -0.214200
--------------------------------------------
--------------------------------------------
HA = 16.529200000000000000000000000000000000
Decl = -20.988300000000000000000000000000000000
--------------------------------------------
azimuth A = 16.088094854991123305234177231918503058
azimuth A' = 196.08809485499112330523417723191850306
altitude h = 16.554658538899145522353225526112936660
--------------------------------------------
H = 16.529200000000000000000000000000000000
d = -20.988300000000000000000000000000000000
--------------------------------------------
H = 16.529199999999999999999999999999999999
d = -20.988300000000000000000000000000000000
--------------------------------------------
albaldah       16.529200  -20.988300  196.088095   16.554659   16.529200  -20.988300
--------------------------------------------
--------------------------------------------
HA = 95.125000000000000000000000000000000000
Decl = 19.068300000000000000000000000000000000
--------------------------------------------
azimuth A = 106.07196861293817802377850081410530732
azimuth A' = 286.07196861293817802377850081410530732
altitude h = 11.581279231587952647235167122745254693
--------------------------------------------
H = 95.125000000000000000000000000000000000
d = 19.068300000000000000000000000000000000
--------------------------------------------
H = 95.125000000000000000000000000000000000
d = 19.068300000000000000000000000000000000
--------------------------------------------
arcturus       95.125000   19.068300  286.071969   11.581279   95.125000   19.068300
--------------------------------------------
--------------------------------------------
HA = 111.52080000000000000000000000000000000
Decl = 55.842500000000000000000000000000000000
--------------------------------------------
azimuth A = 142.50486330831710851144738609582616100
azimuth A' = 322.50486330831710851144738609582616100
altitude h = 30.894954833436083814628076440361686474
--------------------------------------------
H = 111.52080000000000000000000000000000000
d = 55.842500000000000000000000000000000000
--------------------------------------------
H = 111.52080000000000000000000000000000000
d = 55.842500000000000000000000000000000000
--------------------------------------------
alioth        111.520800   55.842500  322.504863   30.894955  111.520800   55.842500
--------------------------------------------
--------------------------------------------
HA = 215.68330000000000000000000000000000000
Decl = 44.948300000000000000000000000000000000
--------------------------------------------
azimuth A = -155.14872412208052258469139638962715360
azimuth A' = 24.851275877919477415308603610372846401
altitude h = 10.792511164194092485692305528807194392
--------------------------------------------
H = 215.68330000000000000000000000000000000
d = 44.948300000000000000000000000000000000
--------------------------------------------
H = 215.68330000000000000000000000000000000
d = 44.948300000000000000000000000000000000
--------------------------------------------
menkulinan    215.683300   44.948300   24.851276   10.792511  215.683300   44.948300
--------------------------------------------
en samengevat:

Code: Selecteer alles

polaris       254.562500   89.355600    0.983328   50.824330  254.562500   89.355600
mirfak        254.954200   49.937200   45.468064   29.316511  254.954200   49.937200
sadalmelik    332.045800   -0.214200  145.763498   33.571948  332.045800   -0.214200
albaldah       16.529200  -20.988300  196.088095   16.554659   16.529200  -20.988300
arcturus       95.125000   19.068300  286.071969   11.581279   95.125000   19.068300
alioth        111.520800   55.842500  322.504863   30.894955  111.520800   55.842500
menkulinan    215.683300   44.948300   24.851276   10.792511  215.683300   44.948300
NOOT: ik heb breedtegraad = 51 graden gebruikt en kom daarmee redelijk in de buurt van jouw waarden.
Alleen de hoogte h (=altitude) van mirfak wijkt nogal af (ik kom 20 graden lager uit dan jij).
Zit er bij jou of bij mij iets mis?

Berichten: 13

Re: Vaststellen welke hoek bij sinus hoort.

irArjan schreef: zo 19 dec 2021, 15:15 Ik ben hier even naar aan het kijken (en van alles over het astronomisch coördinaten stelsel aan het leren) en ik denk dat er nog twee stukjes informatie missen.

Het horizontale coördinaten stelsel is een lokaal assenstelsel dat gebaseerd is op waar je op dat moment bent en hoe laat het is. Namelijk waar t.o.v. jou noord is (Azimuth) en hoe hoog boven de horizon het object is (Altitude). Het equatoriale coördinaten systeem is gebaseerd op het zonnestelsel en is daarmee onafhankelijk van tijd en plaats.

Dus wat er mist is tijd en plaats. Als dat niet op een of andere manier in je formules zit zal je nooit een juiste transformatie kunnen maken. Het lijkt me dus dat de formule die je hierboven geeft veel te simpel is.
.......
Hallo irArjan,
Bedankt voor de moeite.
De longitude , altitude en lokale sterrentijd komen voor en na deze berekeningen.
namelijk van RA naar HA en van HA naar RA.
Online tools helpen mij niet omdat ik dan een continue internet verbinding nodig heb en deze een handmatig over typen van de waarden zouden vereisen.

De post va RedCat biedt waarschijnlijk mogelijkheden, die ga ik proberen te implementeren.
Nogmaals dank voor je tijd.
Theo

Berichten: 13

Re: Vaststellen welke hoek bij sinus hoort.

RedCat schreef: zo 19 dec 2021, 15:53

NOOT: ik heb breedtegraad = 51 graden gebruikt en kom daarmee redelijk in de buurt van jouw waarden.
Alleen de hoogte h (=altitude) van mirfak wijkt nogal af (ik kom 20 graden lager uit dan jij).
Zit er bij jou of bij mij iets mis?
Er zat bij mij een foutje in :oops:

Ik heb je code omgeschreven naar python en zal die voor de volledigheid hieronder plaatsen.
De berekeningen komen hetzelfde uit als in je voorbeeld.
Het zal morgen (vanavond :roll: ) worden voor ik de kans krijg het te implementeren in de volledige code, daarna kan ik je terug melden of het inderdaad doet wat we verwachten.
Alvast bedankt voor de moeite,
Groet,
Theo

de python code:

Code: Selecteer alles

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math 

h = 0 
A = 0
d = 0
H = 0


# breedtegraad waarnemer (default = 52 graden)
phi=51.2305555556;

# zet breedtegraad waarnemer:
def setphi(p):
	phi=p


# (Hour Angle, Declitation) to (Azimuth, Altitude):
def Hd2Ah(H,d): 
	global h
	global A 
	
	h= math.degrees(math.asin(math.sin(math.radians(phi))*math.sin(math.radians(d))+math.cos(math.radians(phi))*math.cos(math.radians(d))*math.cos(math.radians(H))))
	A= math.degrees(math.atan2(math.sin(math.radians(H)), math.cos(math.radians(H))*math.sin(math.radians(phi))-math.tan(math.radians(d))*math.cos(math.radians(phi))))


# (Azimuth, Altitude) to (Hour Angle, Declitation):
def Ah2Hd(A,h): # nog schuiven met graden  en radialen **************************************************
	global d 
	global H 
	d= math.degrees(math.asin(math.sin(math.radians(phi))*math.sin(math.radians(h))-math.cos(math.radians(phi))*math.cos(math.radians(A))*math.cos(math.radians(h))))
	H= math.degrees(math.atan2(math.sin(math.radians(A))*math.cos(math.radians(h))*math.cos(math.radians(phi)), math.sin(math.radians(h))-math.sin(math.radians(phi))*math.sin(math.radians(d))))
	H=(H+360)%360;  # atan2 loopt van -180 tot 180, we willen van 0 tot 360


# IN:  st=ster, ha=HourAngle, delta=Declination:
# OUT: print de input, converteer naar Az/hoogte, converteer terug
def test(st,ha,delta):

	print "--------------------------------------------"
	print "HA = %s" %ha
	print "Decl = %s"%delta
	print "--------------------------------------------"
	Hd2Ah(ha,delta)
	print "azimuth A = %s"%A      # Azimuth A: N=-180, O=-90, Z=0, W=90
	Aacc=(A+180)%360             # A-accent : N=0, O=90, Z=180, W=270
	print "azimuth A' = %s"%Aacc
	print "altitude h = %s"%h
	print "--------------------------------------------"
	Ah2Hd(A,h)           # terugrekenen vanuit Azimuth A
	print "H = %s"%H
	print "d = %d"%d
	print "--------------------------------------------"
	Ah2Hd(Aacc-180,h)    # terugrekenen vanuit Azimuth A-accent
	print "H = %s"%H
	print "d = %s"%d
	print "--------------------------------------------"
	txt = "{%-12s}  {%10.6f}  {%10.6f}  {%10.6f}  {%10.6f}  {%10.6f}  {%10.6f}\n" %(st,ha,delta,Aacc,h,H,d)
	print txt
	print "--------------------------------------------"



# MAIN PROGRAM:
# zet breedtegraad waarnemer
setphi(phi)

# test de hele tabel:
test("polaris", 254.5625, 89.3556)
test("mirfak", 254.9542, 49.9372)
test("sadalmelik", 332.0458, -0.2142)
test("albaldah", 16.5292 , -20.9883)
test("arcturus", 95.1250 , 19.0683)
test("alioth", 111.5208 , 55.8425)
test("menkulinan", 215.6833 , 44.9483)

Berichten: 13

Re: Vaststellen welke hoek bij sinus hoort.

Het lijkt goed te werken, volledig implementeren zal een paar avonden kosten.
Ik laat het resultaat nog weten.

Berichten: 463

Re: Vaststellen welke hoek bij sinus hoort.

Hieronder een alternatieve Python codering, waarin ik de standaard goniometrische functies in graden heb gedefinieerd.
Je kan daarmee in het hele programma in graden blijven rekenen.
De omzettingsformules (H,d) ↔ (A,h) worden daardoor ook wat beter leesbaar.
Misschien kan je dit gebruiken in jouw code.
Verder heb ik van de omzettingsformules functies gemaakt, zodat je de globale variabelen niet meer nodig hebt.

PS: als je als gebruiker met de functie setphi(p) wil afwijken van de default breedtegraad van je waarnemingspositie, moet je phi in die functie wel laten verwijzen naar de globale phi.

Code: Selecteer alles

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import math 

# -----------------------------------------------------------------------------

# definieer de standaard goniometrische functies in graden:

def sind(x):
	return math.sin(math.radians(x))
    
def cosd(x):
	return math.cos(math.radians(x))

def tand(x):
	return math.tan(math.radians(x))

def asind(x):
	return math.degrees(math.asin(x))

def acosd(x):
	return math.degrees(math.acos(x))

def atand(x):
	return math.degrees(math.atan(x))

def atan2d(y, x):
	return math.degrees(math.atan2(y, x))

# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------

# breedtegraad waarnemer (default = 51.2305555556 graden)
phi = 51.2305555556

# zet breedtegraad waarnemer:
def setphi(p):
	global phi
	phi=p

# -----------------------------------------------------------------------------

# omzettingsformules (alles in graden):

# (Hour Angle, Declitation) to (Azimuth, Altitude):
def Hd2Ah(H,d): 
	h = asind(sind(phi)*sind(d) + cosd(phi)*cosd(d)*cosd(H))
	A = atan2d(sind(H), cosd(H)*sind(phi) - tand(d)*cosd(phi))
	return A, h

# (Azimuth, Altitude) to (Hour Angle, Declitation):
def Ah2Hd(A,h):
	d = asind(sind(phi)*sind(h)-cosd(phi)*cosd(A)*cosd(h));
	H = atan2d(sind(A)*cosd(h)*cosd(phi), sind(h)-sind(phi)*sind(d));
	H = (H+360) % 360;  # atan2 loopt van -180 tot 180, we willen van 0 tot 360
	return H, d
    

# -----------------------------------------------------------------------------

# IN:  st=ster, ha=HourAngle, delta=Declination:
# OUT: print de input, converteer naar Az/hoogte, converteer terug
def test(st,ha,delta):
	print( "--------------------------------------------")
	print( "HA = %s" %ha)
	print( "Decl = %s" %delta)
	print( "--------------------------------------------")
	A, h = Hd2Ah(ha,delta)
	print( "azimuth A = %s "%A)      # Azimuth A: N=-180, O=-90, Z=0, W=90
	Aacc = (A+180) % 360             # A-accent : N=0, O=90, Z=180, W=270
	print( "azimuth A' = %s" %Aacc)
	print( "altitude h = %s" %h)
	print( "--------------------------------------------")
	H, d = Ah2Hd(A,h)           # terugrekenen vanuit Azimuth A
	print( "H = %s" %H)
	print( "d = %s" %d)
	print( "--------------------------------------------")
	H, d = Ah2Hd(Aacc-180,h)    # terugrekenen vanuit Azimuth A-accent
	print( "H = %s" %H)
	print( "d = %s" %d)
	print( "--------------------------------------------")
	print("%-12s  %10.6f  %10.6f  %10.6f  %10.6f  %10.6f  %10.6f\n" %(st,ha,delta,Aacc,h,H,d))
	print( "--------------------------------------------")



# MAIN PROGRAM:
# zet breedtegraad waarnemer
# setphi(51) # niet nodig als we de bovenaan gedefinieerde default waarde 51.2305555556 gebruiken

# test de hele tabel:
test("polaris", 254.5625, 89.3556)
test("mirfak", 254.9542, 49.9372)
test("sadalmelik", 332.0458, -0.2142)
test("albaldah", 16.5292 , -20.9883)
test("arcturus", 95.1250 , 19.0683)
test("alioth", 111.5208 , 55.8425)
test("menkulinan", 215.6833 , 44.9483)

Berichten: 13

Re: Vaststellen welke hoek bij sinus hoort.

Het heeft even geduurd maar hierbij de bevestiging dat de integratie in het python script gelukt is.
RedCat, nogmaals bedankt voor de hulp

Reageer