【问题标题】:Calculate the angle between two triangles in CUDA计算CUDA中两个三角形之间的角度
【发布时间】:2011-01-09 16:43:43
【问题描述】:

我想计算 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 中有效地计算它们之间的角度?

【问题讨论】:

  • 恐怕你得为我定义“它们之间的度数” - 你是指它们各自平面之间的角度吗?
  • 是的,在各个平面之间
  • 对不起,我错过了每个三角形共享 两个 点,现在看起来很明显......
  • 不清楚这与 Cuda 有什么关系。您可以用 C 编写 Cuda 内核。

标签: c geometry cuda nvidia triangulation


【解决方案1】:

三角形之间的夹角与每个三角形的三个点所定义的平面之间的夹角相同。

由于点 1 或点 2 都位于两个平面上,求出从其中一个点到点 3,再到点 4 的方向余弦值。那么,这两条线之间夹角的余弦值就是总和对应方向余弦的乘积。

【讨论】:

  • 谢谢,我知道在 ansi-c 中实现它没有问题。但是,cuda 内核呢?
  • Cuda 支持 C,不是吗?如果是这样,只需使用他们的编译器,大概它会做得不错......
  • 我不认为这是正确的。一般来说,P3-P1-P4 和 P3-P2-P4 会给你两个不同的角度,两个平面之间的角度都不是。例如,设 P1 = (1, 1000000, 0) P2 = (1, -1000000, 0) P3 = (0, 0, 0) P4 = (0, 0, 1)
【解决方案2】:

对于每个平面,您需要构造它的法线向量(垂直于该平面中的所有线)。简单的方法是取三角形中两条不平行线的叉积。 (例如 (P3-P1) X (P2-P1) 和 (P4-P1) X (P2-P1)。

标准化这些。

这两个方向向量的点积给出了角度的余弦值。

棘手的一点是要注意退化的三角形!如果定义任一三角形的所有 3 个点都是共线的(该三角形只是一条线),那么您要求的是未定义的,并且叉积将除以零。你需要决定在这种情况下你要做什么。

由于您尝试在 GPU 上执行此操作,因此如果您担心效率,最好不要使用任何分支来编写此函数。这意味着您不应使用 if 子句测试退化三角形,而应尝试使用三元 A ? B : C

【讨论】:

    猜你喜欢
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多