2013-05-31 44 views
0

我的東西完全被卡住,我認爲是比較簡單的解決:PHP GD基本矩形偏移的數學

在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); 

$間隙= 2; $ origin_x & origin_y =我開始從中畫框的地方。

此時的輸出在水平軸上是很好的分隔框,但垂直方向是相互碰撞/合併在一起。

任何幫助顯然非常感謝 - 撕裂頭髮在這。 謝謝

回答

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; 
     } 
    } 
} 
+0

關於亂碼的完美和非常好的一點 - 我不認爲這有助於所有! – Paul

1

您正在水平添加間隙,但您也必須垂直添加它。

一個簡單的解決方法是減去矩形的高度差距填寫:

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

爲了記錄 - 這個完美的作品,但我更喜歡其他的答案,因爲它確實強調多麼嚴重錯了,我是這樣做 - 我還是謝謝你 – Paul

+0

真,結構良好的代碼,使錯誤更容易被發現和糾正。 – Joni