计算几何(二维)-基本组件(1)

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;
 }
 
发布了22 篇原创文章 · 获赞 7 · 访问量 422

猜你喜欢

转载自blog.csdn.net/qq_40905284/article/details/104406231