Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Faudrait voir à tourner comme il faut

Posté par
yucca
09-06-17 à 20:20

Bonjour, je cherche à simuler le trajet en lignes brisées d'un objet qui peut tourner sur lui même... Disons une voiture avec les roues au milieu.

J'ai une série de points par lesquels je dois passer (A,B,C,D,...). En fait le point A ne sert qu'à créer le vecteur avec l'origine de la voiture, qui donne donc son orientation.

Bien. Pour aller sur le point B je dois calculer la rotation que dois faire la voiture, puis la distance à parcourir. Une fois au point B, je dois calculer la rotation pour pointer vers le point C, ect... Pour le calcul des distances, je n'ai pas de soucis. Par contre pour les angles je suis un peu perdu (il faut dire que j'ai de lointains souvenirs de mes cours, que j'écoutais peu... Il faut bien le dire).

Pour ce qui est des sens de rotations, peu importe pour le moment, le mieux serait de savoir si elle doit tourner dans le sens horaire ou anti-horaire pour aller au plus vite, mais ce n'est pas très grave si elle tourne que dans le sens horaire par exemple.

Je joins une image pour mieux comprendre. Pour simplifier, le premier trajet est celui d'un carré mais bien entendu les angles peuvent être plus exotiques comme sur la ligne du dessous.

Donc comment calculer le premier angle pour pointer sur B, puis une fois sur B et dans la direction obtenue, comment pointer sur C... Ect...

Voilà, si vous pouvez m'aider sachant qu'il faut me parler simple et si possible en prenant des coordonnées de points en exemples et en détaillant le calcul. Je ne suis pas bête mais il faut m'expliquer longtemps

Faudrait voir à tourner comme il faut

Posté par
fm_31
re : Faudrait voir à tourner comme il faut 09-06-17 à 20:29

Bonjour ,

dans les  4  premiers schémas , chaque rotation est de  +90°
Pour les 3 autres , en notant  M  (par exemple) le point entre  A  et  B  , les angles sont (\vec{AM} , \vec{MB})\; puis\; (\vec{MB} , \vec{BC})

Cordialement

Posté par
yucca
re : Faudrait voir à tourner comme il faut 09-06-17 à 20:41

Super... Merci pour votre réponse. Effectivement la première ligne n'est fait que d'angles simples pour pouvoir faire la preuve du calcul de tête . Je ne voudrais pas abuser mais pouvez vous m'indiquer comment faire le calcul. Disons, par exemple : A(10,1), M(0,0), B(-2,10) et C(8,12)... Mais pour faire simple on peut aussi se dire A(10,0), M(0,0), B(0,10) et C(10,10)... On connait le résultat à l'avance (des angles droits), le calcul peut se vérifier facilement. Désolé, je ne suis pas une flèche en produits scalaires... C'est de ça dont il s'agit ?

Posté par
mathafou Moderateur
re : Faudrait voir à tourner comme il faut 09-06-17 à 20:49

Bonjour,

tout dépend aussi de ce qui est donné (coordonnées des points ou quoi ?)

en parlant d'algorithmes et de programmation, l'angle sera déterminé par la fonction atan2(y, x)
(cette fonction existe pratiquement dans n'importe quel langage)
qui donne la direction du vecteur (x; y) par rapport au vecteur unité des abscisses

les angles relatifs entre vecteurs s'obtiennent ensuite par différences.

Posté par
mathafou Moderateur
re : Faudrait voir à tourner comme il faut 09-06-17 à 22:18

exemple avec tes valeurs (en JavaScript)


// coordonnées des points
X = [10, 0, -2, 8];
Y = [1, 0, 10, 12];

n = X.length;

// arrondit à deux chiffres après la virgule, valeur principale entre -180 et +180°
function roundit(x) {
  while(x>180) x-=360; 
  while(x<=-180) x+=360;
  return Math.floor(x*100)/100;
}

with (Math) {
a1 = atan2(Y[1]-Y[0], X[1]-X[0]); // orientation du vecteur en radians
document.write("
Orientation initiale = "+roundit(a1*180/PI)); for (i = 1; iOrientation = "+roundit(a2*180/PI)+"°, rotation = "+roundit((a2-a1)*180/PI)+"°"); a1 = a2; // remplace ancienne valeur }


résultat :

Orientation initiale = -174.29
Orientation = 101.3°, rotation = -84.41°
Orientation = 11.3°, rotation = -90°

en accord exact avec la figure sur Geogebra (aux arrondis près) :

Faudrait voir à tourner comme il faut


Posté par
mathafou Moderateur
re : Faudrait voir à tourner comme il faut 09-06-17 à 22:21

erreur de copier coller du programme : il maque l'accolade fermante du with (math) tout à la fin

Posté par
mathafou Moderateur
re : Faudrait voir à tourner comme il faut 09-06-17 à 22:31

et en corrigeant les coordonnées du point de départ de (10; 1) en (10; 2) on obtient bien un carré
et les angles de -90° (90° dans le sens des aiguilles d'une montre)

Posté par
bbomaths
re : Faudrait voir à tourner comme il faut 10-06-17 à 08:04

Bonjour à tous...

Cela me rappelle une tortue des années 1980...

Turtle :

LOGO :

Posté par
mathafou Moderateur
re : Faudrait voir à tourner comme il faut 10-06-17 à 09:03

ou Scratch ... (semble à la mode en collège de nos jours)

Posté par
yucca
re : Faudrait voir à tourner comme il faut 10-06-17 à 19:56

Merci Mathafou, c'est top ! Je vais cogiter tout ça. Nickel l'exemple javascript.

Répondre à ce sujet

Seuls les membres peuvent poster sur le forum !

Vous devez être connecté pour poster :

Connexion / Inscription Poster un nouveau sujet
Une question ?
Besoin d'aide ?
(Gratuit)
Un modérateur est susceptible de supprimer toute contribution qui ne serait pas en relation avec le thème de discussion abordé, la ligne éditoriale du site, ou qui serait contraire à la loi.


Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !