计算几何之判断线段是否相交

xiaoxiao2021-02-28  120

首先你得知道叉积

const int N=10010; struct node{ double x,y; }; struct line{ node p1,p2; }sa[N];int st=1,ed=0; double muilt(node p1,node p2,node p0) { double x1=p1.x-p0.x,y1=p1.y-p0.y; double x2=p2.x-p0.x,y2=p2.y-p0.y; return x1*y2-x2*y1; } int n; bool check(line l1,line l2) { if(muilt(l2.p1,l1.p2,l1.p1)*muilt(l1.p2,l2.p2,l1.p1)>0&&muilt(l1.p1,l2.p2,l2.p1)*muilt(l2.p2,l1.p2,l2.p1)>0) return true; if(muilt(l1.p1,l2.p1,l2.p2)==0&&min(l2.p1.x,l2.p2.x)<=l1.p1.x&&max(l2.p1.x,l2.p2.x)>=l1.p1.x) return true; if(muilt(l1.p1,l1.p2,l2.p1)==0&&min(l1.p1.x,l1.p2.x)<=l2.p1.x&&max(l1.p1.x,l1.p2.x)>=l2.p1.x) return true; if(muilt(l1.p1,l1.p2,l2.p2)==0&&min(l1.p1.x,l1.p2.x)<=l2.p2.x&&max(l1.p1.x,l1.p2.x)>=l2.p2.x) return true; if(muilt(l1.p2,l2.p1,l2.p2)==0&&min(l2.p1.x,l2.p2.x)<=l1.p2.x&&max(l2.p1.x,l2.p2.x)>=l1.p2.x) return true; return false; }

转载请注明原文地址: https://www.6miu.com/read-20672.html

最新回复(0)