简介
三角化
参考链接
https://www.cnblogs.com/zhiyishou/p/4430017.html
三角化
求一个二维的三角形的面积也可以通过这个方法
首先要保证逆时针方向,三角形点的分布。
[S_{K}=frac{1}{2}left|egin{array}{cc}
x_{2}-x_{1} & x_{3}-x_{1} \
y_{2}-y_{1} & y_{3}-y_{1}
end{array}
ight|
]
举个例子
BMesh::Point2D a(0,0);
BMesh::Point2D b(1,0);
BMesh::Point2D c(0,1);
Eigen::Matrix2d cc;
cc << (b.x - a.x), (c.x - a.x),
(b.y - a.y), (c.y - a.y);
std::cout << "[DEBUG] area of a triangle " << 0.5 * cc.determinant() << std::endl;
理论解释
向量的叉乘就是平行四边形的面积然后你懂得。
求解外接圆的坐标
求解一个方程
[left(egin{array}{ll}
x_{3}-x_{1} & y_{3}-y_{1} \
x_{3}-x_{2} & y_{3}-y_{2}
end{array}
ight)left(egin{array}{l}
x_{C} \
y_{C}
end{array}
ight)=frac{1}{2}left(egin{array}{l}
left(x_{3}^{2}+y_{3}^{2}
ight)-left(x_{1}^{2}+y_{1}^{2}
ight) \
left(x_{3}^{2}+y_{3}^{2}
ight)-left(x_{2}^{2}+y_{2}^{2}
ight)
end{array}
ight)
]
直接求解圆心使用公式
[r_{K}=frac{L_{1} L_{2} L_{3}}{4 S_{K}}
]
(L_i) 是边界的长度。
(S_K) 是三角形的面积。
内切圆的半径是
[
ho_{K}=frac{S_{K}}{p_{K}}
]
(p_{K}) 是三角形的半周长
(
ho_{K}) 是三角形内切圆的半径
三角形网格的质量
[Q_{K}=alpha frac{h_{max }}{
ho_{K}}=alpha frac{h_{max } p_{K}}{S_{K}}
]
其中
(alpha = frac {sqrt{3}}{6})
,
(h_{max})是三角形的最长的边。
(P_{K})是其内切圆的半径。
其上值从1开始到无穷。等边三角形逻辑上是无穷。为了返回从0-1开始的测量质量。所以
[Q_K=etafrac{h^2_s}{S_K}
]
其中(eta)是一个标准化的因子表示一个单位质量对于一个等边三角形(eta = frac{sqrt{3}}{12})
其中,(h_s = sqrt{sum^3_{i=1}L_i^2})
(L_i)表示三角形边的长度。
缺点,在不好的三角形不明感,尤其是在三维空间中