2011-02-18 2 views
4

Je sais comment vérifier si un point est sur une ligne 2d ou non, mais j'aimerais le faire en 3D. Des idées?Vérifiez si un point est sur une ligne 3D?

 // slope from point 1 to point 3 
     var p13:Number = (Math.atan2 (end.x - start.x, end.y - start.y)) * toDegrees; 

     // slope from point 1 to point 2 -- matches? 
     var p12:Number = (Math.atan2 (point.x - start.x, point.y - start.y)) * toDegrees; 

     return Math.round(p12) == Math.round(p13); 
+0

Algorithmiquement parlant, cela devrait être sur [Math SE] (http://math.stackexchange.com/), bien que la question ait déjà reçu une réponse. – zzzzBov

+0

pense qu'il a été demandé ici http://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect –

Répondre

5

Normaliser les vecteurs. Vérifiez si les normales correspondent.

Trouvez la plus grande valeur, divisez toutes les autres valeurs par cette valeur afin d'obtenir un vecteur normal.

Tout point sur une ligne doit avoir le même vecteur normal.

+0

+1 - une solution fantastique! Merci mon pote –

2

Un point ne peut jamais être 'sur' une ligne dans les coordonnées réelles. ce que vous devez faire est de calculer la distance à la closest point to the line et de décider si cela est assez proche pour vous.

+1

-1 - solution très longue et complexe. complètement inutile. voir la réponse de Xaade. –

+1

voici une meilleure formule: http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html Cette solution est bonne parce que vous n'avez pas besoin de vous soucier de cas particuliers, et votre "tolérance" peut être une distance plutôt qu'un angle. –

+0

@Jenko - le problème avec la comparaison des normales est que la distance à la ligne est proportionnelle à la distance le long de la ligne. –

0

L'équation d'une ligne est

v (t) = v0 + t * dir

Lorsque v0 est un point sur une ligne et dir est sa direction. Il suffit de vérifier si votre point correspond à cette équation linéaire avec suffisamment de précision

Questions connexes