Intercetion de 2 segement. URGENT S.V.P

Résolu
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006 - 29 oct. 2004 à 09:39
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 - 3 nov. 2004 à 21:41
Qui connait la formule pour trouver si 2 segement se croisents ???
Soit avec x, y, angle du segment (x et y pour l'origine) et longeur = 1

soit avec x1,x2,y1,y2 mais ça m'arrange moins...

The Best :-p

7 réponses

Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
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

J'ai fait ça de tête, mais ça doit marcher !

VB Lover
3
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
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.

Daniel
0
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
29 oct. 2004 à 15:39
Comment fait pour trouver le point d'intersction ???
The Best :-p
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_the_best Messages postés 212 Date d'inscription jeudi 13 novembre 2003 Statut Membre Dernière intervention 6 avril 2006
3 nov. 2004 à 13:47
Merci !
The Best :-p
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 nov. 2004 à 20:11
det = ux*vy-uy*vx
if abs(det)>0.0001 then ' segments non parallèles

si abs(det) = 0 then 'les segments sont perpendiculaires
0
Vb Lover Messages postés 221 Date d'inscription vendredi 30 novembre 2001 Statut Membre Dernière intervention 13 février 2010 5
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

VB Lover

PS : j'ai fait y'a longtemps un source qui suit exactement ce principe, avec un peu plus de détails :
http://www.vbfrance.com/code.aspx?ID=2196
0
Rejoignez-nous