为什么这会摇晃?

时间:2014-08-08 01:15:49

标签: processing

测试处理2.2.1& OS X上的3.0a2。

我在下面调整的代码可能看起来很熟悉,这是Imgur现在用作加载动画的内容。它发布在OpenProcessing.org上,我已经能够在Processing中使用它,但是弧线一直在摇摆(1像素内的相对移动)。我是Processing的新手,我在草图中看不到可能导致这种情况的任何内容,它在ProcessingJS中运行时没有问题(尽管CPU利用率非常高)。

int num = 6;

float step, spacing, theta, angle, startPosition;

void setup() {
  frameRate( 60 );
  size( 60, 60 );
  strokeWeight( 3 );
  noFill();
  stroke( 51, 51, 51 );
  step = 11;
  startPosition = -( PI / 2 );
}

void draw() {
  background( 255, 255, 255, 0 );
  translate( width / 2, height / 2 );
  for ( int i = 0; i < num; i++ ) {
    spacing = i * step;
    angle = ( theta + ( ( PI / 4 / num ) * i ) ) % PI;
    float arcEnd = map( sin( angle ), -1, 1, -TWO_PI, TWO_PI );
    if ( angle <= ( PI / 2 )  ) {
      arc( 0, 0, spacing, spacing, 0 + startPosition , arcEnd + startPosition  );
    }
    else {
      arc( 0, 0, spacing, spacing, TWO_PI - arcEnd + startPosition , TWO_PI + startPosition  );
    }
  }
  arc( 0, 0, 1, 1, 0, TWO_PI );
  theta += .02;
}

如果有帮助,我会尝试将其导出为动画GIF。我尝试使用ProcessingJS和jsgif这样做,但遇到了一些障碍。我可以使用gifAnimation将它导出到Processing中。

更新

看起来我跟hint( ENABLE_STROKE_PURE );一起使用,strokeCap( SQUARE );内的setup()进行了清理。它看起来与原版看起来不一样,但我确实喜欢直边。有时候当你妥协时,结果甚至会超过理想的#34;溶液

1 个答案:

答案 0 :(得分:4)

我在OS X上看到了2.2.1的问题,并在hint(ENABLE_STROKE_PURE)中调用setup()为我修复了它。但是,我找不到这个电话的好文件;它只是在这里和那里被提及的东西。

至于根本原因,如果我绝对不得不推测,我猜想Processing的Java渲染器使用带有少量控制点的样条曲线近似圆弧。控制点在端点之间间隔开,因此端点移动,近似中的凸起也移动。对于单个帧,近似可能足够好,但动画使得凸起明显。设置ENABLE_STROKE_PURE可能会增加控制点的数量,或者它可能会强制Processing在其构建的基础图形库中使用更昂贵的圆弧基元。但是,这只是一个猜测,为什么绘图环境可能有像你看到的那样的bug。我没有阅读Processing的源代码来验证猜测。