参考 p5.Vector

p5.Vector

描述二维或三维向量的类。

向量可以以不同的方式理解。在一种观点下,向量就像指向空间的箭头。向量具有大小(长度)和方向。

p5.Vector对象经常用于编码运动,因为它们简化了数学计算。例如,移动的球有位置和速度。位置描述了球在空间中的位置。球的位置向量从原点延伸到球的中心。速度描述了球的速度和运动方向。如果球直直地向上移动,其速度向量也会指向上方。将球的速度向量添加到其位置向量中会移动球,就像pos.add(vel)一样。向量数学依赖于p5.Vector类中的方法。

注意:createVector()是创建此类实例的推荐方法。

示例

语法

p5.Vector([x], [y], [z])

参数

x
数字:

向量的 x 分量。

y
数字:

向量的 y 分量。

z
数字:

向量的 z 分量。

方法

toString

返回向量的字符串表示。

在调试时,调用toString()非常有用,可以将向量打印到控制台。

set

设置向量的xyz分量。

set()可以使用单独的数字,例如v.set(1, 2, 3),一个p5.Vector对象,例如v.set(v2),或者一个数字数组,例如v.set([1, 2, 3])

如果未为分量提供值,则会将其设置为0。例如,v.set(4, 5)v.x设置为4,v.y设置为5,v.z设置为0。调用set()时不带参数,例如v.set(),会将向量的所有分量都设置为0。

copy

返回p5.Vector对象的副本。

add

将向量的 xyz 分量相加。

add() 可以使用单独的数字,例如 v.add(1, 2, 3),另一个 p5.Vector 对象,例如 v.add(v2),或者数字数组,例如 v.add([1, 2, 3])

如果没有为分量提供值,它将保持不变。例如,v.add(4, 5) 将 4 加到 v.x,5 加到 v.y,0 加到 v.z

调用 add() 而不带参数,例如 v.add(),不会产生任何效果。

静态版本的 add(),例如 p5.Vector.add(v2, v1),返回一个新的 p5.Vector 对象,并不更改原始对象。

rem

对向量的 xyz 分量取模(余数)。

rem() 可以接收单独的数字,如:v.rem(1, 2, 3);可以接收另一个 p5.Vector 对象,如:v.rem(v2);也可以接收数字组,如:v.rem([1, 2, 3])

如果只传一个参数,如:v.rem(2),那么所有分量都将设置为它们对 2 取模的值;如果传两个参数,如:v.rem(2, 3),那么 v.z 不会变;调用不带参数的 rem(),如:v.rem(),不会发生任何变化。

rem() 的静态版本,如:p5.Vector.rem(v2, v1),返回一个新的 p5.Vector 对象,不改变原始对象。

sub

从向量的 xyz 分量中减去。

sub() 可以接收单独的数字,如:v.sub(1, 2, 3);可以接收另一个 p5.Vector 对象,如:v.sub(v2);也可以接收数字组,如:v.sub([1, 2, 3])

如果不给分量传值,它的值就不会变,如:v.sub(4, 5),它将 4 添加到 v.x,5 添加到 v.y,0 添加到 v.z;调用不带参数的 sub(),如:v.sub(),不会发生任何变化。

sub() 的静态版本,如:p5.Vector.sub(v2, v1),返回一个新的 p5.Vector 对象,不改变原始对象。

mult

乘以向量的 xyz 分量。

mult() 可以接收单独的数字,如:v.mult(1, 2, 3);可以接收另一个 p5.Vector 对象,如:v.mult(v2);也可以接收数字组,如:v.mult([1, 2, 3])

如果只传一个参数,如:v.mult(2),那么所有分量都将乘以 2。如果不给分量传值,它的值就不会变,如:v.mult(4, 5) 会将 v.x 乘以 4,v.y 乘以 5,v.z 乘以 1。调用不带参数的 mult(),如:v.mult(),不会发生任何变化。

mult() 的静态版本,如:p5.Vector.mult(v, 2),返回一个新的 p5.Vector 对象,不改变原始对象。

div

除向量的 xyz 分量。

div() 可以接收单独的数字,如:v.div(1, 2, 3);可以接收另一个 p5.Vector 对象,如:v.div(v2);也可以接收数字组,如:v.div([1, 2, 3])

如果只传一个参数,如:v.div(2),那么所有分量都将除以 2。如果不给分量传值,它的值就不会变,如:v.div(4, 5),会将 v.x 除以 4, v.y 除以 5,and v.z 除以 1。调用不带参数的 div(),如:v.div(),不会发生任何变化。

div() 的静态版本,如: p5.Vector.div(v, 2),返回一个新的 p5.Vector 对象,不改变原始对象。

mag

计算向量的大小(长度)。

mag() 用来计算二维向量的大小,参数形式为 mag(x, y)

magSq

计算向量的大小(长度)的平方。

dot

计算两个向量的点积。

点积是描述两个向量之间重叠程度的数字。从视觉上,可以将点积看作是一个向量在另一个向量上投下的“阴影”。当两个向量指向相同或相反方向时,点积最大。当两个向量形成直角时,点积为 0。

dot() 带有一个参数时,可以把它看作一个 p5.Vector 对象。

dot() 带有多个参数时,可以把它们看作另一个向量的 xyz 分量。

dot(),如:p5.Vector.dot(v1, v2),与调用 v1.dot(v2) 相同。

cross

计算两个向量的叉积。

叉积是一个向量,指向由两个向量创建的平面的垂直方向,它的大小是两个原始向量形成的平行四边形的面积。

cross(),如:p5.Vector.cross(v1, v2),与调用 v1.cross(v2)相同。

dist

计算由向量表示的两个点之间的距离。

一个点的坐标可以由从原点到该点的向量的分量表示。

dist(),如:p5.Vector.dist(v1, v2),与调用 v1.dist(v2) 相同。

dist() 用来计算以坐标表示的点之间的距离,如:dist(x1, y1, x2, y2)

normalize

缩放 p5.Vector 对象的分量,使其大小为 1。

normalize() 的静态版本,如:p5.Vector.normalize(v),返回一个新的 p5.Vector 对象,不改变原始对象。

limit

限制向量的最大值。

limit() 的静态版本,如:p5.Vector.limit(v, 5),返回一个新的 p5.Vector 对象,不改变原始对象。

setMag

将向量的大小设置为给定值。

setMag() 的静态版本,如:p5.Vector.setMag(v, 10),返回一个新的 p5.Vector 对象,不改变原始对象。

heading

计算二维向量与正 x 轴的夹角。

按照惯例,正 x 轴的角度为0,角度按顺时针方向增加。

如果向量是用 createVector() 创建的,那么 heading() 返回当前 angleMode() 的角度单位。

heading() 的静态版本,如:p5.Vector.heading(v),也是一样的工作原理。

setHeading

将二维向量旋转到特定角度而不改变其大小。

按照惯例,正 x 轴的角度为0,角度按顺时针方向增加。

如果向量是用 createVector() 创建的,那么 setHeading() 使用当前 angleMode() 的单位。

rotate

将二维向量按角度旋转而不改变其大小。

按照惯例,正 x 轴的角度为0,角度按顺时针方向增加。

如果向量是用 createVector() 创建的,那么 rotate() 使用当前 angleMode() 的单位。

rotate() 的静态版本,如:p5.Vector.rotate(v, PI),返回一个新的 p5.Vector 对象,不改变原始对象。

angleBetween

计算两个向量之间的角度。

如果返回的角度是有符号的,就意味着 v1.angleBetween(v2) === -v2.angleBetween(v1)

如果向量是用 createVector() 创建的,那么 angleBetween() 返回当前 angleMode() 的角度单位。

lerp

计算新的 xyz 分量,它们之间按比例两两等距。

amt 参数是在旧向量和新向量之间进行插值的量。0.0 保持所有分量与旧的向量相等,0.5 取中间值,1.0 保持所有分量与新的向量相等。

lerp() 的静态版本,如: p5.Vector.lerp(v0, v1, 0.5),返回一个新的 p5.Vector 对象,不改变原始对象。

slerp

计算介于两个向量之间新的方向和大小。

amt 参数是在旧向量和新向量之间进行插值的量。0.0 保持方向和大小与旧的向量相等,0.5 取中间值,1.0 保持方向和大小与新的向量相等。

slerp()lerp() 不同的是,它插值大小。调用 v0.slerp(v1, 0.5),将 v0 的大小设为其原始大小与 v1 之间的中间值。调用 v0.lerp(v1, 0.5) 不能实现该功能。

slerp() 的静态版本,如: p5.Vector.slerp(v0, v1, 0.5),返回一个新的 p5.Vector 对象,不改变原始对象。

reflect

向量关于二维中的一条线或三维中的一个平面反射。

线或平面的方向由一个法向量描述,该法向量的指向远离图形。

reflect() 的静态版本,如:p5.Vector.reflect(v, n),返回一个新的

array

以数字数组的形式返回向量的分量。

equals

检查向量的所有分量是否等于另一个向量的分量。

如果这两个向量的所有分量都相同,那么 equals() 返回 true,否则返回 false

如果 equals() 只带有一个参数,那么这个参数是另一个 p5.Vector 对象。

如果 equals() 带有多个参数,那么它们则是另一个向量的分量。缺失的参数将被赋值为 0。

equals() 的静态版本,如: , p5.Vector.equals(v0, v1),其中的两个参数都是 p5.Vector 对象。

fromAngle

根据给定的角度,创建一个新的二维向量。

fromAngles

从一对 ISO 球面角,创建一个新的三维向量

random2D

创建一个新的二维单位向量,方向随机。

random3D

创建一个新的三维单位向量,方向随机。

Notice any errors or typos? Please let us know. Please feel free to edit src/math/p5.Vector.js and open a pull request!

相关参考