C#计算两条直线的交点
近来需要在做一个项目的时候,需要计算两个直线的交点。
经过网上各种查资料。使用C#代码来实现。
其中x1 y1 为一条线的一个点
x2 y2 为直线上的另外一个点
x3 x4 为另外直线上的一个点
x4 y4 为另外直线上的第二个点。
这里需要注意的是:垂直X轴的情况 和两条执行平行的情况。下面注释写的都有。
public static (decimal ix, decimal iy) GetInteractionPoint(decimal x1, decimal y1, decimal x2, decimal y2, decimal x3, decimal y3, decimal x4, decimal y4)
{
decimal x, y = 0.0m;
if (x2 == x1 && x3 == x4)
{
//都垂直于 x 轴 则平行
return (decimal.MinValue, decimal.MinValue);
}
if (x2 == x1 && x3 != x4)
{
var k = (y4 - y3) / (x4 - x3);
//L1垂直于x轴 则x=x1=x2 a=infinity 想办法消除a
x = x1;
////(y-y3)/(x-x3)=b 且x=x1 变换得y=bx1-bx3+y3
y = k * x1 - k * x3 + y3;
return (x, y);
}
if (x4 == x3 && x1 != x2)
{
//L2垂直于x轴 则x=x3=x4 b=infinity
var k = (y2 - y1) / (x2 - x1);
x = x3;
y = k * x - k * x1 + y1;
return (x, y);
}
var a = (y2 - y1) / (x2 - x1); //需考虑分母不能为0 即x2=x1 l1垂直于x轴
var b = (y4 - y3) / (x4 - x3); //需考虑分母不能为0 即x4=x3 l2垂直于x轴
if (a == b)
{
//斜率相同,说明平行 无交点
//throw new Exception("两直线平行,无交点");
return (decimal.MinValue, decimal.MinValue);
}
x = (a * x1 - y1 + y3 - b * x3) / (a - b);
y = a * x - a * x1 + y1;
return (x, y);
}
很赞哦! (0)