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

标签 math vector unity-game-engine physics game-physics

我有一个使用 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是平面单位向量法线的点积ntop d 是之前定义的。当D > 0 top是由法线点“向上”的三个基点定义的平面“上方”。当D < 0 top位于平面下方。因此,在您的情况下,您可能需要取 D 的绝对值。获取距离。

关于math - 给定所有 4 个顶点位置,求不规则四面体的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34734086/

相关文章:

java - Java 中的数值微分和积分

c++ - 将 Char 数组转换为 uint8_t vector

c++ - 不在 SFML 中绘制的 Sprite - 从 vector 中存储和检索

Matlab - 相当于 R 的带有 times 参数的rep()

c# - 给定一个点到另外两个点的距离,如何找到一个点?

java - Scala 和 Java BigDecimal

swift - 在 Swift 中为给定范围内的 RN 实现 PRNG xoshiro256+?

c# - Unity如何 "power bounce"一个物体从另一个物体相对于它的角度?

unity-game-engine - CircleCollider2D 未注册与 TileMapCollider2D 中某些图 block 的碰撞

c# - 两个数相除总是为零?