Domanda

Ho bisogno di una funzione che restituisce i punti su un cerchio in tre dimensioni.

Il cerchio dovrebbe "cap" un segmento di linea definito dai punti A e B e di raggio. ciascun tappo è perpendicolare al segmento di linea. e centrato in uno dei punti finali.

Qui è una merda schema

È stato utile?

Soluzione

Sia n il versore nella direzione da A a B, cioè, N = (B-A) / lunghezza (A-B). Il primo passo è trovare altre due vettori X e Y tali che {N, X, Y} formano una base. Ciò significa che si desidera più due vettori in modo che tutte le coppie di {N, X, Y} sono perpendicolari l'uno all'altro e anche in modo che siano tutti vettori unitari. Un altro modo di pensare a questo è che si desidera creare un nuovo sistema di coordinate il cui asse X linee con il segmento di linea. Hai bisogno di trovare vettori che puntano nella direzione dell'asse y e z.

Si noti che ci sono infinitamente molte scelte per X e Y. Hai solo bisogno di qualche modo trovare due che di lavoro.

Un modo per farlo è quello primi vettori find {N, W, V} dove N è dall'alto e W e V sono due (1,0,0), (0,1,0), e ( 0,0,1). Scegliere i due vettori di W e V che corrispondono ai minimi coordinate di N. Quindi se N = (.31, .95, 0) allora si prelevamento (1,0,0) e (0,0,1) per W e V. (Math disadattato nota: Questo modo di raccogliere W e V assicura che {N, W, V} campate R ^ 3). Poi si applica il Gram-Schmidt processo per {N, W, V } per ottenere vettori {N, X, Y} come sopra. Si noti che è necessario il vettore N di essere il primo vettore in modo che non venga modificata dal processo.

Così ora avete due vettori che sono perpendicolari al segmento di linea e perpendicolari tra loro. Questi mezzi di punti sulla circonferenza intorno A sono X * cos t + Y * sin t + A dove 0 <= t <2 * pi. Questo è esattamente come il solito descrizione di un cerchio in due dimensioni; è solo scritto nel nuovo sistema di coordinate descritto sopra.

Altri suggerimenti

Come David Norman ha osservato il punto cruciale è quello di trovare due vettori unitari ortogonali X, Y che sono ortogonali al N. Tuttavia credo che un modo più semplice per calcolare questi è di trovare il padrone di casa riflessione Q che mappa N ad un multiplo di (1 , 0,0) e poi prendere come X l'immagine di (0,1,0) in Q e Y come l'immagine di (0,0,1) in Q. Anche se questo suono potrebbe complicato si tratta di:

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];

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top