我有一个使用 4 个顶点的不规则四面体。
鉴于一个特定顶点是顶部,其他顶点是底部,我需要找出高度。
基本上,高度是从顶部到底部形成 90 度角的最短距离。这应该是一个简单的数学问题,但我在 Google 上找不到任何内容。
我正在寻找一个如下所示的优化函数:
float GetPyramidAltitude (Vector3 top, Vector3 baseA, Vector3 baseB, Vector3 baseC) {
...
}
感谢您的帮助。
最佳答案
这相当于求点与平面之间的距离。该平面由构成底面的三个点定义。 determining a plane given three points上有详细解释和 finding the minimal distance between a point and a plane .
免责声明:我不了解 Unity3D,所以我编写了下面的语法。如果有不清楚的地方,请告诉我;否则,您将必须将其转换为可以使用 Unity3D API 进行编译的内容。
第一步是确定给定三个点的平面方程。平面法线由下式给出:
n = cross(baseB-baseA, baseC-baseA);
n = n / norm(n);
哪里cross
返回两个参数的叉积,并且 norm
返回 l2 范数(向量幅度)。平面方程中的偏移项由下式给出:
d = -n.x*baseA.x - n.y*baseA.y - n.z*baseA.z;
这将得出平面方程:
n.x*X + n.y*Y + n.z*Z + d = 0
求 top
之间的距离然后平面由下式给出
D = dot(n, top) + d;
哪里dot
是平面单位向量法线的点积n
和top
d 是之前定义的。当D > 0
top
是由法线点“向上”的三个基点定义的平面“上方”。当D < 0
top
位于平面下方。因此,在您的情况下,您可能需要取 D
的绝对值。获取距离。
关于math - 给定所有 4 个顶点位置,求不规则四面体的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34734086/