如何检查一个点是否在有方向的椭圆体内?
How to check a point is inside an ellipsoid with orientation?
对于形式为
的椭圆体
方向向量,中心在点,如何判断点是否在椭球内?
另外请注意,几何实际上是 a=b(球体),因此一个轴足以定义方向
注意:我在论坛上看到了类似的问题。但是,它是关于原点的椭圆体,没有任何任意方向,这里同时考虑了任意位置和方向。
创建坐标系E
,圆心在p
,椭圆的长轴与r
对齐。创建一个可以将全局坐标转换为坐标系E
的矩阵。然后将变换后的坐标代入椭圆方程
找到在轴方向上平移此椭圆的仿射变换 M(通过 -p 平移并旋转以对齐方向矢量 r 和适当的坐标轴)。
然后将此变换应用于点 p 并检查 p' 是否位于轴导向椭球内,即
x^2/a^2+ y^2/b^2+z^2/c^2 <= 1
中心点p和"orientation vector"r不足以完全指定椭圆体的位置,那里是剩下一个自由度。你的问题不确定。
如果你的向量 r 是从原点到极点的单位向量,那么检验点 q 是否在椭圆内(或上)是:
v = q-p; // 3d vector difference
dot = v.r; // 3d dot product
f = dot*dot;
g = v.v - f; // 3d dot product and scalar subtraction
return f/(b*b) + g/(a*a) <= 1
请注意,如果椭圆已对齐,因此 r 是 z 单位向量,则上面的测试将转化为通常的测试,用于在椭圆中包含一个点。
对于形式为
的椭圆体方向向量
另外请注意,几何实际上是 a=b(球体),因此一个轴足以定义方向
注意:我在论坛上看到了类似的问题。但是,它是关于原点的椭圆体,没有任何任意方向,这里同时考虑了任意位置和方向。
创建坐标系E
,圆心在p
,椭圆的长轴与r
对齐。创建一个可以将全局坐标转换为坐标系E
的矩阵。然后将变换后的坐标代入椭圆方程
找到在轴方向上平移此椭圆的仿射变换 M(通过 -p 平移并旋转以对齐方向矢量 r 和适当的坐标轴)。
然后将此变换应用于点 p 并检查 p' 是否位于轴导向椭球内,即
x^2/a^2+ y^2/b^2+z^2/c^2 <= 1
中心点p和"orientation vector"r不足以完全指定椭圆体的位置,那里是剩下一个自由度。你的问题不确定。
如果你的向量 r 是从原点到极点的单位向量,那么检验点 q 是否在椭圆内(或上)是:
v = q-p; // 3d vector difference
dot = v.r; // 3d dot product
f = dot*dot;
g = v.v - f; // 3d dot product and scalar subtraction
return f/(b*b) + g/(a*a) <= 1
请注意,如果椭圆已对齐,因此 r 是 z 单位向量,则上面的测试将转化为通常的测试,用于在椭圆中包含一个点。