【问题标题】:Processing: function rotate doesn't work properly处理:函数rotate不能正常工作
【发布时间】:2017-08-23 08:10:37
【问题描述】:

您好,我正在尝试仅使用 line() 和 rotate() 函数在处理过程中绘制一个正方形,但我可能在使用 rotate 函数时遇到了一些问题。 这是我绘制函数的代码:

void draw(){
   background(0);
   stroke(255);
   for(int i = 0; i < 4; i++){
       line(0, 0, GRID_SIZE, 0);
       translate(GRID_SIZE, 0);
       rotate(HALF_PI);
   }
}

结果:

为什么即使我旋转了 PI/2,底部和左侧的线也会倾斜? 提前致谢!

【问题讨论】:

    标签: processing


    【解决方案1】:

    这几乎是预期的行为。

    请记住,在“现实生活”中,像 PI 和 PI/2 这样的数字是无限长的。计算机无法容纳无限长的数字,因此变量HALF_PI 拥有一个近似值。因此,当您旋转HALF_PI 时,实际上每次旋转时都会出现一点“错误”。该错误累加起来,因此您会得到与您所看到的一样的工件。

    像素是整数,而不是float 值,这使情况变得更糟。因此,如果您有一个 Y 位置为 20.0000001 的像素和另一个 Y 位置为 19.9999999 的像素,它们将分别在 2019 处渲染,因此您将看到一个“大" 尽管实际差异很小,但它们之间的差异(1 个完整像素)。

    如果您想让线条看起来更方正,只需使用 Processing 提供的 rect() 函数即可。

    【讨论】:

    • 谢谢伙计,我根本没想到!实际上我是这样画一个正方形的,因为我不知道我是否必须画出每一边,所以因为我不想打电话给line() 四次我想到了那个算法。无论如何感谢您的解释!
    • @EnricoMarconi 您发布的代码确实调用了line() 四次。听起来就像直接调用line() 而不进行任何轮换正是您应该做的。
    猜你喜欢
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-06-17
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多