2011-10-02 98 views
0

我渲染了一个正弦函数,该函数在旋转角度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. 
    } 
} 

我认为这与轮次有关,但我没有使用舍入,也有相同的结果。有小费吗?

回答

1

你正在渲染点,你希望它是曲线。你用121个点来逼近曲线,并且因为它的长度大于121个像素,所以有许多孔。

你需要做的是从最后一点画线。它仍然是近似值,但你不会有差距。

1

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