Math 3D:椭圆锥体内的检查点
我似乎搜索了整个互联网,试图找到一种检查3dMath 3D:椭圆锥体内的检查点,math,3d,pseudocode,Math,3d,Pseudocode,我似乎搜索了整个互联网,试图找到一种检查3d点是否在由(原点,长度,水平角,垂直角)定义的椭圆锥内的实现。不幸的是没有成功,因为我只是真正发现了我不理解的东西 现在我知道了如何使用法线圆锥体来实现它: inRange = magnitude(point - origin) <= length; heading = normalized(point - origin); return dot(forward, heading) >= cos(angle) && inRa
点是否在由(原点
,长度
,水平角
,垂直角
)定义的椭圆锥内的实现。不幸的是没有成功,因为我只是真正发现了我不理解的东西
现在我知道了如何使用法线圆锥体来实现它:
inRange = magnitude(point - origin) <= length;
heading = normalized(point - origin);
return dot(forward, heading) >= cos(angle) && inRange;
inRange=幅值(点原点)=cos(角度)和&inRange;
然而,那里的高度检测太高了。我真的很想为游戏的AI实现一个更真实的视觉圆锥体,但这需要使圆锥体的形状更像人类的视野,更宽而不是更高
非常感谢您的帮助:)给定一个三维椭圆锥,底面位于B=(x_B,y_B,z_B)
,高度h
沿锥轴k=(k_x,k_y,j_z)
,大底半径a
,小底半径B
以及沿长轴的方向i=(i_x,i_y,i_z)
您需要找到一个点=(x,y,z)
位于圆锥体内部。如何参数化长轴方向是您的选择,我认为您正在尝试使用两个角度
以下是要采取的步骤:
i
。局部z轴应沿k
朝向尖端。最后,局部y轴应为
j=cross(k,i)=(i_z*k_y-i_y*k_z,i_x*k_z-i_z*k_x,i_y*k_x-i_x*k_y)
j=标准化(j)
您的3×3
旋转矩阵由E=[i,j,k]
p=(x,y,z)
转换为具有
P2=转置(E)*(p-B)=(x2,y2,z2)
s=(h-z2)/h
确定锥体轴线的距离,其中s=0
位于尖端,s=1
位于底部s>1
或s0
您需要检查(x2/(s*a))^2+(y2/(s*b))^2您需要的是如何将圆锥体的定义转换为中所示的标准圆锥体坐标。然后您可以按照其解决方案进行操作。有关帮助信息,请参阅。您缺少圆锥体底面的主半径和次半径的参数。此外,不需要角度,因为您始终可以将点转换为坐标系,其中t圆锥体沿+z
轴。您的水平角和垂直角是如何定义的?非常感谢到目前为止的帮助,水平角和垂直角是以圆锥体一半的弧度定义的。例如角度=弧度(90°)
表示180°前向水平视野。我在您提到的数学交流网站上问了原始问题。您对问题和答案理解有困难吗?非常感谢,我将在接下来的几天内尝试解决此问题,并将您的答案标记为解决方案
// | i_x i_y i_z |
// transpose(E) = | j_x j_y j_z |
// | k_x k_y k_z |