blotfib

pbs de précision

Messages recommandés

Bonjour

J'ai une question de précision de calcul / méthode à vous poser :

voici une comparaison de ce que donne l'excellent logiciel "carte du Ciel" avec le programme que je commence à construire
Je ne comprends pas pourquoi est ce que, même avec une bonne RA et angle horaire, le DE n'est pas tres bonne et la hauteur (altitude) n'est pas bonne non plus
Ainsi que le Zénith : 13h51m contre 13h57m43.0s
Vous pouvez voir mes routines ci-dessous, c'est du C++ sous Borland BDS2006.

Mon but ultime est de pouvoir calculer les positions du soleil et en déduire les heures de prières
Merci infiniment pour votre aide.

Cordialement,
Lotfi

votre logiciel : Cartes du Ciel
Planète
Soleil 2006- 6- 2 7h00m
Diamètre: 31.5 '
Distance: 1.0142 ua
Angle de position: -15.0
Inclinaison du pôle: -0.5
Méridien central: 28.7

J2000 RA: 4h39m39.56s DE:+22°09'09.4"
Date RA: 4h40m02.57s DE:+22°09'53.5"

My home 2006-6-2 7h00m ( TU + 2h00m )
Heure sidérale : 21h50m
Angle horaire : 17h10m
Azimut :+66°04'
Altitude :+08°32'

Lever : 5h57m Azimut:+54°33'
Culmination : 13h51m
Coucher : 21h44m Azimut:+305°27'
Distance du dernier objet : +00°00'00.0" PA:180

mon programme :
Date=2/6/2006 à 5 h UT
latitude=48°N longitude=2°E
T=0.0641672370522473 JC
Soleil Longitude L=71.5474195176398° ie 4h46'11.4"
theta0=325.530566069181° ie 325°31'50.0"
theta=327.530566069181° ie heure sidérale 21h50'7.3"
RA=70.0142893417634° ie 4h40'3.4"
delta=22.1687924929888° ie DE 22°10'7.7"
tau=257.516276727418° ie angle horaire 17h10'3.9"
az=246.069601677615° ie -180 : 66.0696016776149° ie : azimut66°4'10.6"
h=8.42225220747649° ie altitude 8°25'20.1"
______ salat _______
Zhur=13.9619414463138h ie : 13h57m43.0s

_________________________________________
routines de main.cpp


//---------------------------------------------------------------------------

#include <vcl.h>
#include <math.h>
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormMain *FormMain;

const double deg2rd = M_PI/180.0;
const double rd2deg = 180.0/M_PI;
//---------------------------------------------------------------------------
// routines from
// [URL=http://www.jgiesen.de/SME/details/basics/index.htm]http://www.jgiesen.de/SME/details/basics/index.htm

// modified by Lotfi 15/01/2006
//---------------------------------------------------------------------------
// Julian day: 86400 s, Julian year: 365.25 d, Julian Century: 36525 d
// Julian Day (valid from 1900/3/1 to 2100/2/28)
double JulianDay (int date, int month, int year, double UT)
{
if (month<=2) {month=month+12; year=year-1;}
return (int)(365.25*year) + (int)(30.6001*(month+1)) - 15 + 1720996.5 + date + UT/24.0;
}
//---------------------------------------------------------------------------
// Julian century depuis 01/01/2000 à 12h UT
double JulianCentury (int date, int month, int year, double UT)
{
if (month<=2) {month=month+12; year=year-1;}
return ((int)(365.25*year) + (int)(30.6001*(month+1)) - 15 + 1720996.5 + date + UT/24.0 - 2451545.0)/36525;
}
//---------------------------------------------------------------------------
//Solar Coordinates (according to: Jean Meeus: Astronomical Algorithms), accuracy of 0.01 degree
double SoleilLongitude( double T) // L
{
double M, L0, DL, L, Lm;
M = 357.52910 + 35999.05030*T - 0.0001559*T*T - 0.00000048*T*T*T; // mean anomaly, degree
L0 = 280.46645 + 36000.76983*T + 0.0003032*T*T; // mean longitude, degree
DL = (1.914600 - 0.004817*T - 0.000014*T*T)*sin(deg2rd*M)
+ (0.019993 - 0.000101*T)*sin(deg2rd*2*M) + 0.000290*sin(deg2rd*3*M);
L=L0 + DL; // true longitude, deg sans modulo
Lm=L-360*(int)(L/360);
if (Lm<0) Lm+=360;
return Lm*deg2rd; // true longitude, rd
}
//---------------------------------------------------------------------------
// convert ecliptic longitude L (rd) to right ascension RA and declination delta
void eclipticL2RA_delta( double L, double & RA, double & delta)
{
double eps, X, Y, Z, R;
eps = deg2rd*23.43999; // obliquity of ecliptic
X = cos(L); Y = cos(eps)*sin(L); Z = sin(eps)*sin(L); R = sqrt(1.0-Z*Z);
delta = atan2(Z, R); // in rd
RA = 2*atan2(Y, X+R); // in rd
}
//---------------------------------------------------------------------------
//compute sidereal time at Greenwich (according to: Jean Meeus: Astronomical Algorithms )
double TempsSideral( double T) // theta0
{
double theta0, theta0m;
// T siecle julien depuis 2000
theta0=280.46061837 + 360.98564736629*T*36525 + 0.000387933*T*T - T*T*T/38710000.0;
theta0m=theta0-360*(int)(theta0/360);
if (theta0m<0) theta0m+=360;
return theta0m*deg2rd; // TempsSideralen rd
}
//---------------------------------------------------------------------------
//convert tau, delta to horizon coordinates of the observer (altitude h, azimuth az) , needs latitude : beta
void equatorial2horizontal( double beta, double tau, double delta, double & h, double & az)
{
h=asin( sin(beta)*sin(delta) + cos(beta)*cos(delta)*cos(tau)); // h en rd
az =atan2( -sin(tau), cos(beta)*tan(delta) - sin(beta)*cos(tau))-M_PI; // az en rd du SUD
if (az<0) az+=2*M_PI;
}
//---------------------------------------------------------------------------
//convert rad en heure
double rd2heure( double angle)
{
return (angle*rd2deg/15.0);
}//---------------------------------------------------------------------------
//convert rad en deg min sec
AnsiString rd2degminsec( double angle)
{
double h, hi, m, mi, s;
h=angle*rd2deg;
hi=int(h);
m=(h-hi)*60;
mi=int((h-hi)*60);
s=(m-mi)*60;
return (AnsiString(hi)+"°"+AnsiString(mi)+"'"+FloatToStrF(s, ffFixed,3,1)+"\"");
}
//---------------------------------------------------------------------------
//convert rad en h min sec
AnsiString rd2hminsec( double angle)
{
double h, hi, m, mi, s;
h=rd2heure(angle);
hi=int(h);
m=(h-hi)*60;
mi=int((h-hi)*60);
s=(m-mi)*60;
return (AnsiString(hi)+"h"+AnsiString(mi)+"'"+FloatToStrF(s, ffFixed,3,1)+"\"");
}
//---------------------------------------------------------------------------
//convert h en h min sec
AnsiString h2hminsec( double h)
{
double hi, m, mi, s;
hi=int(h);
m=(h-hi)*60;
mi=int((h-hi)*60);
s=(m-mi)*60;
return (AnsiString(hi)+"h"+AnsiString(mi)+"m"+FloatToStrF(s, ffFixed,3,1)+"s");
}
//---------------------------------------------------------------------------


//---------------------------------------------------------------------------
__fastcall TFormMain::TFormMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFormMain::ButtonCalc_hazClick(TObject *Sender)
{
Word Hour, Min, Sec, MSec;
DatePicker->DateTime.DecodeDate( & date.a, & date.m, & date.j);
TimePicker->DateTime.DecodeTime( & Hour, & Min, & Sec, & MSec);
TimeZone=CBTimeZone->ItemIndex-12;
date.h=Hour-TimeZone+Min/60.0+Sec/3600.0;
if (date.h<0) {date.h+=24; date.j--;}
//??? if (date.j<0) {date.j+=???; date.m--}
Memo->Lines->Add("Date="+AnsiString(date.j)+"/"+AnsiString(date.m)+"/"
+AnsiString(date.a)+" à "+AnsiString(date.h)+" h UT");
longitude=deg2rd*(CBlongitude->ItemIndex==0 ? 1:-1)*StrToFloat(IDC_longitude->Text);
latitude=deg2rd*(CBlatitude->ItemIndex==0 ? 1:-1)*StrToFloat(IDC_latitude->Text);
Memo->Lines->Add("latitude="+AnsiString(latitude*rd2deg)+"° longitude="+AnsiString(longitude*rd2deg)+"°");
T=JulianCentury (date.j, date.m, date.a, date.h);
Memo->Lines->Add("T="+AnsiString(T)+" JC");
Soleil.L=SoleilLongitude(T);
Memo->Lines->Add("Soleil Longitude L="+AnsiString(Soleil.L*rd2deg)+"° ie "+rd2hminsec(Soleil.L));
eclipticL2RA_delta( Soleil.L, Soleil.RA, Soleil.delta);
theta0=TempsSideral( T);
theta=theta0+longitude;
Memo->Lines->Add("theta0="+AnsiString(theta0*rd2deg)+"° ie "+rd2hminsec(theta0));
Memo->Lines->Add("theta="+AnsiString(theta*rd2deg)+"° ie heure sidérale "+rd2hminsec(theta));
Soleil.tau=theta-Soleil.RA;
Memo->Lines->Add("RA="+AnsiString(Soleil.RA*rd2deg)+"° ie "+rd2hminsec(Soleil.RA));
Memo->Lines->Add("delta="+AnsiString(Soleil.delta*rd2deg)+"° ie DE "+rd2degminsec(Soleil.delta));
Memo->Lines->Add("tau="+AnsiString(Soleil.tau*rd2deg)+"° ie angle horaire "+rd2hminsec(Soleil.tau));
equatorial2horizontal( latitude, Soleil.tau, Soleil.delta, Soleil.h, Soleil.az);
Memo->Lines->Add("az="+AnsiString(Soleil.az*rd2deg)+"° ie -180 : "+AnsiString(Soleil.az*rd2deg-180)
+"° ie : azimut"+rd2degminsec(Soleil.az-M_PI));
Memo->Lines->Add("h="+AnsiString(Soleil.h*rd2deg)+"° ie altitude "+rd2degminsec(Soleil.h));
Memo->Lines->Add("______ salat _______");
double Z=12+(15*TimeZone-rd2deg*longitude)/15+theta/60;
Memo->Lines->Add("Zhur="+AnsiString(Z)+"h ie : "+h2hminsec(Z));
// lever
//double Tsidlever, Tlocal=Soleil.tau-H

Memo->Lines->Add("");
}
//---------------------------------------------------------------------------

void __fastcall TFormMain::FormCreate(TObject *Sender)
{
int i;
for (i=0; i<26; i++)
CBTimeZone->Items->Add(AnsiString(i-12));
// initialisation...
CBTimeZone->ItemIndex=14;
DatePicker->DateTime=Now();
TimePicker->DateTime=Now();
}
//---------------------------------------------------------------------------


[Ce message a été modifié par blotfib (Édité le 02-06-2006).]

[Ce message a été modifié par blotfib (Édité le 02-06-2006).]

Partager ce message


Lien à poster
Partager sur d’autres sites
"Mon but ultime est de pouvoir calculer les positions du soleil et en déduire les heures de prières"

Est-ce bien le forum pour parler de ça???

Étant pourtant connu pour être "un cul béni" ( Debricon), je ne pense pas qu'il soit souhaitable de confondre les genres, je pense que tu peux trouver ailleur que sur un forum d'astronomie ce genre de renseignements...

Autant je trouve pénible les attaques gratuites de la religion par certains , autant, j'en suis désolé, je trouve le but de ta question déplacé...


Ceci dit je te souhaite quand même la bienvenue sur astrosurf.

Partager ce message


Lien à poster
Partager sur d’autres sites
Bienvenue sur astrosurf !

Astrovicking a bien résumé la situation, donc pas de commentaire, en plus, pour ma part.

jeanlg

Partager ce message


Lien à poster
Partager sur d’autres sites
Moi, ce qui me dérange, c'est surtout que relire un programme informatique, sûrement pas, c'est trop casse tête... Je le sais bien, moi qui en ai écrit des comme ça autrefois.

Bref, tu devrais plutôt résumer où tu en es. Si j'ai bien compris, tu es satisfait du calcul des coordonnées (ascension droite et déclinaison) mais pas du passage au méridien (13h57 au lieu de 13h51). Ben c'est ça que tu devrais expliquer. Je regarde rapidement...

----------

Re. Je n'ai pas trouvé la fonction qui calcule le passage au méridien. Vu que tu as le bon angle horaire, il n'y a pas de raison qu'il y ait une erreur. Sauf si tu n'as pas le bon temps sidéral. Est-ce que tu as comparé ton temps sidéral à 0hTU à Greenwich avec celui de Cartes du Ciel (s'il le donne ?) par exemple ? À mon avis, c'et là-dedans que ça se passe. Est-ce que tu as pensé à convertir l'heure du passage au méridien de temps sidéral à temps moyen ? Etc.

[Ce message a été modifié par Bruno Salque (Édité le 03-06-2006).]

Partager ce message


Lien à poster
Partager sur d’autres sites
C'est plutôt un "imamton" non?
J'attends la suite avec intérêt tiens...

[Ce message a été modifié par Joël Cambre (Édité le 03-06-2006).]

Partager ce message


Lien à poster
Partager sur d’autres sites
franchement
je demande de l'aide pour le calcul de la position du soleil, ce qui est une question purement d'astronomie et je tombe sur des réponses vraiment pas gentilles :-(

C'est pas le genre de forum d'esprits ouverts...

ok,je vais me debrouiller tt seul
merci à Bruno pour avoir lu le prg

Ciao

Partager ce message


Lien à poster
Partager sur d’autres sites
En priant 24H/24 le problème ne se pose pas.

A ce propos: comment un astro-cosmo-taîko-spacio-naute en orbite adepte de la religion mohamétienne se débrouillerait-il pour s'orienter exactement et à l'heure et à temps vers la célèbre ville d'Arabie Saoudite pour être conforme aux exigences religieuses?
S'attacher au plancher, au plafond?

(Ne parlons pas des difficultés des fidèles Inuits consternant le ramadan.)

OK, c'est par là ---->

Patte.

[Ce message a été modifié par syncopatte (Édité le 03-06-2006).]

Partager ce message


Lien à poster
Partager sur d’autres sites
"je tombe sur des réponses vraiment pas gentilles :-("

Je n'ai pas eu l'impression ni l'intention d'être méchant, si tu le ressents ainsi j'en suis désolé, mais, j'ai personellement trop réclamé la neutralité religieuse (pro ou anti) sur le forum, pour laisser passer l'évocation religieuse de ta question sans rien dire...Sinon j'aurai été malhonête, ce que j'essaie d'éviter.

Partager ce message


Lien à poster
Partager sur d’autres sites
blotfib,

Ecris moi :
mon email c'est :
Je fais de la programmation astro depuis 30 ans environ.
En pourra en parler en privé si tu veux.

Rethicus

[Ce message a été modifié par RETHICUS (Édité le 16-06-2006).]

Partager ce message


Lien à poster
Partager sur d’autres sites
merci c'est sympa de m'aider à trouver le pb ds mes calculs

Partager ce message


Lien à poster
Partager sur d’autres sites
Sinon, tu as vérifié la partie du programme qui calcule le passage au méridien ? Ce calcul n'est pas compliqué, donc ça doit être un problème facile à détecte (peut-être une conversion temps sidéral-->temps moyen fait à l'envers, ou quelque chose de ce genre...

Partager ce message


Lien à poster
Partager sur d’autres sites

// tous les angles en rd
theta0=TempsSideral( T);
theta=theta0+longitude;

//passage au Zénith :
Z=12+(15*TimeZone-rd2deg*longitude)/15+theta/60;

hee je ne tiens pas compte de l'altitude du lieu, (je n'ai aucune formule pour l'instant)

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant