0

我完全被我认为解决起来相对简单的事情所困扰:

在PHP中,我在图像顶部绘制填充矩形(使用GD)-我希望它们之间有一个小间隙-在代码中指定(每个框的间隙相同)-我循环直到我已经在一行上达到最大数量的矩形(例如最大列) - 我已经管理了水平间隙偏移,但对于我的一生来说,无法计算出垂直间隙数学。

这是我的完整代码:http: //pastebin.com/MHUqi0tG

但特别是 PHP 接受两组坐标来制作一个矩形 - 左上角(x 和 y)两个坐标,右下角(x 和 y)两个坐标。

这是我的代码,特别是:

        $left_wall_of_box_x = ( $current_col * $box_size ) + $origin_x ;


        if($last_block_x != $origin_x){

            $left_wall_of_box_x = $last_block_x + $gap;

        }

        /*verticals coord 1*/
        $left_wall_of_box_y = ( $current_row * $box_size ) + $origin_y;




        $right_wall_x = $left_wall_of_box_x + $box_size ;
        $right_wall_y = $left_wall_of_box_y + $box_size;





        imagefilledrectangle($im, $left_wall_of_box_x, $left_wall_of_box_y, $right_wall_x, $right_wall_y, $red);

$gap = 2; $origin_x & origin_y = 我开始画盒子的地方。

目前的输出是在水平轴上很好地分开的盒子,但在垂直方向上它们相互碰撞/合并在一起。

任何帮助显然都非常感谢 - 在这件事上扯掉头发。谢谢

4

2 回答 2

1

您正在水平添加一个间隙,但您还必须垂直添加它。

一个简单的解决方法是从您填充的矩形的高度中减去间隙:

imagefilledrectangle($im, $left_wall_of_box_x, $left_wall_of_box_y, 
                     $right_wall_x, $right_wall_y - gap, $red);
于 2013-05-31T15:11:51.047 回答
1

错误在这里:

$left_wall_of_box_y = ( $current_row * $box_size ) + $origin_y;

应该:

$left_wall_of_box_y = ( $current_row * ($box_size + $gap_vertical)) + $origin_y;

但是您的代码很脆弱且难以阅读。它很脆弱,因为您让您的计算更多地依赖于代表微妙不同事物的变量,并且随着变量的增多,您更难以适应 - 这就是您没有发现错误的部分原因。

所以,而不是这样做:

while($x <= $total_boxes_to_draw)
{                           
    if($current_col >= $cols)
    {
    //reset to start of row
    }
}

像这样写你的代码。

$finished = false;

for ($y=0; ($y<$rows) && ($finished==false) ; $y++) 
{
    $yPosition = $origin_y + $y * ($box_size + $spacing_vertical);
    for ($x=0 ; $x<$cols && ($finished==false) ; $x++) 
    {
        $xPosition = $origin_x + $x * ($box_size + $spacing_horizontal);

        //draw box at $xPosition, $yPosition

        $boxesDrawn++;
        if ($boxesDrawn >= $total_boxes_to_draw){
            $finished = true;
        }
    }
}
于 2013-05-31T15:14:14.150 回答