亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vector2d.vb

?? 一個.Net下用VB編寫的用于游戲的人工智能引擎
?? VB
字號:
Public Class Vector2D
    Public x As Double
    Public y As Double
    Public Sub New()
        x = 0.0
        y = 0.0
    End Sub

    Public Sub New(ByVal x1 As Double, ByVal y1 As Double)
        x = x1
        y = y1
    End Sub

    Public ReadOnly Property IsZero() As Boolean
        Get
            Return x * x + y * y < Double.MinValue
        End Get
    End Property
    Public Sub Zero()
        x = 0.0
        y = 0.0
    End Sub

    '返回向量的長度
    Public ReadOnly Property Length() As Double
        Get
            Return Math.Sqrt(x * x + y * y)
        End Get
    End Property

    '返回向量的長度的平方
    Public ReadOnly Property LengthSQ() As Double
        Get
            Return x * x + y * y
        End Get
    End Property

    Public Sub Normalize()
        Dim vector_length As Double = Length

        If vector_length > Double.Epsilon Then
            x /= vector_length
            y /= vector_length
        End If
    End Sub

    Public Function Dot(ByVal v2 As Vector2D) As Double
        Return x * v2.x + y * v2.y
    End Function

    Enum enumSign
        clockwise = 1   '順時針
        anticlockwise = -1  '逆時針
    End Enum

    '返回向量的方向
    Public Function Sign(ByVal v2 As Vector2D) As enumSign
        If (y * v2.x > x * v2.y) Then
            Return enumSign.anticlockwise
        Else
            Return enumSign.clockwise
        End If
    End Function

    '返回該向量的正交向量
    Public Function Perp() As Vector2D
        Return New Vector2D(-y, x)
    End Function

    '調整向量,使它的長度不超過max
    Public Sub Truncate(ByVal max As Double)
        If Length > max Then
            Normalize()
            'TODO:需要重寫操作符 *=
            '*this *= max
            Me.MutiplyEqual(max)
        End If
    End Sub

    Public Sub Reflect(ByVal norm As Vector2D)
        'TODO:需要重寫操作符 +=
        '*this += 2.0 * this->Dot(norm) * norm.GetReverse();
        Me.PlusEqual(norm.GetReverse().Mutiply(2.0 * Dot(norm)))
    End Sub

    Public Function GetReverse() As Vector2D
        Return New Vector2D(-x, -y)
    End Function

    Public Function Distance(ByVal v2 As Vector2D) As Double
        Dim ySeparation As Double = v2.y - y
        Dim xSeparation As Double = v2.x - x

        Return Math.Sqrt(ySeparation * ySeparation + xSeparation * xSeparation)
    End Function

    Public Function DistanceSq(ByVal v2 As Vector2D) As Double
        Dim ySeparation As Double = v2.y - y
        Dim xSeparation As Double = v2.x - x

        Return ySeparation * ySeparation + xSeparation * xSeparation
    End Function

    '''''''''''''''''''
    '模仿操作符重載程序
    '''''''''''''''''''

    '+=
    Public Sub PlusEqual(ByVal v As Vector2D)
        x += v.x
        y += v.y
    End Sub

    '-=
    Public Sub MinusEqual(ByVal v As Vector2D)
        x -= v.x
        y -= v.y
    End Sub

    '*=
    Public Sub MutiplyEqual(ByVal rhs As Double)
        x *= rhs
        y *= rhs
    End Sub

    '/=
    Public Sub DividedEqual(ByVal rhs As Double)
        x /= rhs
        y /= rhs
    End Sub

    '==
    Public Function IsEqual(ByVal v As Vector2D) As Boolean
        Return DoubleEqual(x, v.x) And DoubleEqual(y, v.y) ' System.Double.Equals(x, v.x) And System.Double.Equals(y, v.y)
    End Function

    '!=
    Public Function NotEqual(ByVal v As Vector2D) As Boolean
        Return x <> v.x And y <> v.y

    End Function

    Public Shared Function DoubleEqual(ByVal d1 As Double, ByVal d2 As Double)
        Return Math.Abs(d1 - d2) < 0.000000000001
    End Function

    '+
    Public Function Plus(ByVal v As Vector2D) As Vector2D
        Return New Vector2D(x + v.x, y + v.y)
    End Function

    '-
    Public Function Minus(ByVal v As Vector2D) As Vector2D
        Return New Vector2D(x - v.x, y - v.y)
    End Function

    '*
    Public Function Mutiply(ByVal rhs As Double) As Vector2D
        Dim v As New Vector2D(x, y)
        v.MutiplyEqual(rhs)
        Return v
    End Function

    '/
    Public Function Divided(ByVal rhs As Double) As Vector2D
        Dim v As New Vector2D(x, y)
        v.DividedEqual(rhs)
        Return v
    End Function
    '''''''''''''''''''
    '模仿操作符重載程序結束
    '''''''''''''''''''

    '''''''''''''''''''
    '實用程序
    ''''''''''''''''''
    Public Shared Function Vec2DNormalize(ByVal v As Vector2D) As Vector2D
        Dim vec As Vector2D = v

        Dim vector_length As Double = vec.Length()

        If vector_length > Double.Epsilon Then

            vec.x /= vector_length
            vec.y /= vector_length
        End If
        Return vec
    End Function

    Public Shared Function Vec2DDistance(ByVal v1 As Vector2D, ByVal v2 As Vector2D) As Double
        Dim ySeparation As Double = v2.y - v1.y
        Dim xSeparation As Double = v2.x - v1.x

        Return Math.Sqrt(ySeparation * ySeparation + xSeparation * xSeparation)
    End Function

    Public Shared Function Vec2DDistanceSQ(ByVal v1 As Vector2D, ByVal v2 As Vector2D) As Double
        Dim ySeparation As Double = v2.y - v1.y
        Dim xSeparation As Double = v2.x - v1.x

        Return ySeparation * ySeparation + xSeparation * xSeparation
    End Function

    Public Shared Function Vec2DLength(ByVal v As Vector2D) As Double
        Return Math.Sqrt(v.x * v.x + v.y * v.y)
    End Function

    Public Shared Function Vec2DLengthSQ(ByVal v As Vector2D) As Double
        Return v.x * v.x + v.y * v.y
    End Function

    Public Shared Function POINTStoVector(ByVal p As PointF) As Vector2D
        Return New Vector2D(p.X, p.Y)
    End Function

    Public Shared Function POINTtoVector(ByVal p As Point) As Vector2D
        Return New Vector2D(p.X, p.Y)
    End Function

    Public Shared Function VectorToPOINTS(ByVal v As Vector2D) As PointF
        Return New PointF(v.x, v.y)
    End Function

    Public Shared Function VectorToPOINT(ByVal v As Vector2D) As Point
        Return New Point(v.x, v.y)
    End Function

    Public Shared Sub WrapAround(ByVal pos As Vector2D, ByVal MaxX As Integer, ByVal MaxY As Integer)
        If pos.x > MaxX Then pos.x = 0.0

        If pos.x < 0 Then pos.x = MaxX

        If pos.y < 0 Then pos.y = MaxY

        If pos.y > MaxY Then pos.y = 0.0
    End Sub

    '測試點p是否在top_left與bot_rgt所在的區域
    Public Shared Function NotInsideRegion(ByVal p As Vector2D, ByVal top_left As Vector2D, ByVal bot_rgt As Vector2D) As Boolean
        Return (p.x < top_left.x) Or (p.x > bot_rgt.x) Or (p.y < top_left.y) Or (p.y > bot_rgt.y)
    End Function

    Public Shared Function InsideRegion(ByVal p As Vector2D, ByVal top_left As Vector2D, ByVal bot_rgt As Vector2D) As Boolean
        Return Not ((p.x < top_left.x) Or (p.x > bot_rgt.x) Or (p.y < top_left.y) Or (p.y > bot_rgt.y))
    End Function

    Public Shared Function InsideRegion(ByVal p As Vector2D, ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer) As Boolean
        Return Not ((p.x < left) Or (p.x > right) Or (p.y < top) Or (p.y > bottom))
    End Function

    Public Shared Function isSecondInFOVOfFirst(ByVal posFirst As Vector2D, ByVal facingFirst As Vector2D, ByVal posSecond As Vector2D, ByVal fov As Double) As Boolean
        Dim toTarget As Vector2D = Vec2DNormalize(posSecond.Minus(posFirst))
        Return facingFirst.Dot(toTarget) >= Math.Cos(fov / 2.0)
    End Function

    Public Function Copy() As Vector2D
        Return New Vector2D(x, y)
    End Function
End Class

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美综合一区二区三区| 色婷婷久久久亚洲一区二区三区 | 日韩黄色小视频| 亚洲精品国产第一综合99久久 | 国产精品久久午夜夜伦鲁鲁| 久久亚洲影视婷婷| 久久久久国产精品厨房| 精品动漫一区二区三区在线观看| 欧美mv日韩mv国产网站| 久久综合狠狠综合| 国产精品视频第一区| 亚洲欧洲三级电影| 亚洲黄色av一区| 婷婷一区二区三区| 欧美96一区二区免费视频| 九九在线精品视频| 成人黄色网址在线观看| 色婷婷精品久久二区二区蜜臂av| 在线一区二区三区| 日韩视频中午一区| 国产欧美精品在线观看| 国产精品短视频| 天天色图综合网| 激情亚洲综合在线| 91蝌蚪porny| 欧美一区二区三区人| 337p日本欧洲亚洲大胆精品| 国产精品沙发午睡系列990531| 国产精品国产自产拍在线| 亚洲成人1区2区| 激情小说亚洲一区| 在线精品视频免费播放| 精品三级在线观看| 亚洲丝袜另类动漫二区| 天天做天天摸天天爽国产一区| 国产一区二区看久久| 91在线云播放| 日韩精品一区国产麻豆| 自拍偷在线精品自拍偷无码专区| 一级精品视频在线观看宜春院 | 国产欧美日韩综合| 亚洲韩国一区二区三区| 国产盗摄精品一区二区三区在线| 欧洲av在线精品| 中国色在线观看另类| 午夜伊人狠狠久久| 99精品国产热久久91蜜凸| 欧美xfplay| 亚洲高清视频在线| 99视频精品免费视频| 日韩免费看的电影| 亚洲综合成人在线| 99久久99久久精品国产片果冻| 精品第一国产综合精品aⅴ| 亚洲成人tv网| 91极品视觉盛宴| 亚洲国产精品传媒在线观看| 免费人成精品欧美精品| 欧美午夜精品一区二区三区| 国产欧美一区在线| 国产剧情一区在线| 欧美成人午夜电影| 婷婷综合久久一区二区三区| 日本高清无吗v一区| 国产女人18水真多18精品一级做| 美女爽到高潮91| 欧美一区二区福利在线| 日本91福利区| 欧美一级免费大片| 强制捆绑调教一区二区| 91精品国产欧美日韩| 日本欧美一区二区三区| 欧美日韩国产免费一区二区 | 欧美日韩一区成人| 一区二区三区高清| 欧美在线色视频| 一区二区三区四区不卡视频| 93久久精品日日躁夜夜躁欧美| 中文字幕在线观看不卡视频| 大白屁股一区二区视频| 国产精品嫩草久久久久| 99精品久久99久久久久| 一区二区三区日本| 欧美在线色视频| 日本美女一区二区| 欧美成人一区二区三区片免费| 国内久久精品视频| 国产精品无人区| 99精品久久久久久| 亚洲一区二区三区四区五区黄| 欧美色电影在线| 日本特黄久久久高潮| 久久噜噜亚洲综合| www.日韩av| 亚洲一区二区五区| 欧美不卡在线视频| 成人久久视频在线观看| 亚洲精品ww久久久久久p站 | 日韩精品中文字幕一区| 国产精品一区二区久激情瑜伽| 中文无字幕一区二区三区| av在线这里只有精品| 亚洲成人综合视频| 久久久久久免费网| 91久久精品网| 国产伦精一区二区三区| 亚洲人一二三区| 欧美一级片在线| 成人福利电影精品一区二区在线观看| 亚洲精品乱码久久久久久| 精品入口麻豆88视频| 成人黄色免费短视频| 午夜视频在线观看一区二区| 久久婷婷久久一区二区三区| 日本黄色一区二区| 国产一区二区在线电影| 一级日本不卡的影视| 久久久久久久综合色一本| 欧美日韩中文国产| 粉嫩av一区二区三区在线播放| 亚洲国产人成综合网站| 国产区在线观看成人精品| 69堂精品视频| 97久久精品人人做人人爽50路 | 一区免费观看视频| 日韩一区二区三区视频在线观看 | 香蕉久久夜色精品国产使用方法| 久久一夜天堂av一区二区三区| 91浏览器入口在线观看| 国产福利一区二区三区在线视频| 性做久久久久久久久| 国产精品素人一区二区| 欧美大片拔萝卜| 欧美人xxxx| 色婷婷亚洲精品| 成人福利视频在线看| 国产乱子轮精品视频| 久久国内精品自在自线400部| 亚洲资源在线观看| 亚洲精品国产视频| 中文字幕一区二区三区四区| 久久夜色精品国产噜噜av| 日韩精品一区二区三区三区免费| 欧美视频中文一区二区三区在线观看 | 国产日韩综合av| 精品国产自在久精品国产| 欧美日韩在线观看一区二区 | 久久精品国产精品亚洲综合| 天堂在线亚洲视频| 亚洲成av人综合在线观看| 亚洲欧美日韩系列| 亚洲人精品午夜| 国产精品国产三级国产aⅴ入口 | 91麻豆swag| 色一情一乱一乱一91av| 9人人澡人人爽人人精品| 国产suv精品一区二区883| 国产suv精品一区二区6| 成人久久视频在线观看| 成人h版在线观看| av不卡一区二区三区| 91麻豆国产在线观看| 欧美日韩国产综合一区二区三区| 在线观看日韩国产| 欧美肥妇bbw| 欧美精品一区二区三区很污很色的 | 欧美一区二区三区四区五区| 日韩一区二区免费视频| 欧美成人伊人久久综合网| 久久久噜噜噜久噜久久综合| 中文字幕av一区 二区| 日韩美女精品在线| 亚洲va韩国va欧美va| 五月婷婷激情综合| 极品瑜伽女神91| 成人一区二区三区视频| 在线一区二区三区做爰视频网站| 欧美日韩高清在线| 精品国产一区二区三区久久影院| 国产欧美日韩三级| 亚洲一卡二卡三卡四卡无卡久久| 图片区小说区国产精品视频| 国产一区二区不卡| 91网站在线观看视频| 欧美日韩一级片网站| 2017欧美狠狠色| 亚洲免费观看高清完整版在线观看熊| 亚洲va欧美va国产va天堂影院| 国产一区二区在线视频| 欧美自拍偷拍一区| 久久亚洲精华国产精华液| 最新久久zyz资源站| 免费成人小视频| 日本韩国欧美一区| 久久久久9999亚洲精品| 午夜欧美在线一二页| av色综合久久天堂av综合| 欧美乱熟臀69xxxxxx| 亚洲欧美综合另类在线卡通| 日韩福利视频导航|