首页 > 编程知识 正文

C#判断平面中两条直线的夹角

时间:2023-05-04 19:20:26 阅读:195654 作者:2994

假设直线一定存在

//----------------- //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);//输出锐角

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。