计算六面体中二面角的有效算法?

时间:2015-12-24 21:49:13

标签: loops data-structures

要计算两个平面之间的二面角,需要四个点:两个位于交叉边缘,两个位于每个相应的平面上。可以找到完整的数学公式here

现在我的问题涉及数据结构以及如何有效地计算六面体中的所有二面角。假设我有一个数据结构如下

vertices[8] // Contains all the vertices of the hexahedral
edges[12] = {{vertices[i], vertices[k]}, {vertices[i], vertices[j]}...} // Each cell contain an edge formed by the two vertices.
face[6] = { {vertices[i], vertices[j], vertices[k], vertices[l]}, {..} ...} // Each face contains the four vertices that form a face of the hexahedral.

假设这个六面体的所有面都是平面的(即面的所有四个顶点都是共面的),计算以这种方式定义的六面体的所有二面角的好策略是什么?

目前,我的伪代码看起来像

for all edges
  loop through the face list to find all faces that contain the edges
     for the face that both contain the vertices of the sharing edge, find the other points 
      then used the formulation proposed above.

看起来非常笨拙和缓慢。有更好的建议吗?

1 个答案:

答案 0 :(得分:0)

  1. 对于每张脸,找到法线向量。取两个对角矢量的叉积并归一化为单位长度;然后
  2. 对于具有法向量A和B的每对相邻面,它们之间的二面角是acos(A \ dot B)