旋转后渲染功能时的间隙

时间:2011-10-02 21:13:20

标签: rendering rotation

我正在渲染一个正弦函数,它在角度为0时呈现精细,但在旋转时会有间隙。见图:

45度:

enter image description here

0°:

enter image description here

使用PHP生成值。每个方块都从PHP生成的矩阵中获取其状态。

for ($i = 4; $i < 125; $i++) {
    $angle = deg2rad(0);
    $x1 = $i;
    $y1 = round(8*sin($i/8),0)+50;

    $x = round($x1*cos($angle) - $y1*sin($angle),0);

    $y = round($x1*sin($angle) + $y1*cos($angle),0);

    if (($x > 1 and $x < 120) and ($y > 1 and $y < 120)){

        $this->mapArray[$x][$y]->set_value(1); // square rendered.
    }
}

我认为它与圆形有关,但我没有使用圆角也有相同的结果。有什么提示吗?

2 个答案:

答案 0 :(得分:1)

你是渲染点,你希望它是曲线。你用121点近似曲线,并且有一些是因为它的长度大于121像素。

你需要做的是从最后一点到下一点绘制线条。它仍然是近似的,但你不会有差距。

答案 1 :(得分:1)

这只是一个想法,需要进一步阐述。假设曲线是从左到右,从上到下绘制的。我们可以记住设置的最后一个像素(x0,y0)。当绘制像素(x,y)时,在(x,y)之前没有间隙,如果(x0,y0)是像素(x-1,y),(x,y-1)之一,(x- 1,y-1)。如果不是这种情况,则(x0,y0)和(x,y)之间存在间隙。可以通过插值填充该间隙。如果只缺少一个像素,则可以通过案例分析进行设置。如果像素(x0,y0)和(x,y)之间的距离较大,则可以使用Bresenham's algorithm在它们之间绘制插值线。