求直线与线段的交点
求交点
定比分点法,用叉积求面积,用面积比代替线段长度比
Point inter_point(Point A,Point B,Point C,Point D)///返回直线AB和线段CD的交点 { if(!intersect(A,B,C,D)) return {-INF*1.0,0};///判断直线AB是否与线段CD相交,不相交必须须特判 double area1=fabs((B-A)*(C-A)); double area2=fabs((B-A)*(D-A)); double x=(area1*D.x+area2*C.x)/(area1+area2); double y=(area1*D.y+area2*C.y)/(area1+area2); return {x,y}; }
判断相交,叉积判断左右拐(跨立实验)
bool intersect(Point A,Point B,Point C,Point D)///判断直线AB是否与线段CD相交 { if(((C-A)*(B-A))*((D-A)*(B-A))<eps) return true; return false; }
如果判断线段相交则须用快速排除实验和跨立实验
求线段交点必须先判断相交
时间: 2024-11-02 02:47:15