为什么 translate() 必须在 p5 的 draw() 中?

Why must translate() be in draw() in p5?

使用 p5 库移植到 python。默认情况下,坐标系从左上角开始为 0,0,如 HTML canvas。我正在尝试使用 translate() 将其转换为以 0,0 为中心的笛卡尔平面,然后在 0,0 处画一个圆圈以确认它位于中心。

它有效,但只有当我在 def draw() 中有 translate() 而不是 def setup()

这个有效:

from p5 import *

def setup():
    size(900, 900)

def draw():
    translate(width/2, height/2)
    circle(0, 0, 50) # draws circle at center

run()

这不起作用:

from p5 import *

def setup():
    size(900, 900)
    translate(width/2, height/2)

def draw():
    circle(0, 0, 50) # draws circle at top left

run()

我已经确认使用 print() 语句 run() 在调用 draw() 之前调用 setup(),因此翻译应该在 circle() 之前发生已执行。

如果 setup() 是 运行,为什么我必须将 translate() 放在 draw() 而不是 setup() 中?翻译是否在每次 draw() 执行时重置?

这实际上记录在案 here 最后一段(强调我的):

It is important to note that the drawing coordinate system will be reset at the beginning of each draw() call. If any transformations are performed within draw() (ex: scale, rotate, translate), their effects will be undone at the beginning of draw(), so transformations will not accumulate over time.

所以它不是严格的 Python 特定的,p5.js 本身是特定的,setup 中的 translate 没有效果。