【发布时间】:2016-01-26 22:04:28
【问题描述】:
我需要在网格上的圆圈内绘制图像。
见下图网格/圆。
绿色圆圈是容器,不要在外面绘制图像。
请参见下面的示例。紫色方块 = 未放置,黄色方块 = 放置(因为它们在绿色圆圈内,它们会适合)。
彩色方块代表将要放置的图像。
正方形为 50x50。而网格图块是 100x100。
目前,我的程序将生成圆、网格并在每个网格图块内标记 X,无论它是否在容器圆内。
请参阅下面的程序工作和放置图像的示例。
我怎样才能确定图像是否适合圆圈内的图块。
图块不必 100% 位于圆圈内。见第二张图。查看中心底部的瓷砖。磁贴略微突出了圆圈,但 50x50 的图像仍可放入磁贴内。
public function placeImages()
{
$boxes = 5;
$circumference = 700;
$width = ($circumference / $boxes);
$this->grid = array(
array(
'width' =>
array(
'x1' => 0,
'y1' => 0,
'x2' => 700,
'y2' => 0,
),
'height' =>
array(
'x1' => 0,
'y1' => 0,
'x2' => 0,
'y2' => 700,
),
),
array(
'width' =>
array(
'x1' => 0,
'y1' => 140,
'x2' => 700,
'y2' => 140,
),
'height' =>
array(
'x1' => 140,
'y1' => 0,
'x2' => 140,
'y2' => 700,
),
),
array(
'width' =>
array(
'x1' => 0,
'y1' => 280,
'x2' => 700,
'y2' => 280,
),
'height' =>
array(
'x1' => 280,
'y1' => 0,
'x2' => 280,
'y2' => 700,
),
),
array(
'width' =>
array(
'x1' => 0,
'y1' => 420,
'x2' => 700,
'y2' => 420,
),
'height' =>
array(
'x1' => 420,
'y1' => 0,
'x2' => 420,
'y2' => 700,
),
),
array(
'width' =>
array(
'x1' => 0,
'y1' => 560,
'x2' => 700,
'y2' => 560,
),
'height' =>
array(
'x1' => 560,
'y1' => 0,
'x2' => 560,
'y2' => 700,
),
),
array(
'width' =>
array(
'x1' => 0,
'y1' => 700,
'x2' => 700,
'y2' => 700,
),
'height' =>
array(
'x1' => 700,
'y1' => 0,
'x2' => 700,
'y2' => 700,
),
),
);
//This removes the grid item for the bottom and right lines, not needed within the loop.
array_pop($this->grid);
foreach ($this->grid as $grid) {
$x = $grid['width']['x1'];
$y = $grid['width']['y1'];
for ($j = 0; $j < $boxes; $j++) {
$this->drawLine($x, $y, ($x + $width), ($y + $width), '#ff3200');
$this->drawLine(($x + $width), $y, $x, ($y + $width), '#ff3200');
//50 × 50 = Image size
$imageX = floor($x + ($width - 50) / 2);
$imageY = floor($y + ($width - 50) / 2);;
$image = Image::make(base_path('test.png'))->opacity(50);
$this->image->insert($image, 'top-left', $imageX, $imageY);
$x = $x + $width;
}
}
}
上面的代码是我的程序的简化版本。网格数组是动态生成的,但我认为这对这个问题并不重要。
【问题讨论】:
-
我看到你更新,玩边距。创建一个变量$margin,并重新计算:$width=$width-$margin。玩到你满意为止
标签: php math collision-detection