IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

[Trigonométrie] Calculer un angle


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Remizkn
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Par défaut [Trigonométrie] Calculer un angle
    Bonjour,

    Je suis en train de réalisé un moteur de raycasting (pour la projection d'une "fausse 3D" dans le but de réalisé un moteur de type Doom). Jusqu'ici, mon moteur fonctionne, mais il me faut réduire l'effet de distorsion optique (FOV), mais pour cela, il me faut calculer l'angle de deux droites.

    Je joins ici une image schéma: schéma , mon triangle n'est pas rectangle par contre, mais je voudrais connaître en AS3 le calcul qui permettrais d'obtenir l'angle des deux droites: A-B et A-C.

    Merci d'avance, cela m'aiderait pas mal.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant : Développement Logiciel et Multimédia
    Inscrit en
    Décembre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant : Développement Logiciel et Multimédia

    Informations forums :
    Inscription : Décembre 2010
    Messages : 34
    Par défaut
    Hello. Partons du principe que dans ton triangle (pas rectangle ) tu connais les coordonnées des points A, B et C.

    Tu peux procéder comme suit (mathématiquement parlant. Je ne connais pas AS3).

    Il faut utiliser une formule qui dit que le cosinus de l'angle que tu cherches équivaut au produit scalaire de deux vecteurs directeurs définissant tes droites, ceci divisé par la multiplication des normes (longueurs) de ces deux vecteurs directeurs.

    Par contre, si tu connais d'autres informations dans ton triangle. Tu devrais avoir plus de facilité à utiliser le théorème du sinus ou du cosinus (c'est selon)
    Sans quoi, voici un détaillé de ce que je t'expliquais avec les vecteurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Le point A à les coordonnées x,y suivantes : ax, ay
    Le point B à les coordonnées x,y suivantes : bx, by
    Le point C à les coordonnées x,y suivantes : cx, cy
    
    Calculer les vecteurs directeurs.
    
    Si tu recherches l'angle en A, il te faut calculer les deux vecteurs directeurs qui partent de ce point.
    
    Les composantes x,y du vecteur ab (définissant la droite AB et que l'on appelera : Vab) se calcule ainsi :
    pour x (qu'on appelera : Vab_x) : Vab_x = bx - ax
    pour y (qu'on appelera : Vab_y) : Vab_y = by - ay
    
    On procède de la même manière pour le vecteur ac (définissant la droite AC et que l'on appelera Vac)
    pour x (qu'on appelera : Vac_x) : Vac_x = cx - ax
    pour y (qu'on appelera : Vac_y) : Vac_y = cy - ay
    
    Calcul du produit scalaire des vecteurs directeurs
    
    Le résultat du produit scalaire entre Vab et Vac (que l'on appelera : PS) se calcule comme suit : PS = (Vab_x*Vac_x) + (Vab_y*Vac_y)
    
    Calcul de la multiplication des normes
    
    Le dernier élement à connaître pour pouvoir utiliser la formule citée plus haut et le résultat de la multiplication des normes (des longueurs) de Vab et Vac. On appelera ce résultat MN.
    
    Il faut procéder ainsi : MN = sqrt((Vab_x)^2 + (Vab_y)^2) * sqrt((Vac_x)^2 + (Vac_y)^2))
    
    Calcul de l'angle entre deux droites
    
    Maintenant que tu as tous tes éléments, la valeur de ton angle (que l'on appelera : alpha) se calcule ainsi
    
    alpha = arccos(PS/MN)
    Info, si j'ai un peu plus de temps ce soir (et si ca t'intéresse), je te posterai la version "bourrin", c'est à dire truc massif mais sans opération intermédiaire.

    J'espère néanmoins que ceci t'aidera déja.
    Si tu ne comprends pas quelques chose, dis le moi. Ca peut paraître un incompréhensif comme ça. Ca doit l'être encore si tu n'es pas trop un matheux. Mais je t'explique volontiers

    Bonne soirée

  3. #3
    Membre éclairé Avatar de Remizkn
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Par défaut
    Je viens d'arrivé, je suis ravis de voir une réponse aussi documenté que celle-ci.
    En fait, pour mon triangle, je connais la longueur de toutes les droites (donc j'ai un max d'info). Je vais plancher sur ce que tu viens de me donner. Merci beaucoup

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant : Développement Logiciel et Multimédia
    Inscrit en
    Décembre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant : Développement Logiciel et Multimédia

    Informations forums :
    Inscription : Décembre 2010
    Messages : 34
    Par défaut
    Si tu connais la longueur de toutes les droites, je te recommande d'utiliser le Théorème du cosinus. Beaucoup plus simple à mettre en place.

    Je t'ai donné la réponse précédente en partant du principe que tu avais un minimum d'informations.

    Le théorème du cosinus se présente comme suit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
     
    Si les trois sommets de ton triangle se nomment A, B et C, les côtés opposés à ces points ce nomment respectivement a, b et c.
     
    Angle en A : alpha
    Angle en B : Beta
    Angle en C : Gamma
     
    Les formules sont les suivantes. (elles sont répétitives, mais il existe seulement trois cas de figures, je te les mets les trois).
     
    a^2 = (b^2) + (c^2) - (2*b*c * cos(alpha))
    b^2 = (a^2) + (c^2) - (2*a*c * cos(beta))
    c^2 = (a^2) + (b^2) - (2*a*b * cos(gamma))
     
    Et comme je suis gentil, En voici une de résolue pour trouver un angle. Je te laisse adapter la formule. ça ne devrait pas être trop compliqué.
     
    alpha = arccos( ((a^2)-(b^2)-(c^2)) / (-2*b*c) )
    Redis moi si tu as un souci^^

  5. #5
    Membre éclairé Avatar de Remizkn
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 322
    Par défaut
    Le seul truc, c'est que pour faire ce calcul par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alpha = arccos( ((a^2)-(b^2)-(c^2)) / (-2*b*c) )
    Il me faut les valeurs de a^2, b^2 et c^2, hors, pour obtenir ces valeurs, il me faut connaitre la valeur de l'un des angles:

    a^2 = (b^2) + (c^2) - (2*b*c * cos(alpha))
    b^2 = (a^2) + (c^2) - (2*a*c * cos(beta))
    c^2 = (a^2) + (b^2) - (2*a*b * cos(gamma))

    Comment faire sans?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant : Développement Logiciel et Multimédia
    Inscrit en
    Décembre 2010
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant : Développement Logiciel et Multimédia

    Informations forums :
    Inscription : Décembre 2010
    Messages : 34
    Par défaut
    Le symbole ^ représente une puissance. a^2 signifie donc a élevé au carré. mais je pense que tu le savais déjà. (Mais Je ne comprends pas ce que tu ne comprends pas alors je le dis au cas ou).

    Je croyais que tu connaissais la longueur de toutes les droites.

    Si tu considères que a b et c sont les cotés de ton triangle, tu devrais connaitre leur longueur non ?

    Voici un petit dessin (vite fait sous paint).

    tu as donc tes côtés et tes angles sur ce dessin. a, b et c, sont les cotés du triangle. Les cotés débordent, c'est fait exprès (pour illustrer que c'es un croisement de droites).

    Explique moi ce qui ne vas pas
    Images attachées Images attachées  

Discussions similaires

  1. Calcul d'angle entre deux vecteurs
    Par feynman dans le forum Fortran
    Réponses: 8
    Dernier message: 22/09/2007, 13h59
  2. Calcul d'angle entre 2 vecteurs - direction
    Par lothei dans le forum Développement 2D, 3D et Jeux
    Réponses: 4
    Dernier message: 03/09/2007, 19h29
  3. Calcul d'angles
    Par Giansolo dans le forum Octave
    Réponses: 3
    Dernier message: 27/02/2007, 19h00
  4. calcule d'angle entre 3 points d'une matrice
    Par bmw13fr dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 08/04/2006, 18h56
  5. calculer un angle
    Par m.nico dans le forum Langage
    Réponses: 7
    Dernier message: 05/11/2003, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo