MyException - 我的异常网
当前位置:我的异常网» VB » 求任意两线交点,该如何处理

求任意两线交点,该如何处理

www.MyException.Cn  网友分享于:2013-12-30  浏览:89次
求任意两线交点
我用Line方法编了一个画线的程序,不是直线的,现在要求任意两线交点,怎么编这个程序?

------解决方案--------------------
数学都忘光了,翻书看了大半天,弄了一个好象是对的,思路就是解方程,然后判断这样吧:
VBScript code

Option Explicit

Private Type Point
    X As Double
    Y As Double
End Type

Private Type Lines
    P1 As Point
    P2 As Point
End Type

Const CROSS As Long = 0     '相交
Const COLINE As Long = 1    '共线
Const PARALLEL As Long = 2  '平行

Private Function GetPoint(L1 As Lines, L2 As Lines, P As Point) As Long
    Dim A1 As Double, B1 As Double, C1 As Double
    Dim A2 As Double, B2 As Double, C2 As Double
    Dim D As Double, R As Double
    
    A1 = L1.P2.Y - L1.P1.Y
    B1 = L1.P1.X - L1.P2.X
    C1 = L1.P2.X * L1.P1.Y - L1.P1.X * L1.P2.Y
    
    A2 = L2.P2.Y - L2.P1.Y
    B2 = L2.P1.X - L2.P2.X
    C2 = L2.P2.X * L2.P1.Y - L2.P1.X * L2.P2.Y

    D = A2 * B1 - A1 * B2
    'Debug.Print A1; B1; A2; B2; C1; C2
    If D = 0 Then
        If (A1 = A2) And (B1 = B2) Then
            GetPoint = COLINE
        Else
            GetPoint = PARALLEL
        End If
    Else
        P.X = (C1 * B2 - C2 * B1) / D
        P.Y = (A1 * C2 - A2 * C1) / D
        GetPoint = CROSS
    End If
End Function

'测试
Private Sub Command1_Click()
    Dim L1 As Lines, L2 As Lines
    Dim Pot As Point
    Dim R As Long
    
    With L1
        .P1.X = -10
        .P1.Y = -10
        .P2.X = 20
        .P2.Y = 20
    End With
    
    With L2
        .P1.X = 10
        .P1.Y = 10
        .P2.X = -20
        .P2.Y = 20
    End With
    'PLine L1
    'PLine L2
    R = GetPoint(L1, L2, Pot)
    If R = CROSS Then
        MsgBox "X: " & Pot.X & "  Y: " & Pot.Y
    Else
        MsgBox Choose(R, "共线", "平行")
    End If

End Sub

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有