常见几何算法

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//判断三角形是否为锐角
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存在的条件下)

原文地址:https://www.cnblogs.com/lovebay/p/11970356.html