2016-08-09 8 views
0

Den Schnittpunkt des Kreises und des unendlichen Zylinders finden. (alle in 3D) • Kreis ist definiert durch Zentrum, Ebene, in der es liegt und Radius. • Zylinder wird durch Achse und Radius definiert.Den Schnittpunkt des Kreises und des unendlichen Zylinders im 3D-Raum finden

Wie kann ich die Schnittmenge dieser beiden bekommen?

+0

vielleicht verwandt: https://en.wikipedia.org/wiki/Sphere%E2%80%93cylinder_intersection –

+0

aber, wie man es mit Ausschnittfläche benutzt (die Kugel in Kreis umwandelt) .. ?? – AmolN

+0

Verwenden Sie eine Gleichung für einen Kreis und eine ähnliche Analyse. Es ist wahrscheinlich am einfachsten, den Kreis in der xy-Ebene mit der Mitte am Ursprung zu fixieren und den Zylinder beliebig zu machen. –

Antwort

0

WLOG der Zylinder Gleichung hat X² + Y² = 1 (wenn nicht, können Sie es so machen, durch Translation, Rotation und Skalierung).

Dann wird die Parametergleichung des Kreises

P = C + U cos t + V sin t 

wo C den Mittelpunkt und U, V zwei orthogonale Vektoren in der Kreisebene, der Länge R.

Sie können mit der Substitution cos t = (1 - u²)/(1 + u²), sin t = 2u/(1 + u²) rationalisieren.

diese Gleichungen Kombination

(Cx (1 + u²) + Ux (1 - u²) + Vx 2u)² + (Cy (1 + u²) + Uy (1 - u²) + Vy 2u)² = (1 + u²)² 

die eine biquadratische ist. Es gibt keine besondere Vereinfachung der Koeffizienten.

Sie können numerisch oder durch die Formeln in geschlossener Form lösen. Es kann bis zu vier Lösungen geben.


Ich glaube, daß dies durch Aufblasen des Kreisumfangs und der geraden Linie, die durch Entleeren des Zylinders auf seiner Achse erhalten gebildet strikt äquivalent ist, die Schnittpunkte zwischen den Torus zu finden. Dies wird in der Ray-Tracing-Literatur gut angesprochen.

Sie können es auch als ein Kreis-/Ellipsenschnittproblem in 2D verwenden.

+0

@AmolN: Was verstehst du nicht? Warum musst du dieses Problem lösen? –

+0

@AmolN: das sind die einfachsten, die Sie finden können. –

+0

@AmolN: das Unbekannte ist u, die Koeffizienten werden in der Antwort erklärt. –

0

Ein Basispunkt des Zylinders ist A0, der Richtungsvektor der Einheitsachse ist AD, Radius AR. Kreismittelpunkt ist B0, Kreisebene Einheitsnormale ist BN, Radius BR.

Kreis schneidet den Zylinder, wenn der Abstand zwischen B0 und Zyl. Achse kleiner ist als Summe der Zylinderradius und Projektion des Kreisradius auf senkrecht zur Achse

Dist <= AR + BR * Abs(Cos(AD, BN)). 

Cos(AD, BN) = DotProduct(AD, BN) 
Distance(B0, cyl.axis) = Abs(VectorProduct(AD, B0-A0)) 
Verwandte Themen