/// <summary> float a = 0, b = 0; if (p1.X != p2.X) { a = (p2.Y - p1.Y) / (p2.X - p1.X); state |= 1; } if (p3.X != p4.X) { b = (p4.Y - p3.Y) / (p4.X - p3.X); state |= 2; } switch (state) { case 0: //L1与L2都平行Y轴 { if (p1.X == p3.X) { throw new Exception("两条直线互相重合,且平行于Y轴,无法计算交点。"); } else { throw new Exception("两条直线互相平行,且平行于Y轴,无法计算交点。"); } } case 1: //L1存在斜率, L2平行Y轴 { float x = p3.X; float y = a * x - a * p1.X + p1.Y; return new PointF(x, y); } case 2: //L1 平行Y轴,L2存在斜率 { float x = p1.X; float y = b * x + b * p3.X + p3.Y; return new PointF(x, y); } case 3: //L1,L2都存在斜率 { if (a == b) { throw new Exception("两条直线平行或重合,无法计算交点。"); } float x = (a * p1.X - b * p3.X - p1.Y + p3.Y) / (a - b); float y = a * x - a * p1.X + p1.Y; return new PointF(x, y); } } throw new Exception("不可能发生的情况"); } 编辑本段直线的一般式方程适用于所有直线 Ax+By+C=0 其中A,B不[同时为0] 该直线的斜率为-A/B(B=0时没有斜率) 直线的一般式方程能够表示坐标平面内的任何直线。 当方程Ax+By+C=0,(1)平行于x轴时,A=0 B≠0 C≠0 y=-C/B ⑵平行于y轴时,A≠0 B=0 C≠0 x=-c/A ⑶与x轴重合时,A=0 B≠0 C=0 y=0 ⑷与y轴重合时,A≠0 B=0 C=0 x=0 ⑸过原点时,C=A^2+B^2=0编辑本段关于直线的一般式方程的结论两直线平行时:A1/A2=B1/B2≠C1/C2 两直线垂直时:A1A2+B1B2=0 两直线重合时:A1/A2=B1/B2=C1/C2 两直线相交时:A1/A2≠B1/B2 |
联系客服