Question

J'ai besoin d'une fonction qui renvoie des points sur un cercle en trois dimensions.

Le cercle devrait « bouchon » un segment de ligne défini par les points A et B et il est rayon. chaque capuchon est perpendiculaire au segment de ligne. et centré sur l'un des points d'extrémité.

Voici un diagramme merdique

Était-ce utile?

La solution

Soit N le vecteur unitaire dans la direction de A vers B, à savoir N = (B-A) / longueur (A-B). La première étape consiste à trouver deux vecteurs X et Y tels que {N, X, Y} forment une base. Cela signifie que vous voulez deux vecteurs de sorte que toutes les paires de {N, X, Y} sont perpendiculaires les unes aux autres et aussi de sorte qu'ils sont tous les vecteurs unitaires. Une autre façon de penser à ce sujet est que vous voulez créer un nouveau système de coordonnées dont les lignes x axe vers le haut avec le segment de ligne. Vous devez trouver des vecteurs pointant dans la direction de l'axe y et z.

Notez qu'il existe une infinité de choix pour X et Y. Vous avez juste besoin de trouver en quelque sorte deux qui fonctionnent.

Une façon de le faire est d'abord de trouver des vecteurs {N, W, V} où N est au-dessus et W et V sont deux (1,0,0), (0,1,0), et ( 0,0,1). Choisissez les deux vecteurs pour W et V qui correspondent aux coordonnées les plus petites de N. Donc, si N = (.31, .95, 0), vous choisissez (1,0,0) et (0,0,1) pour W et V. (note geek Math: Cette façon de choisir W et V assure que {N, W, V} enjambe R ^ 3). Ensuite, vous appliquez le processus Gram-Schmidt {N, W, V } pour obtenir des vecteurs {N, X, Y} comme ci-dessus. Notez que vous devez le N vecteur pour être le premier vecteur afin qu'il ne soit pas modifié par le processus.

Alors maintenant, vous avez deux vecteurs qui sont perpendiculaires au segment de droite et perpendiculaire à l'autre. Cela signifie que les points sur le cercle autour de A sont X * cos t + Y * sin t + A où 0 <= t <2 * pi. Ceci est exactement comme la description habituelle d'un cercle en deux dimensions; il est juste écrit dans le nouveau système de coordonnées décrit ci-dessus.

Autres conseils

Comme David Norman a noté le point crucial est de trouver deux vecteurs unitaires orthogonaux X, Y orthogonales N. Cependant, je pense une façon plus simple de calculer ces derniers est en trouvant la réflexion chef de famille Q qui associe N à un multiple de (1 , 0,0), puis de prendre comme X l'image de (0,1,0) sous Q et Y comme l'image de (0,0,1) sous Q. Bien que cela puisse sembler compliqué, il se résume à:

s = (N [0]> 0,0)? 1,0: -1,0

t = N [0] + s; f = -1,0 / (s * t);

X [0] = f * N [1] * t; X [1] = 1 + f * N [1] * N [1]; X [2] = f * N [1] * N [2];

Y [0] = f * N [2] * t; Y [1] = f * N [1] * N [2]; Y [2] = 1 + f * N [2] * N [2];

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top