Processing 为什么会摆动?

Processing 为什么会摆动?,processing,Processing,在OS X上处理2.2.1和3.0a2时测试 我在下面调整的代码对你们中的一些人来说可能很熟悉,这就是Imgur现在使用的加载动画。它发布在OpenProcessing.org上,我已经能够让它在处理过程中工作,但圆弧不断地摆动(相对运动在1像素内)。我是处理新手,在草图中没有看到任何可能导致这种情况的东西,它在ProcessingJS中运行,没有任何问题(尽管CPU利用率非常高) int num=6; 浮动步长、间距、θ、角度、起始位置; 无效设置(){ 帧率(60); 大小(60,60);

在OS X上处理2.2.1和3.0a2时测试

我在下面调整的代码对你们中的一些人来说可能很熟悉,这就是Imgur现在使用的加载动画。它发布在OpenProcessing.org上,我已经能够让它在处理过程中工作,但圆弧不断地摆动(相对运动在1像素内)。我是处理新手,在草图中没有看到任何可能导致这种情况的东西,它在ProcessingJS中运行,没有任何问题(尽管CPU利用率非常高)

int num=6;
浮动步长、间距、θ、角度、起始位置;
无效设置(){
帧率(60);
大小(60,60);
冲程重量(3);
noFill();
中风(51,51,51);
步骤=11;
起始位置=-(PI/2);
}
作废提款(){
背景(255,255,255,0);
平移(宽度/2,高度/2);
for(int i=0;i如果(angle我在OSX的2.2.1上看到了问题,在
setup()中调用
hint(ENABLE\u STROKE\u PURE)
为我解决了这个问题。不过,我找不到关于这个调用的好文档;这里和那里都提到了这个问题


至于根本原因,如果我一定要推测的话,我猜Processing的Java渲染器使用带有少量控制点的样条曲线来近似圆弧。控制点在端点之间间隔开,因此端点移动时,近似中的凹凸也会移动。近似可能足够用于单帧,但动画使凹凸变得明显。设置
ENABLE_STROKE_PURE
可能会增加控制点的数量,或者可能会强制处理在其构建的基础图形库中使用更昂贵的圆弧基本体。不过,这只是一个猜测,说明了为什么绘图环境可能会出现这种情况一个类似您所看到的错误。我还没有阅读Processing的源代码来验证猜测。

我看到了OS X 2.2.1上的问题,并在
setup()
中调用
hint(ENABLE\u STROKE\u PURE)
为我修复了它。不过,我找不到关于这个调用的好文档;这里和那里都提到了它


至于根本原因,如果我一定要推测的话,我猜Processing的Java渲染器使用带有少量控制点的样条曲线来近似圆弧。控制点在端点之间间隔开,因此端点移动时,近似中的凹凸也会移动。近似可能足够用于单帧,但动画使凹凸变得明显。设置
ENABLE_STROKE_PURE
可能会增加控制点的数量,或者可能会强制处理在其构建的基础图形库中使用更昂贵的圆弧基本体。不过,这只是一个猜测,说明了为什么绘图环境可能会出现这种情况一个像你看到的那样的错误。我还没有阅读Processing的源代码来验证猜测。

我不确定你的疑问是什么。动画基本上来自于增加θ
θ+=.02
每帧。它用于计算定义圆弧时使用的角度。Sin和cos也被称为…所以当角度达到360º时,就有点奇怪了环绕环绕。@v.k.弧线“抖动”around,这不是我在代码中定义的东西,但在2.0.1中看到的任何情况下都会发生。很抱歉,我不确定你有什么疑问。动画基本上来自于增加θ
θ+=.02
每帧。它用于计算定义圆弧时使用的角度。Sin和cos也被称为…所以当角度达到36时周围有0º的缠绕。@v.k.弧线“抖动”环绕,这不是我在代码中定义的,但在2.0.1中看到的任何情况下都会发生。它工作正常。抱歉。谢谢,这确实有助于抖动,但是你看到了圆弧闭合时出现的斑点吗?是的,我也看到了。我想这是由圆弧几乎闭合但不是完全闭合造成的。渲染器在机器人上绘制了一个圆帽圆弧的h端,这些顶点重叠。理论上这不应该是问题,但渲染器可能会对重叠的子像素进行双重绘制。您可以使用
平滑(0)
,解决这个问题,但结果很难看。或者您可以使用
笔划顶点(正方形)更改线条样式
。也许理想的解决方案是重写弧的计时,这样它们就不会停留在几乎闭合的状态。太好了,我会尝试一下这些选项。我认为你对重叠子像素的看法是正确的,这是我看到它时的想法。对于大多数动画来说已经足够好了,但对于像6弧这样亲密的东西来说就足够了这非常明显。谢谢,这肯定有助于抖动,但是你现在看到圆弧闭合时出现的斑点了吗?是的,我也看到了。我认为这是因为圆弧几乎闭合,但不是完全闭合。渲染器在圆弧的两端绘制一个圆帽,这些帽重叠。理论上这应该不是问题,但是derer可能会重复绘制重叠的子像素。您可以使用
平滑(0)
修复该问题,但结果很难看。或者您可以使用
笔划帽(方形)更改线条样式
。也许理想的解决方案是重写弧的计时,这样它们就不会停留在几乎闭合的状态。太好了,我会尝试一下这些选项。我认为你对重叠子像素的看法是正确的,这是我看到它时的想法。对于大多数动画来说已经足够好了,但对于像6弧这样亲密的东西来说就足够了很明显。