根据四个点坐标求两个直线的交叉点坐标


过程如下:

  假设两个直线的方程为如下表示。

   T=K*S+B--------------------(1)

   T=MS+D---------------------(2)  

   点G(S1,T1),H(S2,T2) 表示的直线为:T=K*S+B

   点P(S3,T3),Q(S4,T4)表示的直线为: T=M*S+D

  B=T-KS --- T1-K*S1=T2-K*S2

 (T1-T2)=K*S1-K*S2=K*(S1-S2)

所以:K=(T1-T2)/(S1-S2)

同理:M=(T3-T4)/(S3-S4)

 

知道了K,M 之后就可以确定,B,和D。

      B=T1-K*S1=T1-(T1-T2)/(S1-S2)*S1=[T1*(S1-S2)-S1*(T1-T2)]/(S1-S2)

                =[T1*S1-T1*S2-S1*T1+S1*T2]/(S1-S2)

                =(T1*S2-S1*T2)/(S1-S2) 

D=T3-M*S3 =(T3*S4-S3*T4)/(S3-S4)

                

这样知道了直线的方程后,就可以确定交叉点了。

 假设交叉点为O(S0,T0),两条直线方程都成立

   T0=K*S0+B, T0=M*S0+D

     K*S0+B=M*S0+D

     (K-M)*S0=(D-B)

     S0=(D-B)/(K-M)  =[(T3*S4-S3*T4)/(S3-S4)-(T1*S2-S1*T2)/(S1-S2)]/

[(T1-T2)/(S1-S2)-(T3-T4)/(S3-S4)]

                         =[(T3*S4-S3*T4)*(S1-S2)-(T1*S2-S1*T2)*(S3-S4)]/

                           [(T1-T2)*(S3-S4)-(T3-T4)*(S1-S2)]

                         =[(S1-S2)*(T3*S4-S3*T4)-(S3-S4)*(T1*S1-S1*T2)]/

                           [(T1-T2)*(S3-S4)-(T3-T4)*(S1-S2)]

     T0=K*(D-B)/(K-M)+B=[(K*D-K*B)+B*(K-M)]/(K-M)

                       =[K*D-K*B+B*K-B*M]/(K-M)

                       =[K*D-M*B]/(K-M)

                       =[(T1-T2)/(S1-S2)*D-(T3-T4)/(S3-S4)*B]/

                         [ (T1-T2)/(S1-S2)-(T3-T4)/(S3-S4)]

                      =[(T1-T2)*D*(S3-S4)-(T3-T4)*B*(S1-S2)]/

                        [ (T1-T2)*(S3-S4)-(T3-T4)*(S1-S2)]

                     =[(T1-T2)* (T3*S4-S3*T4)-(T3-T4)* (T1*S2-S1*T2)]/

                       [(T1-T2)*(S3-S4)-(T3-T4)*(S1-S2)] 

    

       从S0,T0 的表达式来看,他们是一个对称的结果。 



你可能感兴趣的:(Opencv)