Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 3 nov. 2004 à 12:48
Il faut passer par les coordonnées cartésiennes (c'est peut-être possible seulement avec les angles, mais trop compliqué).
Soit (Ax1,Ay1) et (Bx1,By1) tes 2 points, AngleA et AngleB tes 2 angles correspondants, et LongA et LongB la longueur
Alors (Ax2,Ay2) = (Ax1,Ay1) + LongA * (cos(AngleA),sin(AngleA))
et la même chose pour B
ensuite (changement de repères, avec B1 à l'origine) :
ux Ax1-Bx1; uy Ay1-By1vx Ax2-Bx1; vy Ay2-By1Px Bx2-Bx1; Py By2-By1
det = ux*vy-uy*vx
if abs(det)>0.0001 then ' segments non parallèles
Qx = (vy*px-vx*py)/det
Qy = (ux*py-uy*px)/det
if Qx>0 and Qy>0 and Qx+Qy>1 then
' intersection
else
' pas d'intersection
end if
end if
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 29 oct. 2004 à 14:05
calcul de la fonction y = ax+b pour chaque droite.
calcul des coordonnées x,y du point d'intersection.
tester si point d'intersection se trouve sur les segments.
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 29 oct. 2004 à 15:50
coordonnées Ligne: X1,Y1,X2,Y2
équation d'une droite: y = a*x + b
'calcul des paramètres a1 et b1 pour Ligne n°1:
Dim z As Double
Dim a1 As Double
Dim b1 As Double
z = X1 -X2
'on triche pour éviter la division par zéroIf z 0 Then z 0.0001
b1 = (X1 * Y2 - X2 * Y1) / z
a1 = (Y1 - b1) / X1if a1 0 Then a1 0.0001
'même calcul pour Ligne 2: a2 et b2
point d'intersection des 2 droites:
X = (b2 - b1) / (a1 - a2)
Y = a1 * X + b1
Vous n’avez pas trouvé la réponse que vous recherchez ?
Vb Lover
Messages postés221Date d'inscriptionvendredi 30 novembre 2001StatutMembreDernière intervention13 février 20105 3 nov. 2004 à 21:41
désolé de te décevoir Gobillot, mais c'est bien un déterminant et non un produit scalaire que je calcule. Donc si c'est égal à zéro, c'est que c'est parallèle.
Si t'es pas convaincu : je fais un changement de base, c'est à dire que j'emmène les 2 vecteurs u et v sur (1,0) et (0,1). Ceci n'est possible que si u et v ne sont pas parallèles (pour pouvoir toujours engendrer RxR de dimension 2). En gros, c'est plutôt un produit vectoriel que je fais, et non un produit scalaire (donc c'est le sinus et non le cosinus qui intervient dans la norme).
Si tu n'es toujours pas convaincu, voilà l'exemple le plus simple qu'on puisse trouver :
B1 = (0,0)
A1 = (1,0)
A2 = (0,1)
donc
u=(1,0) et v=(0,1)det 1*1-0*0 1 <> 0
ça c'était pour prouver que perpendiculaire ne veut pas dire det=0
et maintenant pour te montrer que parallèle donne det=0 :
A1 A2 (1,0)det 1*0-0*1 0
Bon je m'arrête là, les intéressés non qu'à sortir un livre d'algèbre linéaire tout bête, qui parle des matrices, de leur inversion et de changement de repère