[计算几何]知两点坐标求过两点的直线解析式

我们设已知点为 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)

它们的 X X X坐标差为 X = X 2 − X 1 X=X_2-X_1 X=X2X1 它们的 Y Y Y坐标差为 Y = Y 2 − Y 1 Y=Y_2-Y_1 Y=Y2Y1

[计算几何]知两点坐标求过两点的直线解析式_第1张图片

那么我们目前可以得出这样的解析式: y = Y X x + c y=\frac{Y}{X}x+c y=XYx+c

y y y 轴与直线的交点(如上图点 C C C)的 y y y坐标与 c c c相等

A ( X 1 , Y 1 ) ⇒ C ( 0 , Y 1 − Y X X 1 ) A(X_1,Y_1)\Rarr C(0,Y_1-\frac{Y}{X}X_1) A(X1,Y1)C(0,Y1XYX1)

Y 1 − Y X X 1 Y_1-\frac{Y}{X}X_1 Y1XYX1

⇒ Y 1 − Y 2 − Y 1 X 2 − X 1 X 1 \Rarr Y_1-\frac{Y_2-Y_1}{X_2-X_1}X_1 Y1X2X1Y2Y1X1

⇒ ( X 2 − X 1 ) Y 1 − ( Y 2 − Y 1 ) X 1 X 2 − X 1 \Rarr \frac{(X_2-X_1)Y_1-(Y_2-Y_1)X_1}{X_2-X_1} X2X1(X2X1)Y1(Y2Y1)X1

⇒ X 2 ∗ Y 1 − X 1 ∗ Y 1 − Y 2 ∗ X 1 + Y 1 ∗ X 1 X 2 − X 1 \Rarr \frac{X_2*Y_1-X_1*Y_1-Y_2*X_1+Y_1*X_1}{X_2-X_1} X2X1X2Y1X1Y1Y2X1+Y1X1

⇒ X 2 ∗ Y 1 − Y 2 ∗ X 1 X 2 − X 1 \Rarr \frac{X_2*Y_1-Y_2*X_1}{X_2-X_1} X2X1X2Y1Y2X1

⇒ X 2 ∗ Y 1 − Y 2 ∗ X 1 X \Rarr \frac{X_2*Y_1-Y_2*X_1}{X} XX2Y1Y2X1

c = X 2 ∗ Y 1 − Y 2 ∗ X 1 X c=\frac{X_2*Y_1-Y_2*X_1}{X} c=XX2Y1Y2X1

直线解析式: y = Y X x + X 2 ∗ Y 1 − Y 2 ∗ X 1 X y=\frac{Y}{X}x+\frac{X_2*Y_1-Y_2*X_1}{X} y=XYx+XX2Y1Y2X1

直线解析式两种常见的表达方式: y = k x + b y=kx+b y=kx+b a x + b y + c = 0 ax+by+c=0 ax+by+c=0

我们将刚才推出来的解析式用另外一种方式表示

y = Y X x + X 2 ∗ Y 1 − Y 2 ∗ X 1 X y=\frac{Y}{X}x+\frac{X_2*Y_1-Y_2*X_1}{X} y=XYx+XX2Y1Y2X1

y − Y X x − X 2 ∗ Y 1 − Y 2 ∗ X 1 X = 0 y-\frac{Y}{X}x-\frac{X_2*Y_1-Y_2*X_1}{X}=0 yXYxXX2Y1Y2X1=0

X y − Y x − ( X 2 ∗ Y 1 − Y 2 ∗ X 1 ) = 0 Xy-Yx-(X_2*Y_1-Y_2*X_1)=0 XyYx(X2Y1Y2X1)=0 等式两边同时乘 X X X

( X 2 − X 1 ) y − ( Y 2 − Y 1 ) x − ( X 2 ∗ Y 1 − Y 2 ∗ X 1 ) = 0 (X_2-X_1)y-(Y_2-Y_1)x-(X_2*Y_1-Y_2*X_1)=0 (X2X1)y(Y2Y1)x(X2Y1Y2X1)=0

( X 2 − X 1 ) y + ( Y 1 − Y 2 ) x + ( X 1 ∗ Y 2 − Y 1 ∗ X 2 ) = 0 (X_2-X_1)y+(Y_1-Y_2)x+(X_1*Y_2-Y_1*X_2)=0 (X2X1)y+(Y1Y2)x+(X1Y2Y1X2)=0

( Y 1 − Y 2 ) x + ( X 2 − X 1 ) y + ( X 1 ∗ Y 2 − Y 1 ∗ X 2 ) = 0 (Y_1-Y_2)x+(X_2-X_1)y+(X_1*Y_2-Y_1*X_2)=0 (Y1Y2)x+(X2X1)y+(X1Y2Y1X2)=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 ( 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)

同时我们设在这条直线上的一点 C ( X 0 , Y 0 ) C(X_0,Y_0) C(X0,Y0)

[计算几何]知两点坐标求过两点的直线解析式_第2张图片

那么把等式表示为 ( Y 1 − Y 2 ) X 0 + ( X 2 − X 1 ) Y 0 + ( X 1 ∗ Y 2 − Y 1 ∗ X 2 ) = 0 (Y_1-Y_2)X_0+(X_2-X_1)Y_0+(X_1*Y_2-Y_1*X_2)=0 (Y1Y2)X0+(X2X1)Y0+(X1Y2Y1X2)=0

Y 1 ∗ X 0 − Y 2 ∗ X 0 + X 2 ∗ Y 0 − X 1 ∗ Y 0 + X 1 ∗ Y 2 − Y 1 ∗ X 2 = 0 Y_1*X_0-Y_2*X_0+X_2*Y_0-X_1*Y_0+X_1*Y_2-Y_1*X_2=0 Y1X0Y2X0+X2Y0X1Y0+X1Y2Y1X2=0

X 1 ∗ Y 2 − Y 1 ∗ X 2 X_1*Y_2-Y_1*X_2 X1Y2Y1X2 面积为下图
[计算几何]知两点坐标求过两点的直线解析式_第3张图片

Y 1 ∗ X 0 − X 1 ∗ Y 0 Y_1*X_0-X_1*Y_0 Y1X0X1Y0 面积为下图

[计算几何]知两点坐标求过两点的直线解析式_第4张图片

X 2 ∗ Y 0 − Y 2 ∗ X 0 X_2*Y_0-Y_2*X_0 X2Y0Y2X0 面积为下图

[计算几何]知两点坐标求过两点的直线解析式_第5张图片

通过面积的加减最后得到的如下图

[计算几何]知两点坐标求过两点的直线解析式_第6张图片

( X 2 − X 0 ) ( Y 0 − Y 1 ) − ( Y 2 − Y 0 ) ( X 0 − X 1 ) (X_2-X_0)(Y_0-Y_1)-(Y_2-Y_0)(X_0-X_1) (X2X0)(Y0Y1)(Y2Y0)(X0X1)

我们设 K = ( Y 2 − Y 1 ) / ( X 2 − X 1 ) K=(Y_2-Y_1)/(X_2-X_1) K=(Y2Y1)/(X2X1)

( X 2 − X 0 ) ( Y 0 − Y 1 ) − ( Y 2 − Y 0 ) ( X 0 − X 1 ) = K ( X 2 − X 0 ) ( X 0 − X 1 ) − K ( X 2 − X 0 ) ( X 0 − X 1 ) = 0 (X_2-X_0)(Y_0-Y_1)-(Y_2-Y_0)(X_0-X_1)=K(X_2-X_0)(X_0-X_1)-K(X_2-X_0)(X_0-X_1)=0 (X2X0)(Y0Y1)(Y2Y0)(X0X1)=K(X2X0)(X0X1)K(X2X0)(X0X1)=0

得证

c++代码计算

void ASL(Line t){ //Analytic straight line
    double a=t.a.Y-t.b.Y,b=t.b.X-t.a.X,c=t.a.X*t1.b.Y-t.b.X*t.a.Y;
    return;
}

应用

  • 知一直线和一个在直线上点的 x x x坐标求该点坐标的 y y y坐标

a x + b y + c = 0 ax+by+c=0 ax+by+c=0

b y = − a x − c by=-ax-c by=axc

y = − a x − c b y=\frac{-ax-c}{b} y=baxc

c++代码计算

double FYC(Line t,double x){ //Find the Y coordinate
    double a=t.a.Y-t.b.Y,b=t.b.X-t.a.X,c=t.a.X*t1.b.Y-t.b.X*t.a.Y;
    return (-a*x-c)/b;
}
  • 知一直线和一个在直线上点的 y y y坐标求该点坐标的 x x x坐标

a x + b y + c = 0 ax+by+c=0 ax+by+c=0

a x = − b y − c ax=-by-c ax=byc

x = − b y − c a x=\frac{-by-c}{a} x=abyc

c++代码计算

double FXC(Line t,double x){ //Find the X coordinate
    double a=t.a.Y-t.b.Y,b=t.b.X-t.a.X,c=t.a.X*t1.b.Y-t.b.X*t.a.Y;
    return (-b*y-c)/a;
}

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