Frage

ich brauche eine Funktion, dass die Renditen Punkte auf einem Kreis in drei Dimensionen.

Der Kreis sollte „cap“ ein Liniensegment definiert durch die Punkte A und B und der Radius. jede Kappe senkrecht zum Liniensegment. und an einem der Endpunkte zentriert ist.

Hier ist eine beschissene Diagramm

War es hilfreich?

Lösung

Sei n der Einheitsvektor in die Richtung von A nach B, das heißt, N = (B-A) / Länge (A-B). Der erste Schritt besteht darin, zwei Vektoren X und Y eine solche zu finden, daß {n, X, Y} eine Basis bilden. Das bedeutet, dass zwei so mehr Vektoren wollen, dass alle Paare von {N, X, Y} sind senkrecht zueinander und auch so, dass sie alle Einheitsvektoren sind. Ein anderer Weg, um darüber nachzudenken, ist, dass Sie ein neues Koordinatensystem, deren x-Achse einer Linie mit dem Liniensegment erstellt werden sollen. Sie müssen Vektoren finden in der Richtung der y-Achse und z-Achse zeigt.

Beachten Sie, dass es unendlich viele Möglichkeiten für X und Y. Sie müssen nur irgendwie zwei finden, dass die Arbeit.

Eine Möglichkeit, dies zu tun ist, um ersten Fund Vektoren {N, W, V}, wobei N von oben ist und W und V sind zwei von (1,0,0), (0,1,0) und ( 0,0,1). Wählen Sie die zwei Vektoren für W und V entsprechen, dass die kleinsten Koordinaten N. Wenn also N = (.31, .95, 0), dann Sie wählen (1,0,0) und (0,0,1) für W und V. (Math Geek Anmerkung: Diese Art der Kommissionierung W und V, sicherstellt, daß {n, W, V} Spannweiten R ^ 3). Dann bewerben Sie den Gram-Schmidt-Verfahren {N, W, V } erhalten Vektoren {N, X, Y} wie oben. Beachten Sie, dass Sie der Vektor N müssen der erste Vektor sein, so dass sie nicht durch den Prozess geändert hat bekommen.

So, jetzt haben Sie zwei Vektoren, die auf dem Liniensegment senkrecht sind und senkrecht zueinander. Das heißt, die Punkte auf dem Kreis um A sind X * cos t + Y * sin t + A, wobei 0 <= t <2 * pi. Das ist genau wie die übliche Beschreibung eines Kreises in zwei Dimensionen; es ist nur in dem neuen Koordinatensystem geschrieben oben beschrieben.

Andere Tipps

Wie David Norman stellte der Kernpunkt ist zwei orthogonale Einheitsvektoren X, Y zu finden, die N. orthogonal sind jedoch ich eine einfachere Art und Weise denken, diese zu berechnen, ist durch die erziehende Reflexion Q zu finden, die N-Pläne zu einem Vielfachen von (1 , 0,0) und dann als X das Bild von (0,1,0) unter Q und Y als das Bild von (0,0,1) unter Q. nehmen Während dies auch klingen mag komplizierte es kommt darauf an:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top