python二維向量運算模擬_python二維向量運算_[VB.NET][C#]二維向量的基本運算

前言

在數學中,幾何向量是指具有大小和方向的幾何對象。

在編程中,向量有著廣泛的應用,其作用在圖形編程和游戲物理引擎方面尤為突出。

第一節 構造函數

通過創建一個二維向量的類(或結構體),實現向量的表示及其運算。

1. 首先,將類命名為“Vector2D”

2. 添加兩個屬性 X 和 Y ,分別表示二維向量的兩個分量

3. 實現構造函數,實例化時即初始化 X,Y 的值

Public Class Vector2D

Public Property x As Double 'x分量

Public Property y As Double 'y分量

'''

''' 二維向量類,能夠實現平面向量的表示與運算

'''

''' 向量的X初始值,默認為0

''' 向量的Y初始值,默認為0

Public Sub New(Optional x As Double = , Optional y As Double = )

Me.x = x

Me.y = y

End Sub

End Class

第二節四則運算

1.添加 Public 方法“Add()”,實現向量與向量加法

'''

''' 加上一個向量

'''

''' 要加的向量

'''

Public Sub Add(ByVal vector As Vector2D)

x += vector.x

y += vector.y

End Sub

2.添加 Public 方法“Minus()”,實現向量與向量減法

'''

''' 減去一個向量

'''

''' 要減的向量

'''

Public Sub Minus(ByVal vector As Vector2D)

x -= vector.x

y -= vector.y

End Sub

3.添加 Public 方法“Multiply()”,實現向量與標量乘法

'''

''' 乘以一個標量

'''

''' 要乘的標量

'''

Public Sub Multiply(ByVal number As Double)

x *= number

y *= number

End Sub

4.添加 Public 方法“Divide()”,實現向量與標量除法

'''

''' 除以一個標量

'''

''' 要除的標量

'''

Public Sub Divide(ByVal number As Double)

x /= number

y /= number

End Sub

第三節重載運算符

利用運算符重載(而不是調用方法)可以更簡便的實現向量運算。

1. 直接在 Vector2D 類里重載運算符。

'重載向量與向量加法運算符

Public Overloads Shared Operator +(ByVal LeftVector As Vector2D, ByVal RightVector As Vector2D) As Vector2D

Return New Vector2D(LeftVector.x + RightVector.x, LeftVector.y + RightVector.y)

End Operator

'重載向量與向量減法運算符

Public Overloads Shared Operator -(ByVal LeftVector As Vector2D, ByVal RightVector As Vector2D) As Vector2D

Return New Vector2D(LeftVector.x - RightVector.x, LeftVector.y - RightVector.y)

End Operator

'重載向量與標量乘法運算符

Public Overloads Shared Operator *(ByVal LeftVector As Vector2D, ByVal RightNum As Double) As Vector2D

Return New Vector2D(LeftVector.x * RightNum, LeftVector.y * RightNum)

End Operator

'重載標量與向量乘法運算符(交換律)

Public Overloads Shared Operator *(ByVal LeftNum As Double, ByVal RightVector As Vector2D) As Vector2D

Return New Vector2D(RightVector.x * LeftNum, RightVector.y * LeftNum)

End Operator

'重載向量與標量除法運算符

Public Overloads Shared Operator /(ByVal LeftVector As Vector2D, ByVal RightNum As Double) As Vector2D

Return New Vector2D(LeftVector.x / RightNum, LeftVector.y / RightNum)

End Operator

第四節模的計算

1.添加 Public 函數“Magnitude()”,實現計算模長

'''

''' 返回向量的模長

'''

'''

Public Function Magnitude() As Double

Return Math.Sqrt(x * x + y * y)

End Function

2.添加 Public 方法“SetMag()”,實現設定模長

'''

''' 指定向量的模長

'''

''' 指定的長度

Public Sub SetMag(ByVal sPutNum As Double)

Dim tempMag As Double = Me.Magnitude

x = x * (sPutNum / tempMag)

y = y * (sPutNum / tempMag)

End Sub

3.添加 Public 方法“LimitMag()”,實現限制模長

'''

''' 限制向量模長,小于或等于某一值

'''

''' 指定的最大值

Public Sub LimitMag(ByVal lUponNum As Double)

Dim tempMag As Double = Me.Magnitude

If tempMag > lUponNum Then

x = x * (lUponNum / tempMag)

y = y * (lUponNum / tempMag)

End If

End Sub

第五節夾角與旋轉

1.添加 Public Shared 函數“GetHeading()”,實現計算向量的方向角

'''

''' '求向量的方向角

'''

''' 指定的向量

'''

Public Shared Function GetHeading(ByVal gVector As Vector2D) As Double

Dim Angle As Double

Angle = Math.Asin(gVector.x / Math.Sqrt(gVector.x * gVector.x + gVector.y * gVector.y)) * ( / Math.PI)

Return Angle

End Function

2.添加 Public Shared 函數“GetAngleBetween()”,實現計算兩個向量的夾角

'''

''' '求兩向量的夾角

'''

''' 第一個向量

''' 第二個向量

'''

Public Shared Function GetAngleBetween(ByVal gLeftVector As Vector2D, ByVal gRightVector As Vector2D) As Double

Dim Angle As Double

Angle = Math.Asin((gLeftVector.x * gRightVector.x + gLeftVector.y * gRightVector.y) /

(Math.Sqrt(gLeftVector.x * gLeftVector.x + gLeftVector.y * gLeftVector.y) *

Math.Sqrt(gRightVector.x * gRightVector.x + gRightVector.y * gRightVector.y))) *

( / Math.PI)

Return Angle

End Function

3.添加Public方法“Rotate()”,實現向量旋轉

'''

''' 向量旋轉

'''

''' 指定旋轉的角度,弧度制

Public Sub Rotate(ByVal gAngle As Double)

Dim x1, y1 As Double

x1 = x * Math.Cos(gAngle) - y * Math.Sin(gAngle)

y1 = y * Math.Cos(gAngle) + x * Math.Sin(gAngle)

x = x1

y = y1

End Sub

附錄

System.Numerics 命名空間提供了一套啟用了 SIMD 的矢量類型。

[LeetCode] Flatten 2D Vector 壓平二維向量

Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

【Unity3D】計算二維向量夾角(-180到180)

在Unity3D中,有時候我們需要計算二維向量的夾角.二維向量夾角一般在0~180度之前,可以直接調用Vector2.Angle(Vector2 from, Vector2 to)來計算. 但是在有些 ...

用vector實現二維向量

如果一個向量的每一個元素是一個向量,則稱為二維向量,例如 vector?>vv(3,?vector(4));//這里,兩個“&gt ...

[LeetCode] 251. Flatten 2D Vector 壓平二維向量

Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

uda 3.C++二維向量

二維向量 接下來,你將使用向量來存儲矩陣.就像 Python 使用列表列表來存儲矩陣一樣,C++ 使用的是向量的向量.用于聲明二維向量的語法有點復雜. 假設你正在使用 Python,并且想存儲一個 3 ...

ACM計算幾何模板——二維幾何基礎(基本運算,點和線,多邊形)

/*==========================*\ | 計算幾何基礎函數 | | 1.點和向量的定義 | | 2.向量的基本運算 | | 3.點積 | | 4.向量長度 | | 5.兩向量角 ...

[Swift]LeetCode251.展平二維向量 $ Flatten 2D Vector

Implement an iterator to flatten a 2d vector. For example,Given 2d vector = [ [1,2], [3], [4,5,6] ] ...

二維離散余弦變換(2D-DCT)

圖像處理中常用的正交變換除了傅里葉變換以外,還有一些其它常用的正交變換,其中離散余弦變換DCT就是一種,這是JPEG圖像壓縮算法里的核心算法,這里我們也主要講解JPEG壓縮算法里所使用8*8矩陣的二維 ...

二維vector的使用

和數組一樣,數組有二維的數組,vector也有二維的vector.下面就介紹一下二維vector的使用方法. 一般聲明初始化二維vector有三種方法 (1) vector< vector&lt ...

隨機推薦

hdu 4114(狀壓dp&rpar;

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=4114 思路:首先是floyd預處理出任意兩點之間的最短距離.dp[state1][state2][u] ...

在matlab中實現遙感影像和shp文件的結合顯示

clc;close all;clear; road=shaperead('boston_roads.shp'); %讀取shape文件 figure, mapshow('boston.tif'); % ...

Linux設置FQDN

FQDN是Fully Qualified Domain Name的縮寫, 含義是完整的域名. 例如, 一臺機器主機名(hostname)是www, 域后綴(domain)是example.com, 那 ...

Selenium之偷懶教程

進來一直停留在基礎理論知識的學習中,認為太乏味,就寫了一個網頁自己主動化的demo:自己主動寫日報.省的以后自己打開網頁寫啦. 直接上代碼: 自己主動填寫日報DEMO import java.io.B ...

maven添加本地jar包依賴

1. ?在java工程下新建文件夾,如repo/allin/allin-util/0.1 然后jar包扔進去,如下圖: 2. 修改pom.xml文件,增加以下 ...

TortoiseSVN使用簡介&lpar;收藏&rpar;

TortoiseSVN使用簡介 1.安裝及下載client 端 2.什么是SVN(Subversion)? 3.為甚么要用SVN? 4.怎么樣在Windows下面建立SVN Repository? 5 ...

SpringCloud之初識Robbin---負載均衡

在上一篇中講解Eureka注冊中心的案例,我們啟動了一個user-service,然后通過DiscoveryClient來獲取服務實例信息,然后獲取ip和端口來訪問. 但是實際環境中,我們往往會開啟很 ...

initializer&lowbar;list 列表初始化

initializer_list 列表初始化 用花括號初始化器列表初始化一個對象,其中對應構造函數接受一個?std::initializer_list?參數. #include

fastjson總結

1,文件的轉成字節數組byte[]的時候,可以直接用fastjson序列化和反序列化 2,用@RequestBody接受json的時候,content-type是否已經application/json ...

虛擬機 安裝 CentOS7

初次接觸CentOS,最好是在虛擬機中安裝: 因為CentOS的安裝選項有很多,不理解的情況下千萬不要在物理機上嘗試: 不然可能出現這種情況:安裝好以后,只有黑色的屏幕,只能在里面敲命令:這對于新手來 ...

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541499.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541499.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541499.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java LinkedHashMap clear()方法與示例

LinkedHashMap類的clear()方法 (LinkedHashMap Class clear() method) clear() method is available in java.util package. clear()方法在java.util包中可用。 clear() method is used to remove all the existing elements from this LinkedHashMap. clear()方法用于從此Link…

《Imperfect C++中文版》——1.3 運行期契約:前置條件、后置條件和不變式

本節書摘來自異步社區出版社《Imperfect C中文版》一書中的第1章&#xff0c;第1.3節&#xff0c;作者&#xff1a; 【美】Matthew Wilson&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.3 運行期契約&#xff1a;前置條件、后置條件和不變式 Imperfect …

python名稱空間與運用域_Python名稱空間和作用域講座,命名,Namespaces,Scopes

Python命名空間(Namespaces)和作用域(Scopes)講座命名空間(Namespace)命名空間(Namespace)&#xff0c;是名稱到對象的映射。命名空間提供了在項目中避免名字沖突的一種方法。命名空間是獨立的&#xff0c;沒有任何關系的&#xff0c;所以一個命名空間中不能有重名&#xff0c;…

getminimum_Java Calendar getMinimum()方法與示例

getminimumCalendar類的getMinimum()方法 (Calendar Class getMinimum() method) getMinimum() method is available in java.util package. getMinimum()方法在java.util包中可用。 getMinimum() method is used to get the minimum value of the given field(fi) of this Cal…

《Spark核心技術與高級應用》——3.2節構建Spark的開發環境

本節書摘來自華章社區《Spark核心技術與高級應用》一書中的第3章&#xff0c;第3.2節構建Spark的開發環境&#xff0c;作者于俊 向海 代其鋒 馬海平&#xff0c;更多章節內容可以訪問云棲社區“華章社區”公眾號查看 3.2 構建Spark的開發環境無論Windows或Linux操作系統&am…

python閉包怎么理解_Python 閉包的理解

Last Updated on 2019年10月15日Python中的閉包是一個比較模糊的概念&#xff0c;不太好理解&#xff0c;我最近的面試中也被問及&#xff0c;在一個單例模式的實現上&#xff0c;我用裝飾器實現單例&#xff0c;然后面試官就問到了我對閉包的理解&#xff0c;回答的不太清楚。…

Java BufferedReader mark()方法與示例

BufferedReader類mark()方法 (BufferedReader Class mark() method) mark() method is available in java.io package. mark()方法在java.io包中可用。 mark() method is used to mark the current position in this stream and whenever we call reset() method so it will re…

《全球互聯網金融商業模式:格局與發展》——第3章,第3節互聯網保險公司...

本節書摘來自華章出版社《全球互聯網金融商業模式&#xff1a;格局與發展》一書中的第3章&#xff0c;第3.3節互聯網保險公司&#xff0c;作者廖理&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 3.3 互聯網保險公司互聯網思維貫穿整個保險創新發展過程&a…

webapi隨機調用_BeetleX之webapi驗證插件JWT集成

對于webapi服務應用很多時候需要制訂訪問限制&#xff0c;在前面的章節也講述了組件如何制訂控制器訪問控制&#xff1b;但到了實際應用要自己去編寫還是比較麻煩。為了讓訪問控制更方便組件實現基于JWT的控制器訪問控制組件BeetleX.FastHttpApi.Jwt&#xff1b;通過這個組件可…

java bitset_Java BitSet nextClearBit()方法與示例

java bitsetBitSet類nextClearBit()方法 (BitSet Class nextClearBit() method) nextClearBit() method is available in java.util package. nextClearBit()方法在java.util包中可用。 nextClearBit() method is used to retrieve the index of the first bit that is set to …

《馴獅記——Mac OS X 10.8 Mountain Lion使用手冊》——2.3 Dock

本節書摘來自異步社區《馴獅記——Mac OS X 10.8 Mountain Lion使用手冊》一書中的第2章&#xff0c;第2.3節&#xff0c;作者&#xff1a;陳明 , 張錚 , 馬玉龍著&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 2.3 Dock 馴獅記——Mac OS X 10.8 Mountain…

mysql 嵌套if標簽_對比Excel、MySQL、Python,分別講述 “if函數” 的使用原理!

作者&#xff1a;黃偉呢本文轉自&#xff1a;數據分析與統計學之美其實&#xff0c;不管是Excel、MySQL&#xff0c;還是Python&#xff0c;“if”條件判斷都起著很重要的作用。今天這篇文章&#xff0c;就帶著大家盤點一下&#xff0c;這三種語言如何分別使用 “if函數” 。if…

Java BigDecimal intValue()方法與示例

BigDecimal類的intValue()方法 (BigDecimal Class intValue() method) intValue() method is available in java.math package. intValue()方法在java.math包中可用。 intValue() method is used to convert a BigDecimal to an integer and when the converted BigDecimal val…

R語言數據挖掘

數據分析與決策技術叢書 R語言數據挖掘 Learning Data Mining with R &#xff3b;哈薩克斯坦&#xff3d;貝特麥克哈貝爾&#xff08;Bater Makhabel&#xff09; 著 李洪成 許金煒 段力輝 譯 圖書在版編目&#xff08;CIP&#xff09;數據 R語言數據挖掘 / &#xff08;哈…

linux adduser mysql_linux_adduser

新帳號建立當不加-D參數,useradd指令使用命令列來指定新帳號的設定值and使用系統上的預設值.新使用者帳號將產生一些系統檔案&#xff0c;使用者目錄建立&#xff0c;拷備起始檔案等&#xff0c;這些均可以利用命令列選項指定。此版本為RedHatLinux提供&#xff0c;可幫每個新加…

java iterator_Java ArrayDeque iterator()方法與示例

java iteratorArrayDeque類iterator()方法 (ArrayDeque Class iterator() method) iterator() Method is available in java.lang package. iterator()方法在java.lang包中可用。 iterator() Method is used to return an iterator over the deque elements. iterator()方法用于…

《jQuery、jQuery UI及jQuery Mobile技巧與示例》——7.4 示例:使用按鈕集裝飾單選框...

本節書摘來自異步社區《jQuery、jQuery UI及jQuery Mobile技巧與示例》一書中的第7章&#xff0c;第7.4節&#xff0c;作者&#xff1a;【荷】Adriaan de Jonge , 【美】Phil Dutson著&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 7.4 示例&#xff1a;使…

mysql 模擬序列_【原創】MySQL 模擬PostgreSQL generate_series 表函數

PostgreSQL 提供了一個很強大的造數據的函數generate_series&#xff0c;基于Common Table Expression。MySQL 沒有復雜的應用程序類型&#xff0c;該如何實現這樣的功能呢&#xff1f; 我想到的三種方法如下:1. 用存儲過程來做。 缺點是寫好多數據庫不擅長的應用邏輯。2. 我們…

Python字符串| isdigit()方法與示例

isdigit() is an in-built method in Python, which is used to check whether a string contains only digits or not. isdigit()是Python中的內置方法&#xff0c;用于檢查字符串是否僅包含數字。 Digit value contains all decimal characters and other digits which may …

vue2.0的學習

vue-router 除了使用 <router-link> 創建 a 標簽來定義導航鏈接&#xff0c;我們還可以借助 router 的實例方法&#xff0c;通過編寫代碼來實現。 1&#xff09;router.push(location) 這個方法會向 history 棧添加一個新的記錄&#xff0c;所以&#xff0c;當用戶點擊瀏…