J'ai 27ans, Bac ES et jamais vu ce théorème qui semble être la solution pour trouver les angles d'un triangle quelconque dont on ne connait que les côtés.
Je vais donc donner un exemple en priant que quelqu'un puisse me débloquer ou me dise que c'est infaisable à la limite.
Dans un jeu 3d, chaque point du jeu a des coordonnées (x, y, z). On peut oublier les z étant donné que le joueur ne peut pas voler. x et y sont inclus dans [<math>\(-\infty\)</math>;<math>\(+\infty\)</math>]
Mon but, faire en sorte que mon personnage en rejoigne un autre.
Pour cela, je peux le faire tourner de P° et avancer.
J'ai le (x, y) de mon perso, (x1, y1) du perso à atteindre.
Pour faire un système de triangulation afin de savoir de quel degré je dois tourner, je prend un point au pif, je choisi (100, 100) au hasard.
Sur un exemple au hasard toujours à un moment T voici les valeurs que j'obtiens :
Moi
x=-63.6826515198
y=59.0594825745
Lui
x1=-18.1000003815
y1=-15.3999996185
Les distances sont obtenues avec : <math>\(\[\sqrt[]{(y2-y1)^{2}+(x2-x1)^{2}}\]\)</math>
Le triangle obtenu :
A=87.304023809 #distance entre les 2 joueurs
B=168.725031858 #distance entre moi et le point (100,100)
C=165.120471178 #distance entre lui et le point (100,100)
Les valeurs utiles à l'équation.
AA=7621.99257325
BB=28468.1363756
CC=27264.7700021
CA=14415.6815471
Le résultat de l'équation (merci wikipédia): <math>\(\[\frac{(27264.7700021+7621.99257325-28468.1363756)}{(2*14415.6815471)}=46264435.6323\]\)</math>
Hors apparemment arcos ne fonctionne que quand l'équation est incluse dans [-1;1]et du coup mon programme refuse de me donner mon angle en me disant qu'il y a un soucis mathématiques
Ouhla, effectivement, je faisais confiance à Python j'ai même pas pensé à recalculer à la main tellement l'équation est simple
La honte...ca fait quand même des heures que je bloque là dessus...
Merci. Je vais donc devoir trouver où mon code a mal calculé.
Citation
Pourquoi prends-tu un point au hasard et à quoi correspond-il ?
Pour calculer un angle, il faut au moins 3 points. Je n'en ai que 2. J'en prend donc un troisième totalement au hasard par rapport auquel je me repère afin de pouvoir dessiner un triangle dans le but d'obtenir les angles de ce triangle afin de savoir de combien de degré je dois tourner pour que mon joueur arrive dans l'axe de l'autre joueur.
Non ? Ma logique est bidon ?
Il y a beaucoup plus simple : utilise la fonction <math>\(\operatorname{atan2}(y_2-y_1, x_2-x_1)\)</math> qui va te donner directement l'orientation souhaitée.
Moi ce que je trouve étrange, c'est d'invoquer AlKashi pour ça.
Une approche plus vectorielle :
Ton perso est un point <math>\(S\)</math>, il regarde selon un vecteur <math>\(\vec V\)</math>.
Il veut atteindre <math>\(D\)</math>.
L'angle, tu le trouves a partir du produit scalaire : <math>\(\vec SD.\vec V= ||\vec SD||*||\vec V||*cos(angle)\)</math>
ça te donnera un angle absolu. Si tu veux un angle orienté, si peux calculer le signe du déterminant des deux vecteurs <math>\(\vec SD\)</math> et <math>\(\vec V\)</math>.
Avec ça, tu n'as pas besoin d'un 3e point, bien que le 3e point en question ici pourrait être n'importe quel point que le joueur regarde, à savoir <math>\(S + k*\vec V\)</math> avec <math>\(k>0\)</math>
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html