Forum Flightgear France

Une communauté prend son envol

Vous n'êtes pas identifié(e).

Annonce

Futur nouvel inscrit, tu dois au préalable lire l'intégralité des 10 articles des règles, s'il te plaît. Tout nouveau compte qui ne respecte pas les règles sera supprimé par l'administration.

#1 9/06/2015 10:13:02

Gomly
Membre
Inscription : 27/05/2015
Messages : 12

Mathématicien du jour bonjour

Nouveau problème , nouvelle publication.
Bonjour ,
j'essaie d'ajouter une fonction qui permette à un pilote novice de rejoindre un autre pilote en lui donnant un cap a suivre.

J'ai donc la longitude latitude de mes deux avions et j'applique la formule du cosinus à savoir (cos(t) = u.v / ||u||||v||)
avec u le vecteur qui joint les deux avions et v le vecteur unitaire des ordonnés.
Malheureusement après compilation ca ne me donne pas le résultat escompté. En effet si je suis le bon cap pour rejoindre l'avion le cap indicateur est totalement différent.

Je ne sais pas si c'est une erreur de math , une erreur de code ou une erreur de repère.

Je vous met le bout de code :

if(mPiloteName != "null"){
	  
	  for (unsigned int i = 0; i < 3; ++i) {
		stringstream myString;
		myString << "/ai/models/multiplayer[" << i ;
		string way(myString.str());
		std::string str;
		const char* waychar = way.c_str();
      
		const char* wayname = (way + "]/callsign").c_str();
		
		//const char* waynamechar = wayname.c_str();
		
		string name = fgGetString(wayname);
      
		if(mPiloteName == name){
			const char* latway = (way+"]/position/latitude-deg").c_str();
			double lat = fgGetDouble(latway);
			const char* longway = (way+"]/position/longitude-deg").c_str();
			double longi = fgGetDouble(longway);
			double mylat = fgGetDouble("/position/latitude-deg");
			double mylongi = fgGetDouble("/position/longitude-deg");
			
			double capasuivre = acos((lat - mylat) / (pow(pow(lat-mylat,2)+pow(longi-mylongi,2),0.5)))* 180.0 / M_PI;
			//double capasuivre = ((atan2(lat - mylat,longi - mylongi + M_PI/2)* 180.0 / M_PI)+360)%360;
			cout << lat << endl;
			cout << longi << endl;
			
			cout << "Mon cap   :   "<<fgGetDouble("/orientation/heading-deg")<<endl;
			cout << "Cap à suivre   :   "<<capasuivre << endl;
			cout << name << endl;
		}
      }  
  }

PS: Le code est pas hyper propre si vous avez des idées pour le simplifier hésitez pas ! smile

Merci d'avance

Dernière modification par Gomly (9/06/2015 10:25:34)


Etudiant travaillant à Supaero sur un projet sur FlightGear

Hors ligne

#2 9/06/2015 11:00:28

ctesc356
Membre
Inscription : 18/05/2010
Messages : 3 483

Re : Mathématicien du jour bonjour

Bonjour,
en c++ et en math je ne vais pas aider beaucoup hmm
mais peut-être une piste: il y a cette fonction dans ">Multiplayer >Pilot-List
pilot-10.png
regarde dans: "data/Nasal/multiplayer.nas" ligne 275 et+, func(id)
et: "data/geo.nas" ligne 184, "course_to"
Je pense que c'est là que ça se goupille wink


Intel i5-9400F, 16Go Ram, Nvidia GTX1660Ti, Linux Mint

Hors ligne

#3 9/06/2015 14:12:03

Gomly
Membre
Inscription : 27/05/2015
Messages : 12

Re : Mathématicien du jour bonjour

J'ai as bien compris a quoi le brg correspond ?


Etudiant travaillant à Supaero sur un projet sur FlightGear

Hors ligne

#4 9/06/2015 15:05:30

ctesc356
Membre
Inscription : 18/05/2010
Messages : 3 483

Re : Mathématicien du jour bonjour

Gomly a écrit :

J'ai as bien compris a quoi le brg correspond ?

C'est la direction de cet avion par rapport au tien, donc le cap à prendre pour le rejoindre.
pilot-10.jpg


Intel i5-9400F, 16Go Ram, Nvidia GTX1660Ti, Linux Mint

Hors ligne

#5 9/06/2015 15:15:00

Gomly
Membre
Inscription : 27/05/2015
Messages : 12

Re : Mathématicien du jour bonjour

Mmmmm smile ça peut être intéressant en effet wink ça pourra éviter mes calculs un peu foireux hmm même si j'aimerai comprendre pourquoi ses calculs en question ne fonctionne pas ;p

J'attend la réponse des Matheux tongue
Merci en tous cas !


Etudiant travaillant à Supaero sur un projet sur FlightGear

Hors ligne

#6 9/06/2015 15:22:15

ctesc356
Membre
Inscription : 18/05/2010
Messages : 3 483

Re : Mathématicien du jour bonjour

Gomly a écrit :

ça pourra éviter mes calculs un peu foireux hmm même si j'aimerai comprendre pourquoi ses calculs en question ne fonctionne pas ;p

Je ne veux surtout pas te détourner des maths smile
Mais je pense qu'en décortiquant "geo.nas" et consorts tu trouveras comment c'est fait et peut-être l'erreur dans ton prog.


Intel i5-9400F, 16Go Ram, Nvidia GTX1660Ti, Linux Mint

Hors ligne

#7 9/06/2015 15:48:45

Gomly
Membre
Inscription : 27/05/2015
Messages : 12

Re : Mathématicien du jour bonjour

J'ai fouillé un peu j'ai trouvé ca

call(func ret = math.mod(math.atan2(math.sin(dlon) * math.cos(dest._lat),
				math.cos(me._lat) * math.sin(dest._lat)
				- math.sin(me._lat) * math.cos(dest._lat)
				* math.cos(dlon)), 2 * math.pi) * R2D, nil, var err = []);

ce qui ressemble pas mal a un calcul d'angle j'ai essayé de reproduire ca dans mon code mais le math.mod me pose soucis je ne sais pas si c'est module , modulo ou autre chose ...
j'y connais pas grand chose en nasal hmm


Etudiant travaillant à Supaero sur un projet sur FlightGear

Hors ligne

#8 10/06/2015 7:51:30

Clm76
Membre
Lieu : LFOH - LFOY
Inscription : 22/10/2012
Messages : 1 632

Re : Mathématicien du jour bonjour

Bonjour,

le math.mod me pose soucis je ne sais pas si c'est module , modulo ou autre chose ...

C'est la fonction modulo en nasal. On la trouve aussi sous la forme math.fmod().    http://wiki.flightgear.org/Nasal_librar … fmod.28.29


Fg 2020.4.0 - Linux Mint 21.3 Victoria - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 525
+ Hp notebook-15 - Linux Mint 21.3 Victoria -  CPU i3-7020u - Ram 4Go - Intel Graphics 620.

Hors ligne

#9 10/06/2015 11:18:53

Gomly
Membre
Inscription : 27/05/2015
Messages : 12

Re : Mathématicien du jour bonjour

Oui j'ai trouvé la formule de FGFS fonctionne a 2pi pret donc j'ai modifié légèrement et ça me donne de bon résultat smile !!
Je me bas un peu avec les fichier XML et j'aurai réussi mon truc !

Merci pour vos aides


Etudiant travaillant à Supaero sur un projet sur FlightGear

Hors ligne

#10 22/08/2015 12:54:17

dany93
Administrateur
Lieu : Région Parisienne
Inscription : 5/07/2009
Messages : 4 037

Re : Mathématicien du jour bonjour

Bonjour Gomly,

Tes calculs trigonométriques sont-ils valables avec cette géométrie non euclidienne ? On est ici sur un espace courbe (la terre) et les calculs d'angles à partir des coordonnées n'obéissent évidemment plus aux mêmes lois que la géométrie dans le plan. Sauf peut-être très localement (ce qui devrait te suffire) et pas trop loin de l'équateur.

Enfin, si j'ai bien compris, car je n'ai regardé tes formules que très rapidement... Et j'ai l’impression que c'est strictement de la géométrie plane.

Dany


FG 2020.4.0, Linux Mint 20.3, Intel Core i7-11700F @ 2.50GHz, RAM 32 GB DDR4, NVIDIA GeForce RTX 3060 (12 GB)
Boeing 787-8 (YASim, avec nickyivyca, aco)
Hangar avions Patten (PAF) Robin  DR400 JSBSim, Douglas DC3 JSBSim, CAP10B, Tecnam P92 JSBSim.

Hors ligne

Pied de page des forums