判断两线段是否相交的新算法,可能更简单些:
设线段一的端点为(m1,n1),(m2,n2), 所在直线放程为:ax+by+c=0
线段二的端点为(m3,n3),(m4,n4), 所在直线放程为:dx+ey+f=0
判断方法如下:
if (d*m1+e*n1+f)*(d*m2+e*n2+f)>0 then
两线段不相交
else
if(a*m3+b*n3+c)*(a*m4+b*n4+c)>0 then
两直线不相交
else
两直线相交
endif
endif
如线段端点(m1,n1),(m2,n2)则在ax+by+c=0中:
if m1=m2 and n1=n1 then
两端点重合,直线为一点,非法
else
if m1=m2 then
a=0; b=1; c=-m1
elseif n1=n2 then
a=1; b=0; c=-n1
else
a=n1-n2; =m2-m1; c=n2*m1-n1*m2
endif
endif
for ( i = 1; i <= n ;i++)
for ( j = i+1; j <= n; j++)
for ( k = j+1; k <= n ; k++)
if ( a[i][j] == 1 && a[i][k] == 1)
for ( p = 1; p <= n; p++)
if ( p != i && a[p][j] == 1 && a[p][k] == 1)
得到一个封闭矩形,由线段i,j,k,p组成