Calcul du point d'intersection de deux segments

Soyez le premier à donner votre avis sur cette source.

Snippet vu 25 140 fois - Téléchargée 35 fois

Contenu du snippet

Je suis sur un programme d'on j'avais l'utilitr de cette fontion, j'ai chercher sur le net, et je n'en ai trouver aucune, alors, je me suis dit que j'allais la poster ...

cette fonction est très simple, mais je fournie cette source pour les Formules

Source / Exemple :


function intersection($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4) ///Calcul d'intersection de 2 droite
{
$Xi = (($X3 * $Y4 - $X4 * $Y3) * ($X1 - $X2) - ($X1 * $Y2 - $X2 * $Y1) * ($X3 - $X4)) / (($Y1 - $Y2) * ($X3 - $X4) - ($Y3 - $Y4) * ($X1 - $X2));
$Yi = $Xi * (($Y1 - $Y2)/($X1 - $X2)) + (($X1 * $Y2 - $X2 * $Y1)/($X1 - $X2));
return array('X' => $Xi,'Y' => $Yi);
}

Conclusion :


Le Segments sont définie par :
1 er Segment :
X1 Y1 à X2 Y2

2ème Segment :
X3 Y3 à X4 Y4

Retourne un resultat sous forme d'un tableau
Utilisation :
$Inter = intersection(0,0,100,100,10,10,-5,-5);
echo $Inter['X']; //Retourne la position en X
echo $Inter['Y']; //Retourne la position en Y

PS :
- Pas de gestion d'erreur au cas ou ils sont parallèle

A voir également

Ajouter un commentaire Commentaires
Messages postés
24
Date d'inscription
samedi 18 mai 2002
Statut
Membre
Dernière intervention
4 juin 2008

Merci pour la fonction.
Messages postés
6
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
30 septembre 2008

Cette méthode ne permet que de déterminer si 2 droites et non 2 segments ont un peu d'intersection commun ;)
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

Ton code genere une erreur si :
$X1-$X2== 0 ;

Donc en traduisant ton code en ActionScript tu peux résoudre le bug comme suit :

function intersection($X1,$Y1,$X2,$Y2,$X3,$Y3,$X4,$Y4)
{
$MX12= $X1 - $X2 ;
$MY12= $Y1 - $Y2 ;
$MX34= $X3 - $X4 ;
$MY34= $Y3 - $Y4 ;
$PX21= $X2 * $Y1 ;
$PX12= $X1 * $Y2 ;
$PX43= $X4 * $Y3 ;
$PX34= $X3 * $Y4 ;
//
if ($MX12 0 ) $MX12 0.00000001 ;
$X= (($PX34 - $PX43) * $MX12 - ($PX12 - $PX21) * $MX34) / ($MY12 * $MX34 - $MY34 * $MX12);
$Y= $X * ($MY12 / $MX12) + (($PX12 - $PX21) / $MX12);
return array('X' => $X,'Y' => $Y);
}

En espérant que je ne me sois pas trompé dans ma "convertion".
Cordialement et merci pour ta source bien pratique ma fois car pour tourver une solution à ce problème sur le "net" c'est pas facile !

[9/10]
T'aurais eu 11 si t'avais résolu el bug !!!

= )

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.