如下:
int GetIntersection(double lineAx1, double lineAy1, double lineAx2, double lineAy2, double lineBx1, double lineBy1, double lineBx2, double lineBy2, out double x, out double y)
{
x = 0; y = 0;
// 判断垂直
bool line1Vertical = (lineAx2 - lineAx1 == 0);
bool line2Vertical = (lineBx2 - lineBx1 == 0);
if (line1Vertical && line2Vertical)
{
if (lineAx1 == lineBx1)
return 2;
else
return 1;
}
else if (line1Vertical)
{
double m2 = (lineBy2 - lineBy1) / (lineBx2 - lineBx1);
double b2 = lineBy1 - m2 * lineBx1;
x = lineAx1;
y = m2 * x + b2;
return 0;
}
else if (line2Vertical)
{
double m1 = (lineAy2 - lineAy1) / (lineAx2 - lineAx1);
double b1 = lineAy1 - m1 * lineAx1;
x = lineBx1;
y = m1 * x + b1;
return 0;
}
else
{
double m1 = (lineAy2 - lineAy1) / (lineAx2 - lineAx1);
double m2 = (lineBy2 - lineBy1) / (lineBx2 - lineBx1);
if (m1 == m2)
{
return 1;
}
else
{
double b1 = lineAy1 - m1 * lineAx1;
double b2 = lineBy1 - m2 * lineBx1;
x = (b2 - b1) / (m1 - m2);
y = m1 * x + b1;
return 0;
}
}
}
返回值为0时有交点,返回值为1是两线平行,返回值为2时,两线重叠。