博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2011-04-27 13:27  Henry_BIG  阅读(218)  评论(0编辑  收藏  举报

 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