4Fermer6
PolluxLe 15/12/2004 à 18:03
wolfgane :
salut sasume, oui je calcul en float car c'est un logiciel d'astronomie (ephemeride et pilotage de telesctope) j'ai don besoin d'une grande precision.

Tu peux avoir autant de précision que tu veux en virgule fixe ^^ Et honnêtement, pour le code d'affichage, je doute que tu aies besoin de tant de précision que ça : 16 bits pourraient quasiment suffire si tu choisis bien les plages de tes nombres...
Pour utiliser les virgules fixes, est-ce possible UNIQUEMENT dans une fonction ?

confus
		xa = r*(cos(a)*cos(b));
 		ya = r*(cos(a)*sin(b));
 		za = r*sin(a);
 		xs = ((unsigned int)Int_Float(xa+ya*(angle)));
 		ys = (unsigned int)Int_Float(za+ya*(angle));
 		xx = xs+x;
 		yy = ys+y;
   while(b<=j)
 	 {
 		xa = r*(cos(a)*cos(b));
 		ya = r*(cos(a)*sin(b));
		za = r*sin(a);
 		xs = ((unsigned int)Int_Float(xa+ya*(angle)))+x;
 		ys = (unsigned int)Int_Float(za+ya*(angle))+y;
		DrawLine(xx, yy, xs, ys, A_NORMAL);
 		xx = xs;
 		yy = ys;
		b+=0.2;
   }

Petite remarque, c'est une très mauvaise idée de dupliquer le code comme ça, parce que ton code sera plus pénible à lire, et tu risques de faire des erreurs (que tu ne verras pas forcément si tu ne relis pas attentivement *tous* les bouts de code).

Quelque chose comme :
   xx = -1;
   b -= 0.2;
   do
 	 {
 		xa = r*(cos(a)*cos(b));
 		ya = r*(cos(a)*sin(b));
		za = r*sin(a);
 		xs = ((unsigned int)Int_Float(xa+ya*(angle)))+x;
 		ys = (unsigned int)Int_Float(za+ya*(angle))+y;
		if (xx >= 0)
                    DrawLine(xx, yy, xs, ys, A_NORMAL);
 		xx = xs;
 		yy = ys;
		b+=0.2;
   } while(b<=j);

serait bien plus lisible et te permettrait de faire des modifications après bien plus facilement... (enfin là la modification que j'ai faite ne marche que si tu supposes que les arguments à DrawLine ne sont pas en dehors de l'écran, ce qui n'est pas forcément vrai; sinon, il n'y a qu'à transformer "xx = -1" en "xx = INT_MIN" et "xx >= 0" en "xx == INT_MIN", ce sera juste un chouilla plus lent et gros)

(idem pour le reste du code, mais j'ai pas envie de le lire tongue)