直线1 Pt1,Pt2
Pt1(0)=0 : Pt1(1) =0
Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
pPt1(0)=0 : pPt1(1) =0
Pt2(0)=5 : Pt2(1) =5
------------------------
两条直线的Delta相等→两条直线平行比较容易实现。
(pt2(1)-pt1(1))/(pt2(0)-pt1(0))=(pPt2(1)-pPt1(1))/(pPt2(0)-pPt1(0))
当pPt1(0)=pPt2(0) : pPt1(1)=pPt2(1)→两条直线重合。
请各位大侠帮助的,当直线2
pPt1(0)=1 : pPt1(1) =1
Pt2(0)=5 : Pt2(1) =5如何用VB来判断直线1和直线2重合。谢谢。

解决方案 »

  1.   

    if pPt1(0)=pPt2(0) and Pt1(1)=Pt2(1)or pPt1(0)=pPt2(1) and Pt1(1)=Pt2(0) then
     
      

  2.   

    即: Y =aX + b
    a为斜率, b就是Y0
      

  3.   

    直线的方程:y=k*x+b 两条直线要重合,必须满足:
    1、k相等
    2、b相等
      

  4.   

    Private Type POINTAPI
            x As Long
            y As Long
    End Type
    这样来表示一个点好一些,谁知道楼主的数值哪个是X哪个是Y
      

  5.   

    在AutoCad中,设置点为dim Pt(20 as double
    x→pt(0)
    y→pt(1)
    ------------
    看来还是没有表述清楚。直线1 Pt1,Pt2
    Pt1(0)=0 : Pt1(1) =0
    Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
    pPt1(0)=0 : pPt1(1) =0
    Pt2(0)=5 : Pt2(1) =5两直线重合,但长度不相等,且直线1和直线2重合时,其起点和终点均不在相同点上。
    因此
    pPt1(0)=pPt2(0) and Pt1(1)=Pt2(1)or pPt1(0)=pPt2(1) and Pt1(1)=Pt2(0)
    只是直线1和直线2重合的一个特例。
    -----------------------
    直线的方程:y=k*x+b  两条直线要重合,必须满足:
    1、k相等
    2、b相等
    ----------------------------
    k值没有什么可讨论的。
    现在的关键点是b
    谢谢各位的回复。
      

  6.   

    谢谢各位的回复。
    ----------------
    问题提出的出发点
    ----------------
    在AutoCAD用Line绘图时,两条线重合是最普遍的现象。
    例如:用Line命令绘两条直线,结果肯定是重合的。
    直线1 Pt1,Pt2
    Pt1(0)=0 : Pt1(1) =0
    Pt2(0)=10 : Pt2(1) =10直线2 pPt1,pPt2
    pPt1(0)=0 : pPt1(1) =0
    Pt2(0)=5 : Pt2(1) =5Line重合在AutoCad相当多,由于对绘图没有什么影响,所以很少有人关注。
    ----------------------
    近期在网上,以直线重合为关键字找了一下,发现两条直线重合是一种算法。
    所以,以此为题请教各位大侠。
      

  7.   

    http://topic.csdn.net/u/20080516/14/587f068e-2d8d-47ef-a6d0-e3e30ada85a4.html
    在这个帖子中。
    vbman2003网友这段程序,需要进一步消化理解。GetPoint = COLINE      '重合MsgBox Choose(n + 1, "相交", "重合", "平行")Option ExplicitPrivate Type Point
        X As Double
        Y As Double
    End TypePrivate Type Lines
        P1 As Point
        P2 As Point
    End TypeConst 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 = A1 * B2 - A2 * B1
        If D = 0 Then
            If (B1 * C2 <> B2 * C1) Or (A1 * C2 <> A2 * C1) Then
                GetPoint = PARALLEL    '平行
            Else
                GetPoint = COLINE      '重合
            End If
        Else
            '返回交点
            P.X = (A1 * C2 - A2 * C1) / D
            P.Y = (C1 * B2 - C2 * B1) / D
            Print P.X; P.Y
            GetPoint = CROSS           '相交
        End If
    End FunctionPrivate Function GetLine( _
        ByVal X1 As Double, _
        ByVal Y1 As Double, _
        ByVal X2 As Double, _
        ByVal Y2 As Double _
    ) As Lines
        Dim L As Lines
        With L
            .P1.X = X1
            .P1.Y = Y1
            .P2.X = X2
            .P2.Y = Y2
            Line (.P1.X, .P1.Y)-(.P2.X, .P2.Y)
        End With
        GetLine = L
    End Function'测试:
    Private Sub Command1_Click()
        Dim L1 As Lines, L2 As Lines
        Dim P As Point
        Dim n As Long
        
        Me.Scale (-50, 30)-(50, -30)
        
        Me.Cls
        L1 = GetLine(-20, 20, 40, -40)
        L2 = GetLine(-10, 10, 20, -20)
        n = GetPoint(L1, L2, P)
        MsgBox Choose(n + 1, "相交", "重合", "平行")
        
        Me.Cls
        L1 = GetLine(-10, 10, 20, -30)
        L2 = GetLine(-10, 10, 20, -20)
        n = GetPoint(L1, L2, P)
        MsgBox Choose(n + 1, "相交", "重合", "平行")
        
        Me.Cls
        L1 = GetLine(-10, 20, 20, -10)
        L2 = GetLine(-10, 10, 20, -20)
        n = GetPoint(L1, L2, P)
        MsgBox Choose(n + 1, "相交", "重合", "平行")
        
    End Sub