常见几何算法
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //判断三角形是否为锐角 int isAcuteTriangle(Point p1, Point p2, Point p3) { Eigen::Vector3d v1((p2 - p1).x, (p2 - p1).y, (p2 - p1).z); Eigen::Vector3d v2((p3 - p1).x, (p3 - p1).y, (p3 - p1).z); //another method, radian_angle belong to 0~pi if (atan2(v1.cross(v2).norm(), v1.transpose() * v2) > 0.5*M_PI) { return -1; } v1 = { (p1 - p2).x, (p1 - p2).y, (p1 - p2).z }; v2 = { (p3 - p2).x, (p3 - p2).y, (p3 - p2).z }; if (atan2(v1.cross(v2).norm(), v1.transpose() * v2) > 0.5*M_PI) { return -1; } v1 = { (p1 - p3).x, (p1 - p3).y, (p1 - p3).z }; v2 = { (p2 - p3).x, (p2 - p3).y, (p2 - p3).z }; if (atan2(v1.cross(v2).norm(), v1.transpose() * v2) > 0.5*M_PI) { return -1; } return 0; }
1、两直线平行判断 a1X+b1Y+c1=0 和 a2X+b2Y+c2=0;
(有斜率k的前提下)充要条件:a2b1=a1b2,即:a1b2-a2b1=0。
2、两直线垂直判断
k1k2 = -1,则:a1a2+b1b2=0(k存在的条件下)