0

私は、解決するのが比較的簡単であると信じている何かに完全に行き詰まっています:

PHPでは、画像の上に塗りつぶされた長方形を描いています(GDを使用)-コードで指定されているそれぞれの間に小さなギャップが必要です(ギャップは各ボックスで同じです)-私がするまでループします行の長方形の最大数(最大列など)に達しました-水平ギャップオフセットを管理しましたが、私の人生では垂直ギャップの計算を行うことができません。

ここに私のコードがあります: http://pastebin.com/MHUqi0tG

しかし具体的には、PHP は長方形を作成するために 2 つの座標セットを受け入れます。2 つは左上 (x と y) で、2 つは右下 (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);

$ギャップ = 2; $origin_x & origin_y = ボックスの描画を開始する場所。

現時点での出力は、水平軸上では適切に分離されたボックスですが、垂直方向には互いに衝突/マージしています。

どんな助けも明らかに大歓迎です-これで髪を引き裂きます。ありがとう

4

2 に答える 2

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 に答える