给定所有 4 个顶点位置,找出不规则四面体的高度

Find the altitude of an irregular tetrahedron given all 4 vertex positions

我有一个使用 4 个顶点的不规则四面体。

鉴于一个特定的顶点是顶部而其他顶点是底部,我需要找出高度。

基本上,高度是从顶部到底部形成 90 度角的最短距离。这应该是一个简单的数学问题,但我在 Google.

上找不到任何内容

我正在寻找如下所示的优化函数:

float GetPyramidAltitude (Vector3 top, Vector3 baseA, Vector3 baseB, Vector3 baseC) {
     ...
}

感谢您的帮助。

这相当于求一个点到一个平面的距离。该平面由构成底面的三个点定义。 determining a plane given three points and finding the minimal distance between a point and a plane.

上有详细解释

免责声明:我不了解 Unity3D,所以我正在编写下面的语法。如果有什么不清楚的,请告诉我;否则你将不得不转换成可以使用 Unity3D API.

编译的东西

第一步是确定给定三个点的平面方程。平面法线由下式给出:

n = cross(baseB-baseA, baseC-baseA);
n = n / norm(n);

其中 cross returns 两个参数的叉积,norm returns 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是平面ntop的单位向量法线的点积,d在前面定义。当D > 0top是"above"法线指向"up"的三个基点定义的平面。当 D < 0top 在平面下方。因此,在您的情况下,您可能希望采用 D 的绝对值来获得距离。

谢谢,不过我从 Unity 中的一个方法中找到了解决方案。

基本上我们只需要 3 个参数:顶部顶点、底部的一个顶点和我已经拥有的底部的面法线。

这是我的解决方案:

float GetPyramidAltitude (Vector3 top, Vector3 baseA, Vector3 baseNormal) {
    Vector3 topToBase = Vector3.Project(baseA - top, baseNormal);
    return topToBase.magnitude;
}