描述二维或三维向量的类。
向量可以以不同的方式理解。在一种观点下,向量就像指向空间的箭头。向量具有大小(长度)和方向。
p5.Vector
对象经常用于编码运动,因为它们简化了数学计算。例如,移动的球有位置和速度。位置描述了球在空间中的位置。球的位置向量从原点延伸到球的中心。速度描述了球的速度和运动方向。如果球直直地向上移动,其速度向量也会指向上方。将球的速度向量添加到其位置向量中会移动球,就像pos.add(vel)
一样。向量数学依赖于p5.Vector
类中的方法。
注意:createVector()是创建此类实例的推荐方法。
示例
语法
p5.Vector([x], [y], [z])
参数
向量的 x 分量。
向量的 y 分量。
向量的 z 分量。
方法
返回向量的字符串表示。
在调试时,调用toString()
非常有用,可以将向量打印到控制台。
设置向量的x
、y
和z
分量。
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。
乘以向量的 x
、 y
、 z
分量。
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 对象,不改变原始对象。
除向量的 x
、y
、 z
分量。
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 对象,不改变原始对象。
计算向量的大小(长度)的平方。
计算两个向量的点积。
点积是描述两个向量之间重叠程度的数字。从视觉上,可以将点积看作是一个向量在另一个向量上投下的“阴影”。当两个向量指向相同或相反方向时,点积最大。当两个向量形成直角时,点积为 0。
dot()
带有一个参数时,可以把它看作一个 p5.Vector 对象。
dot()
带有多个参数时,可以把它们看作另一个向量的 x
、y
、z
分量。
dot()
,如:p5.Vector.dot(v1, v2)
,与调用 v1.dot(v2)
相同。
计算两个向量的叉积。
叉积是一个向量,指向由两个向量创建的平面的垂直方向,它的大小是两个原始向量形成的平行四边形的面积。
cross()
,如:p5.Vector.cross(v1, v2)
,与调用 v1.cross(v2)
相同。
计算由向量表示的两个点之间的距离。
一个点的坐标可以由从原点到该点的向量的分量表示。
dist()
,如:p5.Vector.dist(v1, v2)
,与调用 v1.dist(v2)
相同。
dist() 用来计算以坐标表示的点之间的距离,如:dist(x1, y1, x2, y2)
。
计算二维向量与正 x 轴的夹角。
按照惯例,正 x 轴的角度为0,角度按顺时针方向增加。
如果向量是用 createVector() 创建的,那么 heading()
返回当前 angleMode() 的角度单位。
heading()
的静态版本,如:p5.Vector.heading(v)
,也是一样的工作原理。
将二维向量旋转到特定角度而不改变其大小。
按照惯例,正 x 轴的角度为0,角度按顺时针方向增加。
如果向量是用 createVector() 创建的,那么 setHeading()
使用当前 angleMode() 的单位。
将二维向量按角度旋转而不改变其大小。
按照惯例,正 x 轴的角度为0,角度按顺时针方向增加。
如果向量是用 createVector() 创建的,那么 rotate()
使用当前 angleMode() 的单位。
rotate()
的静态版本,如:p5.Vector.rotate(v, PI)
,返回一个新的 p5.Vector 对象,不改变原始对象。
计算两个向量之间的角度。
如果返回的角度是有符号的,就意味着 v1.angleBetween(v2) === -v2.angleBetween(v1)
。
如果向量是用 createVector() 创建的,那么 angleBetween()
返回当前 angleMode() 的角度单位。
计算新的 x
、y
和 z
分量,它们之间按比例两两等距。
amt
参数是在旧向量和新向量之间进行插值的量。0.0 保持所有分量与旧的向量相等,0.5 取中间值,1.0 保持所有分量与新的向量相等。
lerp()
的静态版本,如: p5.Vector.lerp(v0, v1, 0.5)
,返回一个新的 p5.Vector 对象,不改变原始对象。
根据给定的角度,创建一个新的二维向量。
从一对 ISO 球面角,创建一个新的三维向量
创建一个新的二维单位向量,方向随机。
创建一个新的三维单位向量,方向随机。