[计算几何]求两个直线交点坐标

上一篇文章已经讲了若一直线过 A ( X 1 , Y 1 ) A(X_1,Y_1) A(X1,Y1), B ( X 2 , Y 2 ) B(X_2,Y_2) B(X2,Y2) 两点的解析式求法

a x + b y + c = 0 ax+by+c=0 ax+by+c=0形式的解析式 a = ( Y 1 − Y 2 ) , b = ( X 2 − X 1 ) , c = ( X 1 ∗ Y 2 − Y 1 ∗ X 2 ) a=(Y_1-Y_2),b=(X_2-X_1) ,c=(X_1*Y_2-Y_1*X_2) a=(Y1Y2),b=(X2X1),c=(X1Y2Y1X2)

我们能求得 两个直线解析式分别为 a 1 x + b 1 y + c 1 = 0 a_1x+b_1y+c_1=0 a1x+b1y+c1=0 a 2 x + b 2 y + c 2 = 0 a_2x+b_2y+c_2=0 a2x+b2y+c2=0

  • 求x坐标

y = − a 1 x − c 1 b 1 y=\frac{-a_1x-c_1}{b_1} y=b1a1xc1, y = − a 2 x − c 2 b 2 y=\frac{-a_2x-c_2}{b_2} y=b2a2xc2

− a 1 x − c 1 b 1 = − a 2 x − c 2 b 2 \frac{-a_1x-c_1}{b_1}=\frac{-a_2x-c_2}{b_2} b1a1xc1=b2a2xc2

( − a 1 x − c 1 ) b 2 = ( − a 2 x − c 2 ) b 1 (-a_1x-c_1)b_2=(-a_2x-c_2)b_1 (a1xc1)b2=(a2xc2)b1

− a 1 b 2 x − c 1 b 2 = − a 2 b 1 x − c 2 b 1 -a_1b_2x-c_1b_2=-a_2b_1x-c_2b_1 a1b2xc1b2=a2b1xc2b1

a 2 b 1 x − a 1 b 2 x = c 1 b 2 − c 2 b 1 a_2b_1x-a_1b_2x=c_1b_2-c_2b_1 a2b1xa1b2x=c1b2c2b1

( a 2 b 1 − a 1 b 2 ) x = c 1 b 2 − c 2 b 1 (a_2b_1-a_1b_2)x=c_1b_2-c_2b_1 (a2b1a1b2)x=c1b2c2b1

x = c 1 b 2 − c 2 b 1 a 2 b 1 − a 1 b 2 x=\frac{c_1b_2-c_2b_1}{a_2b_1-a_1b_2} x=a2b1a1b2c1b2c2b1

  • 求y坐标

x = − b 1 y − c 1 a 1 x=\frac{-b_1y-c_1}{a_1} x=a1b1yc1, x = − b 2 y − c 2 a 2 x=\frac{-b_2y-c_2}{a_2} x=a2b2yc2

− b 1 y − c 1 a 1 = − b 2 y − c 2 a 2 \frac{-b_1y-c_1}{a_1}=\frac{-b_2y-c_2}{a_2} a1b1yc1=a2b2yc2

( − b 1 y − c 1 ) a 2 = ( − b 2 y − c 2 ) a 1 (-b_1y-c_1)a_2=(-b_2y-c_2)a_1 (b1yc1)a2=(b2yc2)a1

− b 1 a 2 y − c 1 a 2 = − b 2 a 1 y − c 2 a 1 -b_1a_2y-c_1a_2=-b_2a_1y-c_2a_1 b1a2yc1a2=b2a1yc2a1

b 2 a 1 y − b 1 a 2 y = c 1 a 2 − c 2 a 1 b_2a_1y-b_1a_2y=c_1a_2-c_2a_1 b2a1yb1a2y=c1a2c2a1

( b 2 a 1 − b 1 a 2 ) y = c 1 a 2 − c 2 a 1 (b_2a_1-b_1a_2)y=c_1a_2-c_2a_1 (b2a1b1a2)y=c1a2c2a1

y = c 1 a 2 − c 2 a 1 b 2 a 1 − b 1 a 2 y=\frac{c_1a_2-c_2a_1}{b_2a_1-b_1a_2} y=b2a1b1a2c1a2c2a1

c++ 代码

Point GSP(Line t1,Line t2){
    Point t;
    double a1=t1.a.Y-t1.b.Y,b1=t1.b.X-t1.a.X,c1=t1.a.X*t1.b.Y-t1.b.X*t1.a.Y;
    double a2=t2.a.Y-t2.b.Y,b2=t2.b.X-t2.a.X,c2=t2.a.X*t2.b.Y-t2.b.X*t2.a.Y;
    t.X=(c1*b2-b1*c2)/(b1*a2-a1*b2);t.Y=(c1*a2-a1*c2)/(a1*b2-b1*a2);
    return t;
}

你可能感兴趣的:(计算几何,专题,算法,算法,几何学)