我想要计算三维空间中两个三角形之间的角度。这两个三角形始终恰好共享两个点。例如:
三角形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中有没有一种方法可以有效地计算它们之间的夹角?
发布于 2010-01-28 01:57:20
对于每个平面,您需要构造它的法向量(垂直于该平面中的所有直线)。要做到这一点,简单的方法是取三角形中两条非平行线的叉积。(ex (P3-P1) X (P2-P1)和(P4-P1) X (P2-P1) )。
对这些进行规范化。
这两个方向向量的点积给出了角度的余弦。
棘手的一点是要注意退化的三角形!如果定义任何一个三角形的三个点都是共线的(那个三角形只是一条线),那么你所要求的就是未定义的,并且叉积将被零除。你需要决定在这种情况下你要做什么。
由于您正尝试在GPU上执行此操作,如果您关心效率,那么理想情况下,您将希望编写此函数时不使用任何分支。这意味着,您应该尝试使用三元A ? B : C来测试退化的三角形,而不是使用if子句
发布于 2010-01-27 05:17:22
三角形之间的角度与由每个三角形的三个点定义的平面之间的角度相同。
因为点1或点2都在两个平面上,所以计算出其中一个点到点3,然后点4的方向余弦。然后,这两条线之间的夹角的余弦就是相应方向余弦的乘积之和。
https://stackoverflow.com/questions/2142552
复制相似问题