function st= check(a1,b1,alpha1,r1,a2,b2,alpha2,r2)%干涉检测
ax1=a1-sin(alpha1)*r1;%计算六个端点
ay1=b1+cos(alpha1)*r1;
bx1=a1-sin(alpha1+2*pi/3)*r1;
by1=b1+cos(alpha1+2*pi/3)*r1;
cx1=a1-sin(alpha1+4*pi/3)*r1;
cy1=b1+cos(alpha1+4*pi/3)*r1;
ax2=a2-sin(alpha2)*r2;
ay2=b2+cos(alpha2)*r2;
bx2=a2-sin(alpha2+2*pi/3)*r2;
by2=b2+cos(alpha2+2*pi/3)*r2;
cx2=a2-sin(alpha2+4*pi/3)*r2;
cy2=b2+cos(alpha2+4*pi/3)*r2;
%六个向量的斜率
k=[cos(pi/3-alpha1)/sin(pi/3-alpha1),cos(pi-alpha1)/sin(pi-alpha1),cos(5*pi/3-alpha1)/sin(5*pi/3-alpha1),cos(pi/3-alpha2)/sin(pi/3-alpha2),cos(pi-alpha2)/sin(pi-alpha2),cos(5*pi/3-alpha2)/sin(5*pi/3-alpha2),];
st=1;%相交计数器 1代表干涉
for i = 1:6
x1=k(i)*ay1+ax1;%计算第一个三角三个投影点
y1=k(i)*x1;
x2=k(i)*by1+bx1;
y2=k(i)*x2;
x3=k(i)*cy1+cx1;
y3=k(i)*x3;
x4=k(i)*ay2+ax2;%计算第二个三角三个投影点
y4=k(i)*x4;
x5=k(i)*by2+bx2;
y5=k(i)*x5;
x6=k(i)*cy2+cx2;
y6=k(i)*x6;
if x1==x2 && x2==x3 %表明法线是垂直,此时边界按照y判断
yl1=min([y1,y2,y3]);%获得第一个三角形的y界限
yr1=max([y1,y2,y3]);
yl2=min([y4,y5,y6]);%获得第二个三角形的y界限
yr2=max([y4,y5,y6]);
if( yl2>yr1 || yl1>yr2) %干涉判断
st=0;
break;
else
end
else
xl1=min([x1,x2,x3]);%获得第一个三角形的x界限
xr1=max([x1,x2,x3]);
xl2=min([x4,x5,x6]);%获得第二个三角形的x界限
xr2=max([x4,x5,x6]);
if (xl2>xr1 || xl1>xr2) %干涉判断
st=0;
break;
else
end
end
end
end