我想知道是否可以使用CGAL函数计算3D网格的三角形(用图表表示)的角度?
由于
答案 0 :(得分:2)
如果您有一个非退化三角形,其中包含三个点a
,b
和c
,则三角形角度a
处角度的余弦为两个向量的标量积除以它们的长度:
CGAL::Vector_3<K> v1 = b - a;
CGAL::Vector_3<K> v2 = c - a;
double cosine = v1 * v2 / CGAL::sqrt(v1*v1) / CGAL::sqrt(v2 * v2);
其中K
是您用于点的内核类型。角度本身的半径可以通过以下方式计算:
double angle = std::acos(cosine);
当然,对于退化三角形,长度可以为零,上面的表达式将计算0./0.
(即非数字)。你必须单独处理这个案子。