Processing p5.js中frameCount和rotate函数的概念清晰

Processing p5.js中frameCount和rotate函数的概念清晰,processing,computational-geometry,p5.js,Processing,Computational Geometry,P5.js,我在p5.js网站上做了一个例子-。我被代码中旋转函数的工作方式弄糊涂了。在下面的函数中,如果我只是传递旋转(frameCount),在浏览器中,它显示我旋转两个相交的三角形,形成一个星形,但一旦我分割frameCount,它就会消失。还有代码中使用的方程式——有人能给出我们如何达到这一点的数学直觉吗 let sx = x + cos(a) * radius; let sy = y + sin(a) * radius; 关于“两个三角形相交形成一颗星”: 默认情况下,旋转函数采用弧度。如果执行

我在p5.js网站上做了一个例子-。我被代码中旋转函数的工作方式弄糊涂了。在下面的函数中,如果我只是传递旋转(frameCount),在浏览器中,它显示我旋转两个相交的三角形,形成一个星形,但一旦我分割frameCount,它就会消失。还有代码中使用的方程式——有人能给出我们如何达到这一点的数学直觉吗

let sx = x + cos(a) * radius;
let sy = y + sin(a) * radius;
关于“两个三角形相交形成一颗星”:

默认情况下,
旋转
函数采用弧度。如果执行旋转(帧数),则每个帧的角度将增加1弧度。一个弧度大约等于57度,所以你的三角形在每帧旋转57度。在第3帧,三角形将旋转约120度,并将与第1帧的三角形大致重叠。类似地,第4帧处的三角形将与第2帧处的三角形大致重叠

您看到的“两个三角形”只是两组三角形,一组是第1、3、5帧处的三角形。。。另一组是第2,4,6帧的三角形

这就是为什么如果希望获得一个相当连续的旋转,就应该将
帧数
除以某个数字。或者,也可以设置为
。在这种情况下,您不必再分割
frameCount
,因为在每个帧上,三角形只会旋转1度而不是1弧度

关于数学公式:

事实上,该示例中使用的函数应该被称为
regularPolygon
,而不是
polygon
,因为它只绘制正多边形

现在,如何绘制正多边形?你知道从每个顶点到中心的距离是一个常数。在本例中,该数字是
半径
变量。你知道如果你使用极坐标,以多边形的中心为原点,每两个相邻顶点之间的角度差也是一个常数。在本例中,该数字是
角度
变量

更准确地说,顶点的极坐标应采用以下形式:

v1 = (radius, 0)
v2 = (radius, angle)
v3 = (radius, angle*2)
...
将它们转换为笛卡尔坐标,可以得到如下结果:

v1 = (cos(0)       * radius, sin(0)       * radius)
v2 = (cos(angle)   * radius, sin(angle)   * radius)
v3 = (cos(angle*2) * radius, sin(angle*2) * radius)
...
但是,如果多边形的中心不是原点,而是点
(x,y)
,如示例中所示,该怎么办?现在顶点的笛卡尔坐标变成:

v1 = (x + cos(0)       * radius, y + sin(0)       * radius)
v2 = (x + cos(angle)   * radius, y + sin(angle)   * radius)
v3 = (x + cos(angle*2) * radius, y + sin(angle*2) * radius)
所以当你这样做的时候:

for (let a = 0; a < TWO_PI; a += angle) {
    let sx = x + cos(a) * radius;
    let sy = y + sin(a) * radius;
    vertex(sx, sy);
  }
for(设a=0;a

您确实在绘制顶点
v1、v2、v3…

这里也讨论了-->:)感谢您的解释,尽管我有一个疑问-例如,我只想创建带参数多边形的三角形(360200,82,3);现在,我对代码中的所有内容进行注释。只有plygon函数应该使用这些参数创建三角形。当我运行时,会在画布的中心创建一个三角形。请让我知道我的理解是否正确,原点(360200)位于三角形的中心,从那里以0度角计算第一个顶点,然后添加120度第二个顶点,然后添加240度第三个顶点。是正确的吗?@isilia:欢迎你:)如果回答了你的问题,请不要忘记接受答案。至于新的问题:是的,你的理解是正确的。最后一个疑问是,你是否可以解释一下——当你提到-v1=(半径,0)时,角度被视为0度,但这是第一个顶点的必要条件,还是我可以取除0度以外的其他角度。我对极坐标的理解有点弱,所以如果我的问题听起来很愚蠢,请原谅。如果我们可以取0度以外的角度,那么v1、v2和v3的方程是什么?我注意到还有一件事——平移(宽度*0.2,高度*0.5);多边形(0,0,82,3);旋转(帧数/200)。如果我像这样编辑代码,那么它将创建三角形,但不会旋转它。这是为什么。我的意思是,如果我把多边形函数放在末尾,那么多边形开始旋转。为什么序列在这里很重要,理想情况下,首先移动原点,然后构造多边形,然后旋转函数应该旋转多边形,但事实并非如此。也请帮我澄清这一困惑
for (let a = 0; a < TWO_PI; a += angle) {
    let sx = x + cos(a) * radius;
    let sy = y + sin(a) * radius;
    vertex(sx, sy);
  }