我想计算 3D 空间中两个三角形之间的角度。这两个三角形将始终共享两个点。例如
三角形 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 中有效地计算它们之间的角度?
我想计算 3D 空间中两个三角形之间的角度。这两个三角形将始终共享两个点。例如
三角形 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 中有效地计算它们之间的角度?
对于每个平面,您需要构造它的法线向量(垂直于该平面中的所有线)。简单的方法是取三角形中两条不平行线的叉积。(例如(P3-P1)X(P2-P1)和(P4-P1)X(P2-P1)。
规范化那些。
这两个方向向量的点积为您提供了角度的余弦值。
棘手的一点是要注意退化的三角形!如果定义任一三角形的所有 3 个点都是共线的(该三角形只是一条线),那么您要求的是未定义的,并且叉积将除以零。你需要决定在这种情况下你要做什么。
由于您尝试在 GPU 上执行此操作,因此如果您担心效率,最好不要使用任何分支来编写此函数。这意味着if
您应该尝试使用三元组来测试退化三角形,而不是使用子句进行测试A ? B : C
三角形之间的角度与由每个三角形的三个点定义的平面之间的角度相同。
由于点 1 或点 2 都位于两个平面中,因此计算出从其中一个点到点 3,然后到点 4 的方向余弦。那么,这两条线之间夹角的余弦值就是乘积之和对应的方向余弦。