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));//这里,两个“> ...

[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< ...

随机推荐

hdu 4114(状压dp)

题目链接: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使用简介(收藏)

TortoiseSVN使用简介 1.安装及下载client 端 2.什么是SVN(Subversion)? 3.为甚么要用SVN? 4.怎么样在Windows下面建立SVN Repository? 5 ...

SpringCloud之初识Robbin---负载均衡

在上一篇中讲解Eureka注册中心的案例,我们启动了一个user-service,然后通过DiscoveryClient来获取服务实例信息,然后获取ip和端口来访问. 但是实际环境中,我们往往会开启很 ...

initializer_list 列表初始化

initializer_list 列表初始化 用花括号初始化器列表初始化一个对象,其中对应构造函数接受一个 std::initializer_list 参数. #include

fastjson总结

1,文件的转成字节数组byte[]的时候,可以直接用fastjson序列化和反序列化 2,用@RequestBody接受json的时候,content-type是否已经application/json ...

虚拟机 安装 CentOS7

初次接触CentOS,最好是在虚拟机中安装: 因为CentOS的安装选项有很多,不理解的情况下千万不要在物理机上尝试: 不然可能出现这种情况:安装好以后,只有黑色的屏幕,只能在里面敲命令:这对于新手来 ...

你可能感兴趣的:(python二维向量运算)