根据三个点求平面方程,原理见代码:
PlaneParameter Computing_plane(Point3d p1, Point3d p2, Point3d p3)
{
PlaneParameter P;
P.A = ((p2.y - p1.y)*(p3.z - p1.z) - (p2.z - p1.z)*(p3.y - p1.y));
P.B = ((p2.z - p1.z)*(p3.x - p1.x) - (p2.x - p1.x)*(p3.z - p1.z));
P.C = ((p2.x - p1.x)*(p3.y - p1.y) - (p2.y - p1.y)*(p3.x - p1.x));
P.D = (0 - (P.A*p1.x + P.B * p1.y + P.C * p1.z));
return P;
}
//计算点到平面之间的距离
double Computing_point_to_plane(Point3d x, PlaneParameter P) {
return fabs(x.x*P.A+x.y*P.B+x.z*P.C+P.D) / sqrt(P.A*P.A+P.B*P.B+P.C*P.C);
}
平面方程原理:https://blog.youkuaiyun.com/hb707934728/article/details/72772443/
点到面距离:http://www.gaosan.com/gaokao/267227.html
计算空间三角形面积:
double triangle_volume(TCPoint3d p1, TCPoint3d p2, TCPoint3d p3) {
double a = sqrt((p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y - p2.y) + (p1.z-p2.z)*(p1.z - p2.z));
double b= sqrt((p1.x - p3.x)*(p1.x - p3.x) + (p1.y - p3.y)*(p1.y - p3.y) + (p1.z - p3.z)*(p1.z - p3.z));
double c= sqrt((p2.x - p3.x)*(p2.x - p3.x) + (p2.y - p3.y)*(p2.y - p3.y) + (p2.z - p3.z)*(p2.z - p3.z));
double p = (a + b + c) / 2;
double s = sqrt(p*(p - a)*(p - b)*(p - c));
return s;
}