Vous n'êtes pas identifié(e).
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.
Pages : 1
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 !
Merci d'avance
Dernière modification par Gomly (9/06/2015 10:25:34)
Etudiant travaillant à Supaero sur un projet sur FlightGear
Hors ligne
Bonjour,
en c++ et en math je ne vais pas aider beaucoup
mais peut-être une piste: il y a cette fonction dans ">Multiplayer >Pilot-List
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
Intel i5-9400F, 16Go Ram, Nvidia GTX1660Ti, Linux Mint
Hors ligne
J'ai as bien compris a quoi le brg correspond ?
Etudiant travaillant à Supaero sur un projet sur FlightGear
Hors ligne
Hors ligne
Mmmmm ça peut être intéressant en effet
ça pourra éviter mes calculs un peu foireux
même si j'aimerai comprendre pourquoi ses calculs en question ne fonctionne pas ;p
J'attend la réponse des Matheux
Merci en tous cas !
Etudiant travaillant à Supaero sur un projet sur FlightGear
Hors ligne
ça pourra éviter mes calculs un peu foireux
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
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
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
Etudiant travaillant à Supaero sur un projet sur FlightGear
Hors ligne
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 2024.2.0 - Linux Mint 22.1 Xia - Cinnamon et Mate en dual boot - CM Asus P8H67 MLE - CPU i7 3770K - 12 Go Ram - Nvidia Geforce GTX 1660TI - Driver Nvidia 550
+ Hp notebook-15 - Linux Mint 22.1 Xia - CPU i3-7020u - Ram 4Go - Intel Graphics 620.
Hors ligne
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 !!
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
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
Pages : 1