#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
Line.h
最新推荐文章于 2024-09-26 11:01:02 发布