已知两点,画过两点的直线

 Public Sub MButtonDown(ByVal g As System.Drawing.Graphics, ByVal aPos As System.Drawing.PointF) Implements ICommand.MButtonDown
        TempSelectPoints.Clear()
        Dim prePos As New PointF()

        m_Step += 1
        Select Case m_Step
            Case 1
                TempSelectObjects.Clear()
                p1 = aPos
                DrawTPoint(g, p1)  '设置一个标识点

            Case 2
                Dim m_lLinek As Double
                TPoint_Clear(g) '清除标识点
                p2 = aPos
                If p2.X = p1.X Then
                    m_Begin.X = -lMax
                    m_Begin.Y = p1.Y
                    m_End.X = lMax
                    m_End.Y = p1.Y
                Else
                    m_lLinek = (p2.Y - p1.Y) / (p2.X - p1.X)


                    '数学情形为以下注释

                    '                    y1 = p1.Y
                    '                    x1 = p1.X
                    '                    k = m_lLinek
                    '                    xb = m_Begin.X
                    '                    yb = m_Begin.Y
                    '                    xe = m_End.X
                    '                    ye = m_End.X

                    '                     if |y2-y1|>|x2-x1| then
                    '                        If ((x2 > x1) And (y2 > y1)) Or ((x2 < x1) And (y2 < y1)) Then
                    '                            yb = -lMax
                    '                            ye = lMax
                    '                            xe = (ye - y1) / k + x1
                    '                            xb = (yb - y1) / k + x1
                    '                        Else
                    '                            ye = -lMax
                    '                            yb = lMax
                    '                            xe = (ye - y1) / k + x1
                    '                            xb = (yb - y1) / k + x1
                    '                     else
                    '                            If ((x2 > x1) And (y2 > y1)) Or ((x2 < x1) And (y2 < y1)) Then
                    '                                xb = -lMax
                    '                                xe = lMax
                    '                                yb = (xb - x1) * k + y1
                    '                                ye = (xe - x1) * k + y1
                    '                            Else
                    '                                xb = lMax
                    '                                xe = -lMax
                    '                                yb = (xb - x1) * k + y1
                    '                                ye = (xe - x1) * k + y1
                    '                            End If
                    '                     End If

                    If Abs(p2.Y - p1.Y) > Abs(p2.X - p1.X) Then

                        If p2.X > p1.X Then
                            If p2.Y > p1.Y Then
                                m_Begin.Y = -lMax
                                m_End.Y = lMax
                                m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
                                m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
                            Else
                                m_End.Y = -lMax
                                m_Begin.Y = lMax
                                m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
                                m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
                            End If
                        Else
                            If p2.Y < p1.Y Then
                                m_Begin.Y = -lMax
                                m_End.Y = lMax
                                m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
                                m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
                            Else
                                m_End.Y = -lMax
                                m_Begin.Y = lMax
                                m_Begin.X = (m_Begin.Y - p1.Y) / m_lLinek + p1.X
                                m_End.X = (m_End.Y - p1.Y) / m_lLinek + p1.X
                            End If
                        End If
                    Else
                        If p2.X > p1.X Then
                            If p2.Y > p1.Y Then
                                m_Begin.X = -lMax
                                m_End.X = lMax
                                m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
                                m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
                            Else
                                m_End.X = -lMax
                                m_Begin.X = lMax
                                m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
                                m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
                            End If
                        Else
                            If p2.Y < p1.Y Then
                                m_Begin.X = -lMax
                                m_End.X = lMax
                                m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
                                m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
                            Else
                                m_End.X = -lMax
                                m_Begin.X = lMax
                                m_Begin.Y = (m_Begin.X - p1.X) * m_lLinek + p1.Y
                                m_End.Y = (m_End.X - p1.X) * m_lLinek + p1.Y
                            End If
                        End If
                    End If
                End If

                DrawLine(g, m_Begin, m_End)
                qSelect(g)
                m_Step = 0

        End Select
    End Sub

原文地址:https://www.cnblogs.com/qq809102690/p/2030298.html