C#计算两条直线的交点

近来需要在做一个项目的时候,需要计算两个直线的交点。
经过网上各种查资料。使用C#代码来实现。

其中x1 y1 为一条线的一个点
x2 y2 为直线上的另外一个点

x3 x4 为另外直线上的一个点
x4 y4 为另外直线上的第二个点。

这里需要注意的是:垂直X轴的情况 和两条执行平行的情况。下面注释写的都有。

  1. public static (decimal ix, decimal iy) GetInteractionPoint(decimal x1, decimal y1, decimal x2, decimal y2, decimal x3, decimal y3, decimal x4, decimal y4)
  2. {
  3. decimal x, y = 0.0m;
  4. if (x2 == x1 && x3 == x4)
  5. {
  6. //都垂直于 x 轴 则平行
  7. return (decimal.MinValue, decimal.MinValue);
  8. }
  9. if (x2 == x1 && x3 != x4)
  10. {
  11. var k = (y4 - y3) / (x4 - x3);
  12. //L1垂直于x轴 则x=x1=x2 a=infinity 想办法消除a
  13. x = x1;
  14. ////(y-y3)/(x-x3)=b 且x=x1 变换得y=bx1-bx3+y3
  15. y = k * x1 - k * x3 + y3;
  16. return (x, y);
  17. }
  18. if (x4 == x3 && x1 != x2)
  19. {
  20. //L2垂直于x轴 则x=x3=x4 b=infinity
  21. var k = (y2 - y1) / (x2 - x1);
  22. x = x3;
  23. y = k * x - k * x1 + y1;
  24. return (x, y);
  25. }
  26. var a = (y2 - y1) / (x2 - x1); //需考虑分母不能为0 即x2=x1 l1垂直于x轴
  27. var b = (y4 - y3) / (x4 - x3); //需考虑分母不能为0 即x4=x3 l2垂直于x轴
  28. if (a == b)
  29. {
  30. //斜率相同,说明平行 无交点
  31. //throw new Exception("两直线平行,无交点");
  32. return (decimal.MinValue, decimal.MinValue);
  33. }
  34. x = (a * x1 - y1 + y3 - b * x3) / (a - b);
  35. y = a * x - a * x1 + y1;
  36. return (x, y);
  37. }
2024-05-20 22:29:23  user 阅读(105) 评论(0) 标签:C#,计算两个直线的交点 分类:C#