zoukankan      html  css  js  c++  java
  • 已知两点,画过两点的直线

     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

  • 相关阅读:
    异常
    C++中的mutable,volatile,explicit关键字
    Vi配置文件--Vimrc
    结构体和类的区别
    [转]恢复视力的方法(500度以下)
    与struct相关的宏定义 ---今Tencent笔试用到的
    如何在C++中调用C的代码
    C中如何调用C++函数?
    技术博走起
    Shell常见命令实践
  • 原文地址:https://www.cnblogs.com/qq809102690/p/2030298.html
Copyright © 2011-2022 走看看