Line.h

#ifndef LINE_H_INCLUDED
#define LINE_H_INCLUDED
//#define Point Vector

struct Line {
    Point P;
    Vector V; //直線的點向式表示

    double a, b, c; //直線的一般式方程

    Line(Point P, Vector V) : P(P), V(V) {
        a = V.y / V.length();
        b = V.x / V.length();
        c = -(V.y * P.x + V.x * P.y) / V.length();
    }

    Point intersectionOfTwoLines(Line L2) { //求兩直線的交點
        Vector Vec = P - L2.P;
        double t = L2.V.valueOfDet(Vec) / V.valueOfDet(L2.V);
        return P + V * t;
    }

    bool isOnLine(Point Q) { //判斷點是否在直線上
        if(a * Q.x + b * Q.y + c == 0) return true;
        else return false;
    }

    double distanceToLine(Point Q) { //求點到直線的距離
        return fabs(V.y * Q.x - V.x * Q.y - (V.y * P.x + V.x * P.y)) / V.length();
        //return tmp / V.length();
    }

    Point projectionOfPointToLine(Point Q) { //求某一點在該直線上的投影
        return P + V * (V.dot(Q-A) / V.dot(V));
    }

    bool isParallelledOrCoincided(Line B) { //判斷兩條直線是否平行或重合
        if(fabs(V.x * B.V.y - V.y * B.V.x) < eps) return true;
        else return false;
    }
};

#endif // LINE_H_INCLUDED



發佈了151 篇原創文章 · 獲贊 19 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章