9

3Dポイントが円錐の内側にあるかどうかをどのように検出できますか?

Ross cone = (x1, y1, h1)
Cone angle = alpha
Height of the cone = H
Cone radius = R
Coordinates of the point of the cone = P1 (x2, y2, h2)
Coordinates outside the cone = P2( x3, y3, h3)

Result for point1 = true
Result for point2 = false
4

4 に答える 4

32

Ignacioの答えを拡張するには:

させて

x = the tip of the cone
dir = the normalized axis vector, pointing from the tip to the base
h = height
r = base radius

p = point to test

したがって、に投影pdirて、軸に沿ったポイントの距離を見つけます。

cone_dist = dot(p - x, dir)

この時点で、の外側の値を拒否できます0 <= cone_dist <= h

次に、軸に沿ったそのポイントでの円錐の半径を計算します。

cone_radius = (cone_dist / h) * r

最後に、軸からのポイントの直交距離を計算して、円錐の半径と比較します。

orth_distance = length((p - x) - cone_dist * dir)

is_point_inside_cone = (orth_distance < cone_radius)
于 2012-10-10T18:52:24.270 に答える
8

言語に依存しない答え:

  • 円錐の主軸を定義する直線の方程式を見つけます。
  • 距離が線に垂直である線に沿った交点とともに、3D点から線までの距離を計算します。
  • 交点で円錐の半径を見つけ、線と3Dポイントの間の距離がその半径よりも大きい(外側)か小さい(内側)かを確認します。
于 2012-10-10T18:54:13.613 に答える
6

円錐は、単純に無限の数の円であり、そのサイズは、点からの距離をとる線形方程式によって定義されます。適切なサイズの円の内側にあるかどうかを確認するだけです。

于 2012-10-10T18:43:54.977 に答える
1

ベクトルから円錐の中心までの角度と、評価中の点を指す頂点からのベクトルの間の角度を計算する方が簡単ではないでしょうか。ベクトル射影が使用され、結果のベクトルの長さが短い場合、円錐の中心を指すベクトルは、円錐の内側にいるかどうかがわかる角度と長さの間にあります。

https://en.wikipedia.org/wiki/Vector_projection

于 2018-05-22T21:09:49.220 に答える