-
20/01/2004 - 16h40 yvant
Bonjour à tous !
Je suis nouveau ici, alors j'espere ne pas a&voir l'air trop ridicule avec ma question (!). Je travaille comme développeur Flash pour réaliser des jeux videos, et la, je seche sur un probleme. Je vous laisse un petit schema pour etre plus clair.
Alors voila : j'aimerais calculer l'angle X2BC (alpha2). Je connais l'angle X1AB, les coordonnées des points A, B, C. J'ai reussi à trouver (maladroitement) l'equation de la tangente (T1T2), mais la j'arrive au bout de mes compétences. Est ce qu'on peut determiner l'angle entre 2 droites a partir de leur equation ? Ou alors faut il procéder de maniere totalement différente - je pense nottament à la trigo.
J'espere que vous pourrez m'aider, merci ! -
20/01/2004 - 16h58 Rincevent
salut,
pour trouver l'angle entre deux droites, à mon avis, le plus simple (qui peut s'appliquer sans problème dans ton cas apparemment) est de trouver les vecteurs directeurs (le vecteur AB pour la droite passant par A et B) et d'appliquer la formule:
produit scalaire de U et V (où U et V sont deux vecteurs) = produit des normes de U et de V fois le cosinus de l'angle entre les vecteurs.
en faisant attention au signe de l'angle (si besoin est), tu peux ensuite facilement remonter du cosinus à l'angle...
-
20/01/2004 - 17h07 yvant
Honnetement, mes connaissances mathématiques sont peu avancées, et j'avoue ne pas connaitre le produit scalaire ni le produit de normes... Est ce que je pourrais avoir plus de detail ou un petit tutoriel quelque part ?
-
20/01/2004 - 17h41 juan
salut yvant!
produit scalaire de U et V (où U et V sont deux vecteurs) = produit des normes de U et de V fois le cosinus de l'angle entre les vecteurs
U a pour coordonnées (u1,u2,u3)
V a pour coordonnées (v1,v2,v3)
Produit scalaire: U.V = u1.v1+u2.v2+u3.v3 que tu connais
norme euclidienne de U dans lR^3= ll U ll = sqrt(u1²+u2²+u3²), avec sqrt="racine"
d'où, U.V = llUll.llVll.cos(alpha2)
cos(alpha2)= U.V/(llUll.llVll)
a+
-
20/01/2004 - 18h05 yvant
OKay. Mais a quoi correspondent U et V concretement. Enfin, leurs coordonnées. Est ce que c'est U (xA, yA, xB, yB) et V (xO, yO, xB, yB) pour l'angle OBA par exemple ?
Par ailleurs je viens de me rendre compte d'une erreur de poids...
Je vous ai dit que je connaissais les coordonnées de C, mais je voulais parler des coordonnées de O en réalité... Ca change peut etre beaucoup de choses... :?
-
20/01/2004 - 18h25 Jeremy
D'expérience je te prédis des problèmes si tu ne connait pas l'agèbre linéaire..
Vecteurs , produits scalaires, produits vectoriels, matrices pour les transformations ... tout ca dans le plan ou dans l'espace, c'est un passage obligé pour programmer les parties graphiques d'un jeu.
Je te conseille un bouquin de math -
21/01/2004 - 00h08 juan
Re-bonsoir,Yvant!
Bien que ce ne soit pas bien grave,je viens de me rendre compte que ton dessin était en 2D et non en 3D.. ops:
Mais de toutes facons,c'est vrai comme dit Jeremy que tu aies un peu de bases pour faire tes calculs(vecteurs directeurs,etc...),sinon au cas par cas tu vas pas t'en sortir.
Pour le vecteur directeur ,essayons de faire simple :
Pour une droite (D):
si tu as y=(p/q).x+c, alors U=(q,p) est un vecteur directeur de cette droite
ex : y = (1/3).x+2,alors U = (3,1) est un vecteur directeur
y = 3.x +2 = (3/1).x + 2,alors (1,3) est un vecteur directeur
on a aussi :
-U est un vecteur directeur pour toutes les droites // à celle-ci
-Tous les multiples : k.(3,1) sont des vecteurs directeurs de la droite
Pour ton schéma,il n' a aucune indication pour C?parce que dans ce cas-là,pas assez d'éléments...
@+
-
21/01/2004 - 08h23 azt
Salut, et bienvenue sur le forum.
L'encadré en dessous c'est ce que j'ai tapé hier hors connection.
[code:1:7220e26ca6]
La methode de Rincevent est simple à appliquer quand on veut obtenir l'angle mathématiquement.
Mais pour l'appliquer en informatique, il faut un peu plus d'astuce. Car la formule qu'il donne demande le calcul de deux normes.
Deux normes impliquent deux racines carrées... Chose à éviter si l'on doit appliquer un traitement identiques à de nombreuses données.
Cela constitue néanmoins une bonne base si l'on rajoute une seconde formule.
Pour connaitre l'angle entre deux droites, si j'ai bien cerné ton problème mais je n'en suis pas sûr. On rectifiera après.
On connait trois points :
A (Xa,Ya)
B (Xb,Yb)
C (Xc,Yc)
La formule que donne ce cher Rincevent avec le produit scalaire:
-> -> -> -> -> ->
u . v = ||u ||.||v ||.cos( u .v)
On ajoute la formule du produit vectoriel
-> -> -> -> -> ->
u ^ v = ||u ||.||v ||.sin( u .v)
(En normes, bien entendu).
calculons le rapport entre les membres des deux formules :
-> -> -> ->
u . v cos( u .v)
________ = __________
-> -> -> ->
u ^ v sin( u .v)
Superbe, les racines disparaissent ! et on obtient directement :
-> ->
u . v -> ->
________ = tan( u .v)
-> ->
u ^ v
Maintenant, il reste a prendre deux vecteurs des droites (AB) et (BC) dont on veut calculer l'angle.
--> -->
AB et BC font l'affaire.
-> ->
AB . BC -> ->
________ = tan( AB .BC)
-> ->
AB ^ BC
Calculons maintenant :
-> ->
AB . BC = (Xb-Xa)(Xc-Xb)+(Yb-Ya)(Yc-Yb)
-> ->
AB ^ BC = (Xb-Xa)(Yc-Yb)-(Yb-Ya)(Xc-Xb)
D'où,
-> -> (Xb-Xa)(Xc-Xb)+(Yb-Ya)(Yc-Yb)
tan( AB .BC) = ---------------------------
(Xb-Xa)(Yc-Yb)-(Yb-Ya)(Xc-Xb)
Il ne reste plus qu'à utiliser l'arctangeante pour avoir l'angle entre les deux droites.
La valeur sera entre -pi et +pi.
[/code:1:7220e26ca6]
Mais je viens de lire que tu ne connaissais pas les coordonnées du point C. Il faudrait alors expliquer comment tu l'obtiens en partant des points A,B et O car là cela ne me saute pas aux yeux
A plus.
AZT
-
21/01/2004 - 08h24 Jeremy
Sisi.
alpha2 = X2 B C = X2 B T2 + T2 B C
or T2 B C = A B T1
et X2 B T2 c'est l'angle donné par le coeff directeur de la tangente (que tu connais si tu connais son équation)
et A B T1 = angle_tangente - alpha1
Donc alpha2 = 2*angle_tangente - alpha1
-
21/01/2004 - 08h56 olle
On ajoute la formule du produit vectoriel
-> -> -> -> -> ->
u ^ v = ||u ||.||v ||.sin( u .v)
sachant que le produit vectoriel donne un vecteur, ça me semble assez bizarre -
21/01/2004 - 09h10 yvant
Oula ! Je viens de refaire les calculs de Jeremy, et ca me semble pas mauvais du tout En procédant par addition et remplacement d'angles on peut y arriver on dirait ! Mais juste pour etre sur : quand tu parles de angle_tangente, tu fais allusion a l'angle X2BT2 ?
En tout cas, merci à tous pour votre aide, et promis, je m'achete un bouquin de maths pour me replonger dans de vieux souvenirs !
-
21/01/2004 - 09h52 azt
Salut à tous,  Envoyé par olle
On ajoute la formule du produit vectoriel
-> -> -> -> -> ->
u ^ v = ||u ||.||v ||.sin( u .v)
sachant que le produit vectoriel donne un vecteur, ça me semble assez bizarre  Et bien, oui
Mais comme le problème est plan, on obtient un vecteur perpendiculaire.
Et ce qui nous interesse ici c'est sa norme. Je suis d'accord j'ai été un peu mauvais sur les notations.
Pour Yvant, le point B, il t'es donné ? Cela peut être n'importe quel point du cercle ou tu l'as calculé à partir des points A et O ?
Si tu veux quelques notions d'infographie tu peux regarder ici pour avoir quelques notions : http://www-ipst.u-strasbg.fr/pat/program/infogr.htm
AZT
-
21/01/2004 - 09h56 yvant
B appartient au cercle. En realité, il s'agit d'un "simulateur" de choc entre 2 objets. Le cercle est l'obstacle. Le point A est le depart de l'objet qui va lui rentre dedans. Il le frappe en B, et il doit repartir dans la direction [BC).
Et merci pour le lien !
-
21/01/2004 - 12h04 Jeremy  Envoyé par yvant Oula ! Je viens de refaire les calculs de Jeremy, et ca me semble pas mauvais du tout  En procédant par addition et remplacement d'angles on peut y arriver on dirait ! Mais juste pour etre sur : quand tu parles de angle_tangente, tu fais allusion a l'angle X2BT2 ?
En tout cas, merci à tous pour votre aide, et promis, je m'achete un bouquin de maths pour me replonger dans de vieux souvenirs ! Exact.
Tu verras que les math sont omniprésentes en programmation graphique.
-
21/01/2004 - 16h34 juan
jeremy quote : ???rien ne le dit sur la figure!?
yvant quote :
Le point A est le depart de l'objet qui va lui rentre dedans. Il le frappe en B, et il doit repartir dans la direction [BC).
ok, là d'accord...
et azt a raison, calcul de racines = pas bon du tout en info...
@+
| | |