19,468
社区成员
发帖
与我相关
我的任务
分享
//两点式交点
//返回结果为-1时,无交点
POINT AFX_API_EXPORT Intersection(SDLine l1, SDLine l2)
{
POINT lastP; DOUBLE k1,k2,b1,b2;
//两条非垂直线
if(l1.x1-l1.x2!=0 && l2.x1-l2.x2!=0)
{
b1=(l1.y1*l1.x2-l1.y2*l1.x1)/(l1.x2-l1.x1);
b2=(l2.y1*l2.x2-l2.y2*l2.x1)/(l2.x2-l2.x1);
k1=(l1.y1-l1.y2)/(l1.x1-l1.x2);
k2=(l2.y1-l2.y2)/(l2.x1-l2.x2);
if(k1-k2 != 0) {
lastP.x=(b2-b1)/(k1-k2);
lastP.y=(k1*b2-k2*b1)/(k1-k2);
}
else {
lastP.x=-1;
lastP.y=-1;
}
}
//两条垂直线
if(l1.x1-l1.x2==0 && l2.x1-l2.x2==0)
{
lastP.x=-1;
lastP.y=-1;
}
//一条垂直线
if(l1.x1-l1.x2==0 && l2.x1-l2.x2!=0)
{
b2=(l2.y1*l2.x2-l2.y2*l2.x1)/(l2.x2-l2.x1);
k2=(l2.y1-l2.y2)/(l2.x1-l2.x2);
lastP.x=l1.x1;
lastP.y=k2*l1.x1+b2;
}
//一条垂直线
if(l1.x1-l1.x2!=0 && l2.x1-l2.x2==0)
{
b1=(l1.y1*l1.x2-l1.y2*l1.x1)/(l1.x2-l1.x1);
k1=(l1.y1-l1.y2)/(l1.x1-l1.x2);
lastP.x=l2.x1;
lastP.y=k1*l2.x1+b1;
}
return lastP;
}