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.mzph.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;当用户点击浏…