[SDL]Comment faire tourner un objet selon un axe de rotation ?
forumti
Messages postés4Date d'inscriptionsamedi 7 août 2004StatutMembreDernière intervention11 août 2004
-
7 août 2004 à 21:57
forumti
Messages postés4Date d'inscriptionsamedi 7 août 2004StatutMembreDernière intervention11 août 2004
-
11 août 2004 à 19:13
Bonjour,
je souhaiterai créer un compteur (de voiture). seulement, je ne sais pas comment faire pour faire tourner l'aiguille...
est-ce que vous auriez une idée ? merci
ps : je développe uniquement sous linux. je vous prierai donc de ne pas faire intervenir des fonctions spécifiques à windows ;)
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 7 août 2004 à 23:29
Salut,
je n'ai aucune notion en C++ mais je peut déjà te donner une solution (sans exemple)
Il faut se servir des Cosinus et Sinus pour tracer ton aiguille.
Déjà il faut convertir ta vitesse en angle.
Si tu veut que sur ton compteur ça aille de 0 à 200, alors tu fait 200/360 et ensuite pour obtenir l'angle, tu calcule Angle = (200/360)*Vitesse.
Bien sur la sur ton compteur le sens sera contraire aux aiguilles d'une montre et il commencera à l'horizontale à droite (si tu me suis toujours). Donc il faut déjà décaler l'endroit de début, donc à ton angle tu lui enlève 90°
Angle=Angle-90°
Puis il faut inverser le sens :
Angle=0-Angle
Ensuite quand tu voudras dessiner ton compteur, il faut dessiner la ligne en utilisant ces coordonées :
X1 = CentreX
Y1 = CentreY
X2 = CentreX + Cos(Angle) * Taille_Aiguille
Y2 = CentreY + Sin(Angle) * Taille_Aiguille
donc tu obtient 2 points que tu relie par une ligne (je répète je ne sais pas faire ;-)
Attention : Si dans la fonction cosinus et sinus il faut envoyer des angles en radians, alors il faut le convertir avant avec :
Angle = Angle * Pi / 180
Pi est environ de 3.1415926 (je connais pas + de décimales de tete).
Il y a encore beaucoup d'améliorations à faire, mais t'inquiète tu y arrivera, par exemple pour que l'aiguille ne parte pas a la verticale, tu peut lui retirer quelques degré :
Angle = Angle - 10
Mais bon tu t'en sortira très bien ;-)
J'espère t'avoir été utile.
MadM@tt
Messages postés2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 7 août 2004 à 23:49
Autant pour moi...
Si ça vous interesse je suis en train de faire cette source en Visual Basic et elle sera surement sur vbfrance ce soir ou demain, donc si ceux que ça interesse sont près à déchiffrer le VB faites-y un tour.
forumti
Messages postés4Date d'inscriptionsamedi 7 août 2004StatutMembreDernière intervention11 août 2004 9 août 2004 à 13:38
ok, j'ai mis en place le calcul des coordonnées selon l'angle.
mais quelqu'un sait-il tracer une ligne ?
ce serait certainnement beaucoup plus simple que de calculer la fonction affine à partir des deux coordonnées puis de tracer point par point.
merci à ceux qui pourront à nouveau m'aider...
forumti
Messages postés4Date d'inscriptionsamedi 7 août 2004StatutMembreDernière intervention11 août 2004 9 août 2004 à 20:54
tant pis pour la ligne, je fais point par point.
mais j'ai un problème...
pour voir mes sources : trace.c trace.h vu.bmp prog compilé si vous voulez compiler, il faut tout mettre dans le même répertoire ;)
j'ai un problème avec mon aiguille : elle n'est pas au bon endroit ! dans le prog compilé, je lui demande d'être à 10° mais elle est horizontale !
si quelqu'un peut m'aider...
merci
forumti
Messages postés4Date d'inscriptionsamedi 7 août 2004StatutMembreDernière intervention11 août 2004 11 août 2004 à 19:13
justement ! il n'y a aucune fonction qui permette de tracer une ligne ! (je ne l'ai pas trouvée du moins). j'ai finalement réussi à tracer une ligne correctement :) j'ai utilisé l'algo de Bresenham et voilà :p
merci à vous de m'avoir aidé
pour les sources, c'est mon hébergeur qui délire en ce moment