计算几何 直线与点的公式推导

在计算任意四边形的IOU时涉及到一些直线与点的计算几何的知识,将相关的公式推导做一个记录

1.已知两点求直线方程

直线方程一般式为:
A x + B y + C = 0 (1-1) Ax + By + C = 0 \tag{1-1} Ax+By+C=0(1-1)
已知两个不同的点 P 1 ( x 1 , y 1 ) P_{1}(x_{1},y_{1}) P1(x1,y1), P 2 ( x 2 , y 2 ) P_{2}(x_{2},y_{2}) P2(x2,y2)
x 1 = x 2 x_{1} = x_{2} x1=x2时,直线方程为 x = x 1 x=x_{1} x=x1
y 1 = y 2 y_{1} = y_{2} y1=y2时,直线方程为 y = y 1 y=y_{1} y=y1
x 1 ≠ x 2 ∧ y 1 ≠ y 2 x_{1} \neq x_{2} \wedge y_{1} \neq y_{2} x1=x2y1=y2 时,由直线方程两点式 y − y 1 x − x 1 = y 2 − y 1 x 2 − x 1 \frac{y-y_{1}}{x-x_{1}} = \frac{y_{2}-y_{1}}{x_{2}-x_{1}} xx1yy1=x2x1y2y1展开得到:
( y 1 − y 2 ) x + ( x 2 − x 1 ) y + x 1 y 2 − x 2 y 1 = 0 (y_{1}-y_{2})x+(x_{2}-x_{1})y+x_{1}y_{2}-x_{2}y_{1}=0 (y1y2)x+(x2x1)y+x1y2x2y1=0

x 1 = x 2 ∨ y 1 = y 2 x_{1} = x_{2} \vee y_{1} = y_{2} x1=x2y1=y2时,上式也成立,因此
A = y 1 − y 2 , B = x 2 − x 1 , C = x 1 y 2 − x 2 y 1 A = y_{1}-y_{2}, B = x_{2}-x_{1}, C = x_{1}y_{2}-x_{2}y_{1} A=y1y2,B=x2x1,C=x1y2x2y1

2.已知两直线方程求交点

已知两直线
A 1 x + B 1 y + C 1 = 0 (2-1) A_{1}x + B_{1}y + C_{1} = 0 \tag{2-1} A1x+B1y+C1=0(2-1)
A 2 x + B 2 y + C 2 = 0 (2-2) A_{2}x + B_{2}y + C_{2} = 0 \tag{2-2} A2x+B2y+C2=0(2-2)

对(2-1)式乘A2,对(2-2)式乘A1得:
A 1 A 2 x + A 2 B 1 y + A 2 C 1 = 0 A_{1}A_{2}x + A_{2}B_{1}y + A_{2}C_{1} = 0 A1A2x+A2B1y+A2C1=0
A 1 A 2 x + A 1 B 2 y + A 1 C 2 = 0 A_{1}A_{2}x + A_{1}B_{2}y + A_{1}C_{2} = 0 A1A2x+A1B2y+A1C2=0

两式相减得:
y = A 1 C 2 − A 2 C 1 A 2 B 1 − A 1 B 2 y = \frac{A_{1}C_{2}-A_{2}C_{1}}{A_{2}B_{1}-A_{1}B_{2}} y=A2B1A1B2A1C2A2C1
同理可得
x = B 1 C 2 − B 2 C 1 A 1 B 2 − A 2 B 1 x = \frac{B_{1}C_{2}-B_{2}C_{1}}{A_{1}B_{2}-A_{2}B_{1}} x=A1B2A2B1B1C2B2C1

A 2 B 1 − A 1 B 2 = 0 A_{2}B_{1}-A_{1}B_{2} = 0 A2B1A1B2=0则说明两条直线平行

3.判断点是否在线段上

已知线段由 P 1 ( x 1 , y 1 ) P_{1}(x_{1},y_{1}) P1(x1,y1), P 2 ( x 2 , y 2 ) P_{2}(x_{2},y_{2}) P2(x2,y2)两点构成,求点 P ( x , y ) P(x,y) P(x,y)是否在线段 P 1 P 2 P_{1}P_{2} P1P2上。
P , P 1 , P 2 P,P_{1},P_{2} P,P1,P2三点共线 → \rightarrow P 1 P 2 → × P 1 P → = 0 \overrightarrow{P_{1}P_{2}} \times \overrightarrow{P_{1}P} = 0 P1P2 ×P1P =0
② 点 P P P在由 P 1 P 2 P_{1}P_{2} P1P2作为对角线的矩形范围内
同时满足①②,则点 P P P在线段 P 1 P 2 P_{1}P_{2} P1P2
由①可得 ( x 2 − x 1 , y 2 − y 1 ) × ( x − x 1 , y − y 1 ) = ( x 2 − x 1 ) ( y − y 1 ) − ( y 2 − y 1 ) ( x − x 1 ) = 0 (x_{2}-x_{1},y_{2}-y_{1})\times(x-x_{1},y-y_{1}) = (x_{2}-x_{1})(y-y_{1}) - (y_{2}-y_{1})(x-x_{1}) = 0 (x2x1,y2y1)×(xx1,yy1)=(x2x1)(yy1)(y2y1)(xx1)=0
由②可得 ( x − x 1 ) ( x 2 − x ) ≥ 0 且 ( y − y 1 ) ( y 2 − y ) ≥ 0 (x-x_{1})(x_{2}-x)\geq0 且 (y-y_{1})(y_{2}-y)\geq0 (xx1)(x2x)0(yy1)(y2y)0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值