C#算法(3)—判断平面中两条直线的夹角

16 篇文章 8 订阅 ¥99.90 ¥299.90
本文介绍了如何使用C#算法判断平面中两条直线的夹角。通过选取直线上的特定点,计算向量并利用点积求得夹角余弦值,从而求得夹角。
摘要由CSDN通过智能技术生成

假设直线一定存在

  //-----------------
  //a1x+b1y=c1
  //a2x+b2y=c2
  //------------------


 double a1, b1, c1;
 double a2, b2, c2;
    a1 = 1;
    b1 = -1;
    c1 = 0;
    a2 = 0;
    b2 = 1;
    c2 = 1;

 double k1 = -a1 / b1;
 double l1 = c1 / b1;
 double k2 = -a2 / b2;
 double l2 = c2 / b2;

 private double twoVectorAngle(double[] vector1, double[] vector2)
        {
            return Math.Acos((vector1[0] * vector2[0] + vector1[1] * vector2[1]) / (Math.Sqrt(vector1[0] * vector1[0] + vector1[1] * vector1[1]) * Math.Sqrt(vector2[0] * vector2[0] + vector2[1] * vector2[1])));
        }

随机选择直线上的两个点
当x=0时,取直线1、2上的两个点m1(0,-c1/b1)m2(0,-c2/b2);
当x=1时,取直线1、2上的两个点n1(1,-(c1-a1)/b1),n2(1,-(c2-a2)/b2);

向量vector1是从m1指向n1的向量;
向量vector2是从m2指向n2的向量;
根据两个向量的点积等于两个向量的长度之积乘以两个向量夹角的余弦值
vector1.vector2=|vector1|.|vector2|cosθ
故可得以下公式

  double[] vector1 = new double[] { 1, -(c1 - a1) / b1 + c1 / b1 };
  double[] vector2 = new double[] { 1, -(c2 - a2) / b1 + c2 / b1 };
  double angleofRad1 = twoVectorAngle(vector1, vector2);//得到的是弧度
  double angle1 = angleofRad1 * 180 / Math.PI;
  Console.WriteLine("两条直线所夹的锐角为{0}度", angle1 > 90 ? 180 - angle1 : angle1);//输出锐角
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

c#上位机

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

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

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

打赏作者

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

抵扣说明:

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

余额充值