1.判断点是否在直线上:
.
1.差积为零
2.点击小于零
bool OnSegment(Point P,Point A,Point B)
{
return dcmp(Cross(A-P,B-P))==0 && dcmp(Dot(A-P,B-P))<=0;
}
2.点到直线的距离:
double DistanceToLine(Point P,Point A,Point B)
{
Vector v1=B-A,v2=P-A;
return fabs(Cross(v1,v2))/Length(v1);
}
3.点到线段的距离:
分四种情况:
double DistanceToseg(Point P,Point A,Point B)
{
if(A==B) return Length(P-A);
Vector v1=B-A,v2=P-A,v3=P-B;
if(dcmp(Dot(v1,v2))<0) return Length(v2);
if(dcmp(Dot(v1,v3))>0) return Length(v3);
return fabs(Cross(v1,v2))/Length(v1);
}
4.求俩直线的交点:
Point GetLineIntersection(Line A,Line B)
{
vector u=A.p-B.p;
double t=Cross(B.v,u)/Cross(A.v,B.v);
return A.p+A.v*t;
}