前言

在数学中,几何向量是指具有大小和方向的几何对象。

在编程中,向量有着广泛的应用,其作用在图形编程和游戏物理引擎方面尤为突出。

第一节 构造函数

通过创建一个二维向量的类(或结构体),实现向量的表示及其运算。

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的安装选项有很多,不理解的情况下千万不要在物理机上尝试: 不然可能出现这种情况:安装好以后,只有黑色的屏幕,只能在里面敲命令:这对于新手来 ...

python二维向量运算模拟_python二维向量运算_[VB.NET][C#]二维向量的基本运算相关推荐

  1. python二维向量运算模拟_Python数学基础之向量定义与向量运算(附代码)

    患难与困苦是磨练人格的最高学府.--苏格拉底(公元前470年-公元前399年) Adversity and pinch are the highest institution of higher le ...

  2. 位运算模拟乘法,模指数运算

    1. 整数乘法(位运算) 使用位运算模拟乘法,其遵照以下的数学原理,即: ab=a(b020+b121+⋅⋅⋅+bn−12n−1)=a(b020)+a(b121)+⋅⋅⋅+a(bn−12n−1)ab= ...

  3. python计算数组元素的和_python中数组的运算

    Python中进行数组的运算需要调用NumPy包. 其官网是:http://www.numpy.org/​www.numpy.org NumPy是Python语言的一个扩充程序库.它支持高级大量的维度 ...

  4. python中float与eval式一样的吗_用Python最原始的函数模拟eval函数的浮点数运算功能...

    前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数. 我仿佛记得以前新手时,对这个问题完全不知道如何下手. 我觉得处理括号实在是太复杂了,多层嵌套括号怎么解析呢?一些多余的括号 ...

  5. python支持复数以及相关的运算吗_Python: 复数的数学运算

    写的最新的网络认证方案代码遇到了一个难题,唯一的解决办法就是使用复数空间,需要使用复数来执行一些计算操作. 复数可以用使用函数complex(real, imag) 或者是带有后缀j 的浮点数来指定. ...

  6. python支持复数以及相关的运算吗_python怎么实现复数运算

    复数的数学运算 复数可以用使用函数 complex(real, imag) 或者是带有后缀j的浮点数来指定.比如:>>> a = complex(2, 4) >>> ...

  7. python自定义加减乘除函数实现加减乘除_Python实现高精度加减乘除运算

    Python实现高精度加减乘除运算 Mkdir700 • 2019 年 12 月 12 日 Loading... 今天实验课,要求的这个作业 ## 完整代码 ## 目前完整写完了加法 ```pytho ...

  8. python的浮点数占 个字节_Python的浮点数占( )字节_学小易找答案

    [其它]使用字典完成 求200-300之间的素数. [单选题]下列Python语句正确的是() [其它]编写一个猜数游戏,该游戏会随机产生一个数字,用户可以随意输入一个数进行比较,在比较过程中,会不断 ...

  9. python前后两个下划线_Python中一个下划线_和两个下划线__的区别

    通常Python类中会有_和__的方法,是指什么意思呢?如下: __表示内部不允许访问,_表示这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,"虽然 ...

最新文章

  1. 力扣——按递增顺序显示卡牌
  2. 头条号为什么把作者抛弃了?
  3. C++之函数指针实现函数回调
  4. ubuntu 虚拟机 串口 socket_上篇 | 虚拟机Ubuntu向开发板AMR传送文件
  5. 【python】列表的定义与操作
  6. “乌木”到底是何物?它是怎样形成的?为何总能卖出天价?
  7. HUE与Zookeeper的集成
  8. 6.1 API : AdaBoostClassifier与AdaBoostRegressor
  9. 《为学》 [清]彭端淑
  10. Java中如何判断两个对象是否相等(Java equals and ==)
  11. js读取json数据(php传值给js)
  12. 《Java高级Struts2》教学大纲(云计算) 版本号 编写人 版本描述 V1.0 目录 课程教学目标 5 (一)知识目标 5 (二)能力目标 6 (三)速度目标 6
  13. CnOpenData国际货物贸易数据
  14. 小程序 怎样判断数据的类型
  15. 【报告分享】汽车数字营销新度量衡-懂车帝(附下载)
  16. 白鹭小游戏开发,并发布到微信平台
  17. IDEA报错:Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found
  18. Qt QString 的.arg
  19. 深圳市租房提取住房公积金攻略
  20. h5开发常用颜色书写汇总

热门文章

  1. ubuntu测试网速
  2. 模拟键盘的终极模拟1
  3. Rising Temperature
  4. openoffice osl模块学习1
  5. 面向对象-1-类和对象、基础语法、初始化、内置方法和属性
  6. 数学建模国赛2017年C题优秀论文(Word)(颜色与物质浓度辨识)
  7. 2017年数学建模A组练习代码
  8. uniq用法linux,linux之uniq用法
  9. Google Earth Engine(GEE) ——ile error: Expected a homogeneous image collection, but an image with
  10. Java春招面试题之编程基础类(一)