GOTS
  • GOTS
  • principles
    • 概述
    • 向量的计算
    • 齐次坐标系
    • 维度拓展的9交叉模型
  • geometric
    • 概述
    • 点到直线的距离
    • 线段交点
    • 计算边缘距离
    • 空间关系计算
    • 凸包计算
  • simplify
    • 概述
    • 道格拉斯-普克算法
    • 维斯瓦林甘算法
    • Opt Perkal‘s
  • INDEX
    • 概述
    • 二叉树
    • STR-R树
Powered by GitBook
On this page
  1. geometric

线段交点

Previous点到直线的距离Next计算边缘距离

Last updated 5 years ago

Was this helpful?

CtrlK
  • 求两线段交点
  • 找交点所在的矩形范围
  • 根据齐次坐标求交点坐标

Was this helpful?

求两线段交点

org.locationtech.jts.algorithm.Intersection

对任意相交折线段,AB ,CD ,求其交点T:

其交点

找交点所在的矩形范围

对于直线

l1=AB,l2=CDl_1=AB,l_2=CDl1​=AB,l2​=CD

找到其对应的矩形范围

l1∈D1,D2∈l2l_1\in D_1,D_2\in l_2l1​∈D1​,D2​∈l2​

得到

D=D1⋂D2D = D_1\bigcap D_2D=D1​⋂D2​

进一步得到D的中心点M,将M作为原点建立坐标系,平移各点后得到

Am,Bm,Cm,DmA_m,B_m,C_m,D_mAm​,Bm​,Cm​,Dm​

根据齐次坐标求交点坐标

高中的平面几何中,都在使用方程组的方法求解,相比之下,齐次坐标的形式更方便、简洁。

对齐次坐标有:

两点确定的直线为

l=P1×P2l=P_1\times P_2l=P1​×P2​

两直线交点为

T=l1×l2T=l_1\times l_2T=l1​×l2​

将坐标转换为齐次坐标有:

Am=(xa,ya,wa)A_m = (x_a,y_a,w_a)Am​=(xa​,ya​,wa​)
Bm=(xb,yb,wb)B_m = (x_b,y_b,w_b)Bm​=(xb​,yb​,wb​)

取

wa=wb=1w_a = w_b = 1wa​=wb​=1

则

l1=Am×Bm=(ya−yb,−(xa−xb),xa×yb−xb×ya)l_1 = A_m\times B_m=(y_a-y_b,-(x_a-x_b),x_a\times y_b-x_b\times y_a)l1​=Am​×Bm​=(ya​−yb​,−(xa​−xb​),xa​×yb​−xb​×ya​)

同理得:

l2=Cm×Dm=(yc−yd,−(xc−xd),xc×yd−xd×yc)l_2 = C_m\times D_m=(y_c-y_d,-(x_c-x_d),x_c\times y_d-x_d\times y_c)l2​=Cm​×Dm​=(yc​−yd​,−(xc​−xd​),xc​×yd​−xd​×yc​)

有齐次坐标

T=(x,y,w)=l1×l2T=(x,y,w)=l_1\times l_2T=(x,y,w)=l1​×l2​

最终有Target T 坐标

(X,Y)=(xw+xm,yw+ym)(X,Y) = (\frac{x}{w}+x_m,\frac{y}{w}+y_m)(X,Y)=(wx​+xm​,wy​+ym​)