判断点和直线的位置关系

    科技2024-06-10  73

    ```csharp /// <summary> /// 判断点和直线的位置关系 /// </summary> /// <param name="LinePntA">直线上的一点</param> /// <param name="LinePntB">直线上的另一点</param> /// <param name="PntM">需要判断的点</param> /// <returns></returns> private int JudgePointToLine(Point3d LinePntA, Point3d LinePntB, Point3d PntM) { int nResult = 0; double ax = LinePntB.X - LinePntA.X; double ay = LinePntB.Y - LinePntA.Y; double bx = PntM.X - LinePntA.X; double by = PntM.Y - LinePntA.Y; double judge = ax * by - ay * bx; if (judge > 0) { nResult = 1; } else if (judge < 0) { nResult = -1; } else { nResult = 0; } return nResult; } 1、点在线的左边还是右边 设线段端点为从 A(x1, y1)到 B(x2, y2), 线外一点 P(x0,y0), 判断该点位于有向线 A→B 的那一侧。 a = ( x2-x1, y2-y1) b = (x0-x1, y0-y1) a x b = | a | | b | sinφ (φ为两向量的夹角) | a | | b | ≠ 0 时, a x b 决定点 P的位置 所以 a x b 的 z 方向大小决定 P位置 (x2-x1)(y0-y1) – (y2-y1)(x0-x1) > 0 左侧 (x2-x1)(y0-y1) – (y2-y1)(x0-x1) < 0 右侧 (x2-x1)(y0-y1) – (y2-y1)(x0-x1) = 0 线段上
    Processed: 0.014, SQL: 8