问题描述
我注意到,在旋转向量时,即使在我用 angleMode
调用 degrees
之后,旋转也是以弧度完成的。此行为仅在使用 new p5.Vector
语法声明的向量时出现,而使用 createVector
可避免这种情况。
最小可重现示例:(粘贴到 p5 网络编辑器或 OpenProcessing)
function setup() {
createCanvas(400,400)
translate(100,100) // To see the effect more clearly
angleMode(degrees)
let v = new p5.Vector(1,0)
line(0,v.x * 50,v.y * 50)
v.rotate(HALF_PI)
line(0,v.y * 50)
}
请注意,旋转仍以弧度为单位进行。如果您将 new p5.Vector
替换为 createVector
,那么问题就会消失。这是为什么?
解决方法
由于 sin()
之类的数学函数受到影响,没有充分的理由不应该影响 p5.Vector.rotate
。
但是,它并不打算像您一样构建一个向量。您应该使用 createVector()
创建一个向量。此函数不仅创建对象,还设置所有内部属性,以便对象按预期运行。
此行为并未直接针对 rotate()
进行解释,但已针对 heading()
进行了记录:
计算此向量的旋转角度(仅限 2D 向量)。使用 p5.Vectors
创建的 createVector()
将考虑当前的 angleMode
,并相应地以弧度或度数给出角度。