【问题标题】:Smoothing pixel-by-pixel drawing in Processing在处理中平滑逐像素绘图
【发布时间】:2016-03-03 09:19:44
【问题描述】:

我今天学习了Processing,并编写了一个程序来生成双缝干涉图案。在稍微调整一下这些值之后,它就可以工作了,但是生成的模式比其他一些程序中可能的模式更模糊。截图如下:

如您所见,边缘并不像我认为的那样光滑。我希望它们看起来像 thisthis

这是我的代码:

// All quantities in mm

float slit_separation = 0.005;
float screen_dist = 50;
float wavelength = 5e-4f;

PVector slit1, slit2;

float scale = 1e+1f;

void setup() {
  size(500, 500);
  colorMode(HSB, 360, 100, 1);
  noLoop();
  background(255);

  slit_separation *= scale;
  screen_dist *= scale;
  wavelength *= scale;

  slit1 = new PVector(-slit_separation / 2, 0, -screen_dist);
  slit2 = new PVector(slit_separation / 2, 0, -screen_dist);
}

void draw() {
  translate(width / 2, height / 2);
  for (float x = -width / 2; x < width / 2; x++) {
    for (float y = -height / 2; y < height / 2; y++) {
      PVector pos = new PVector(x, y, 0);
      float path_diff = abs(PVector.sub(slit1, pos).mag() - PVector.sub(slit2, pos).mag());
      float parameter = map(path_diff % wavelength, 0, wavelength, 0, 2 * PI);
      stroke(100, 100, pow(cos(parameter), 2));
      point(x, y);
    }
  }
}

我的代码在数学上是正确的,所以我想知道我在将物理值转换为屏幕上的像素时是否有问题。

【问题讨论】:

    标签: graphics drawing processing


    【解决方案1】:

    我不完全确定你在问什么——你到底希望它是什么样子?是否可以将其缩小为行为不端的一行而不是嵌套的 for 循环?

    但只是猜测您在说什么:请记住,处理默认启用抗锯齿。要禁用它,您必须调用noSmooth() 函数。您可以在 setup() 函数中调用它:

    void setup() {
      size(500, 500);
      noSmooth();
      //rest of your code
    

    如果你将它们并排比较,那就很明显了:

    如果这不是您在谈论的内容,请发布一两行的MCVE,而不是嵌套的 for 循环。包括一个你所期望的和你得到的东西的模型也会很有帮助。祝你好运!

    【讨论】:

    • 感谢您尝试回答。我希望明暗条纹之间的过渡更平滑,就像抖动的渐变一样,这将是预期的结果。不幸的是,问题不能缩小到特定的代码行,但如果我猜的话,我会将注意力集中在最后三行。让我用预期的结果更新我的问题。
    • @duci9y 当我说“线”时,我指的不是“代码行”——我指的是单条画线。在你的情况下,也许是一个绘制点?
    • 我不确定画一条线或一个点是否会使问题变得明显,因为只有在绘制更大的区域时问题才会明显。而且我相信我的代码是一个 MCVE,嵌套的 for 循环不会降低可读性/再现性,并且是程序运行所必需的。
    • @duci9y 祝你好运,我只是不确定你在问什么。这就是为什么我要一个更小的例子。希望有人更熟悉您的要求。
    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2014-05-07
    • 2016-12-18
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多