假设直线一定存在
//-----------------
//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);//输出锐角