Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Géométrie]Théorème d'Al-Kashi

appliqué à un jeu vidéo

Sujet résolu
    3 décembre 2011 à 18:58:09

    Salut les zéros.

    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 :(

    Ai-je loupé quelque chose svp ?

    Merci d'avoir lu tout ça :-°
    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2011 à 19:42:32

      <math>\(\frac{(27264.7700021+7621.99257325-28468.1363756)}{(2*14415.6815471)}\)</math> n'est pas égale à la valeur que tu donnes, mais à environ 0.22.

      J'ai pas regardé le reste.
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2011 à 20:00:16

        Citation : Goshi

        J'ai […] 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.


        Tu parles du théorème du cosinus ?

        <math>\(a^2=b^2+c^2-2\,b\,c\,\cos\alpha\)</math>

        EDIT: Pardon, je ne savais pas que le théorème d'Al-Kashi était un autre nom pour le même théorème…

        Citation

        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.


        Je n'ai rien compris… o_O Pourquoi prends-tu un point au hasard et à quoi correspond-il ? :-°
        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2011 à 20:09:30

          Ouhla, effectivement, je faisais confiance à Python j'ai même pas pensé à recalculer à la main tellement l'équation est simple o_O
          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 ?
          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2011 à 20:23:08

            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.
            • Partager sur Facebook
            • Partager sur Twitter
              4 décembre 2011 à 3:18:48

              J'obtiens en effet d'excellent résultat avec ceci :D. Ca maaaarche, merci.
              • Partager sur Facebook
              • Partager sur Twitter
                6 décembre 2011 à 23:54:45

                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>
                • Partager sur Facebook
                • Partager sur Twitter

                Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                [Géométrie]Théorème d'Al-Kashi

                × 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.
                • Editeur
                • Markdown