我想计算3D空间中两个三角形之间的角度。两个三角形将始终共享两个点。 e.g。
三角1:
Point1 (x1, y1, z1),
Point2 (x2, y2, z2),
Point3 (x3, y3, z3).
三角2:
Point1 (x1, y1, z1),
Point2 (x2, y2, z2),
Point4 (x4, y4, z4).
有没有办法在CUDA中有效地计算它们之间的角度?
答案 0 :(得分:3)
对于每个平面,您需要构造它的法向量(垂直于该平面中的所有线)。这样做的简单方法是采用三角形中两条非平行线的交叉积。 (例如(P3-P1) X (P2-P1)和(P4-P1) X (P2-P1)。
将这些标准化。
这两个方向向量的点积给出了角度的余弦。
棘手的一点是要注意退化的三角形!如果定义任一三角形的所有3个点都是共线的(那个三角形只是一条直线)那么你要求的是未定义的,并且交叉乘积将除以零。在这种情况下,你需要决定你要做什么。
由于您尝试在GPU上执行此操作,因此如果您关注效率,理想情况下您希望在没有任何分支的情况下编写此函数。这意味着不应使用if
子句测试退化三角形,而应尝试使用三元A ? B : C
答案 1 :(得分:1)
三角形之间的角度与每个三角形的三个点定义的平面之间的角度相同。
由于点1或点2都位于两个平面中,因此从这些点之一到点3,然后到点4计算方向余弦。然后,这两条线之间的角度的余弦只是总和对应方向余弦的产品。