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

小智 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)
另外,正如另一个答案所说,无论你是"面向上"还是"面向下"正常都将取决于你的顶点的顺序.