如何检测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
答案 0 :(得分:20)
扩展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
所以你将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)
答案 1 :(得分:5)
圆锥只是无数个圆,其大小由线性方程定义,该方程取自该点的距离。只需检查它是否在适当大小的圆圈内。
答案 2 :(得分:5)
与语言无关的答案:
答案 3 :(得分:0)
更容易计算矢量与锥心之间的角度和从指向评估点的顶点的矢量。如果使用矢量投影并且合成矢量的长度较短,那么指向锥体中心的矢量在角度和长度之间就知道你是否在锥体内。