p5.Vector 不尊重angleMode

问题描述

我注意到,在旋转向量时,即使在我用 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,并相应地以弧度或度数给出角度。