在给定顶点坐标的情况下,在3D中找到三角形面的法线角度

14 math 3d geometry trigonometry

正如你可以从这个截图中看到的那样,我正在尝试为我正在制作的平台游戏制作一个物理引擎,但我遇到了一个明确的问题:我需要能够找出任何一个的角度.你可以看到的三角形组成这个网格,这样我就可以计算出旋转,从而计算出该三角形上玩家的角加速度.

截图

我可以使用我创建的算法来查找玩家所接触的任何三角形的所有3个点的位置,但我不知道如何使用这些点来计算三角形的旋转.

通过旋转,我指的是远离脸部中心的法线方向,即,如果人站在那个表面上,人们将倾斜的角度.有人可以提出一系列方程式来解决这个问题吗?

Chr*_*isF 34

如果你采用两个向量的叉积:

p1 - p0
Run Code Online (Sandbox Code Playgroud)

p2 - p0
Run Code Online (Sandbox Code Playgroud)

在哪里p0,p1并且p2是三角形的三个顶点,你将得到正常的.如果顶点相对于其向外法线顺时针排序,则认为三角形指向您.这称为左手规则.想象一下,牵着你的左手,用手指从卷曲p0p1,你的拇指在面对正常的方向伸出:

脸指向远离相机 脸指向相机


小智 10

交叉产品是正确的答案.不要忘记将结果标准化,并且不要忘记如果三角形的面积为零,则结果无效,因为没有明确定义的法线.基本上,如果你的三个顶点是p0,p1和p2:

vector temp = cross(p1 - p0, p2 - p0);
if (length(temp) < epsilon) then
    Degenerate_triangle_error;
else
    return normalize(temp);
Run Code Online (Sandbox Code Playgroud)

另外,正如另一个答案所说,无论你是"面向上"还是"面向下"正常都将取决于你的顶点的顺序.

  • +1关于退化三角形的好点. (3认同)