我正在渲染一个正弦函数,它在角度为0时呈现精细,但在旋转时会有间隙。见图:
45度:
0°:
使用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.
}
}
我认为它与圆形有关,但我没有使用圆角也有相同的结果。有什么提示吗?
答案 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在它们之间绘制插值线。