PHP GD基本矩形偏移数学

时间:2013-05-31 13:57:30

标签: php math coordinates rectangles

我完全坚持我认为相对简单易解的事情:

在PHP中,我在图像上绘制填充的矩形(使用GD) - 我希望它们之间有一个小间隙 - 在代码中指定(每个框的间隙相同) - 我循环直到我已经达到一行中最大的矩形数量(例如最大列数) - 并且我已经管理了水平间隙偏移但是在我的生命中我可以计算出垂直间隙数学。< / p>

这是我的代码中令人讨厌的整体: 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&amp; origin_y =我开始绘制框的地方。

此刻的输出是水平轴上的分隔很好的框,但是它们在垂直方向相互撞击/合并在一起。

任何帮助显然都非常感激 - 撕裂头发。 感谢

2 个答案:

答案 0 :(得分:1)

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

一个简单的修正方法是从你填充的矩形的高度中减去间隙:

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

答案 1 :(得分: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;
        }
    }
}