3d
開始点と終了点 ( A
{Ax, Ay, Az}
、B
{Bx, By, Bz}
) で定義された線分セグメントと、中心位置C
{Cx, Cy, Cz}
、半径R
、高さで定義された円柱があるとしH
ます。交差点の事実を取得する方法と、交差点がどこよりも発生した場合は?
2 に答える
これを試してください。Google for the win - 答えは SO でもここにあります。これには、ソース コードと、使用できる詳細情報へのリンクもあります。少し検索するだけで、これを自分で入手できたはずです。
これは@DuckQueenの答えに基づいています.交点があればそれを円柱の高さに収まるかどうかを確認するために交点の投影を追加するだけです.
x = (y-a2)/b2 = (z-a3)/b3 を直線の式とします。
(x-c1)^2 + (y-c2)^2 = d^2 を円柱の方程式とします。
x を直線方程式から円柱方程式に代入します。
二次方程式を使用して y を解くことができます。ソリューションは 0 (円柱とラインが交差しない)、1 つのソリューション、または 2 つのソリューションを持つことができます。
y の値を直線方程式に代入して、x 座標と z 座標を取得します。
2 点から直線方程式を取得するには、http: //www.nabla.hr/Z_CGLinesAndPlanesIn3DSpace-A.htmを参照してください。
私が提供した解決策は、無限の高さのシリンダーで機能します。高さ H の円柱に制限するには: 交点を見つけ、点が高さ内にある場合 (つまり、z が制限内にある場合)、点を出力します。