bool find_crossPoint(Point p1, Point p2, Point p3, Point p4, Point &crossPoint){
//****************************************************************************************
// 求二条直线的交点的公式
// 有如下方程 (x-x1)/(y-y1) = (x2-x1)/(y2-y1) ==> a1*x+b1*y=c1
// (x-x3)/(y-y3) = (x4-x3)/(y4-y3) ==> a2*x+b2*y=c2
// 则交点为
// x= | c1 b1| / | a1 b1 | y= | a1 c1| / | a1 b1 |
// | c2 b2| / | a2 b2 | | a2 c2| / | a2 b2 |
//
// a1= y2-y1
// b1= x1-x2
// c1= x1*y2-x2*y1
// a2= y4-y3
// b2= x3-x4
// c2= x3*y4-x4*y3
float a1 = p2.y - p1.y;
float b1 = p1.x - p2.x;
float c1 = p1.x*p2.y - p2.x*p1.y;
float a2 = p4.y - p3.y;
float b2 = p3.x - p4.x;
float c2 = p3.x*p4.y - p4.x*p3.y;
float det= a1*b2 - a2*b1;
if(det == 0) return false;
crossPoint.x = (c1*b2 - c2*b1)/det;
crossPoint.y = (a1*c2 - a2*c1)/det;
// Now this is cross point of lines
// Do we need the cross Point of segments(need to judge x,y within 4 endpoints)
// 是否要判断线段相交
if((abs(crossPoint.x -(p1.x+p2.x)/2) <= abs(p2.x-p1.x)/2) &&
(abs(crossPoint.y -(p1.y+p2.y)/2) <= abs(p2.y-p1.y)/2) &&
(abs(crossPoint.x -(p3.x+p4.x)/2) <= abs(p4.x-p3.x)/2) &&
(abs(crossPoint.y -(p3.y+p4.y)/2) <= abs(p4.y-p3.y)/2))
{
return true;
}
return false;
}
————————————————
版权声明:本文为CSDN博主「hjk61314」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hjk61314/article/details/82254381