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

扩展伊格纳西奥的回答:

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

所以你p投影dir到找到点沿轴的距离:

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 回答