blotfib 0 Posté(e) 2 juin 2006 BonjourJ'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 à construireJe 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 plusAinsi que le Zénith : 13h51m contre 13h57m43.0sVous 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,Lotfivotre logiciel : Cartes du CielPlanèteSoleil 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 : 21h50mAngle horaire : 17h10mAzimut :+66°04'Altitude :+08°32' Lever : 5h57m Azimut:+54°33'Culmination : 13h51mCoucher : 21h44m Azimut:+305°27'Distance du dernier objet : +00°00'00.0" PA:180 mon programme :Date=2/6/2006 à 5 h UTlatitude=48°N longitude=2°ET=0.0641672370522473 JCSoleil 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 UTdouble 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 : betavoid 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 heuredouble rd2heure( double angle){ return (angle*rd2deg/15.0);}//---------------------------------------------------------------------------//convert rad en deg min secAnsiString 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 secAnsiString 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 secAnsiString 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
astrovicking 924 Posté(e) 2 juin 2006 "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
jeanlg 2 Posté(e) 3 juin 2006 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
Bruno- 4 002 Posté(e) 3 juin 2006 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
boris emeriau 24 Posté(e) 3 juin 2006 Quoi, un curthon dans les parages? Partager ce message Lien à poster Partager sur d’autres sites
Joël Cambre 1 Posté(e) 3 juin 2006 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
blotfib 0 Posté(e) 3 juin 2006 franchementje 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 seulmerci à Bruno pour avoir lu le prgCiao Partager ce message Lien à poster Partager sur d’autres sites
syncopatte 120 Posté(e) 3 juin 2006 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
astrovicking 924 Posté(e) 3 juin 2006 "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
Meteor Drinker 447 Posté(e) 3 juin 2006 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
blotfib 0 Posté(e) 3 juin 2006 merci c'est sympa de m'aider à trouver le pb ds mes calculs Partager ce message Lien à poster Partager sur d’autres sites
Bruno- 4 002 Posté(e) 3 juin 2006 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
blotfib 0 Posté(e) 3 juin 2006 // tous les angles en rdtheta0=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