C#直线和直线的交点和距离

C#实现直线和直线的交点和距离

由于直线程序计算中可能会出现误差,这里的 a==b均用 a-b<0.001 代替

  public static double InterL2L(double a1, double b1, double c1, double a2, double b2, double c2, out double x, out double y)
        {
            double distance = 0;
            if (Math.Abs(a1 - a2) < 0.001 && Math.Abs(b1 - b2) < 0.001) //平行线
            {
                x = 0;
                y = 0;   
                distance = Math.Abs(c1 - c2) / Math.Sqrt(a1 * a1 + b1 * b1);
            }
            else if (b1 == 0 && b2 == 0) //两条垂线
            {
                x = 0;
                y = 0;

                distance = Math.Abs((-c1 / a1) + (c2 / a2));
            }
            else if (a1 == 0 && a2 == 0) //两条水平线
            {
                x = 0;
                y = 0;
                distance = Math.Abs((-b1 / a1) + (b2 / a2));
            }
            else if (a1 == 0 && b1 == 0) //线1不存在
            {
                x = 0;
                y = 0;
            }
            else if (a2 == 0 && b2 == 0)//线2不存在
            {
                x = 0;
                y = 0;
            }
            else if (a1 == 0 && b2 == 0)//线1水平,线2垂直
            {
                x = -c2 / a2;
                y = -c1 / b1;
            }
            else if (a2 == 0 && b1 == 0)//线2水平,线1垂直
            {
                x = -c1 / a1;
                y = -c2 / b2;
            }
            else if (a1 == 0)//线1水平
            {
                y = -c1 / b1;
                x = -(b2 * y + c2) / a2;
            }
            else if (a2 == 0)//线2水平
            {
                y = -c2 / b2;
                x = -(b1 * y + c1) / a1;
            }
            else if (b1 == 0) //线1垂直
            {
                x = -c1 / a1;
                y = -(a2 * x + c2) / b2;
            }
            else if (b2 == 0)//线2垂直
            {
                x = -c2 / a2;
                y = -(a1 * x + c1) / b1;
            }
            else
            {
				//double d1;
            	//double e1;
            	//double d2;
            	//double e2;
            	double b;
            	double c;
            	
                //d1 = b1 / a1;
                //e1 = c1 / a1;

                //d2 = b2 / a2;
                //e2 = c2 / a2;

                b = (b2 / a2) - (b1 / a1);
                c = (c2 / a2) - (c1 / a1);
                y = -c / b;
                x = -(b1 * y + c1) / a1;
            }
            return distance;
        }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来超低端科技研究所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值