php - 如何在 PHP 生成的图片中定义一个圆形区域来设置随机坐标?
问题描述
我正在尝试在 PHP 生成的图片中的随机位置绘制圆圈,从图像的中心点开始并包含在“N”像素半径中。
我知道如何在方形边界中进行操作(我也很清楚如何以菱形进行操作),但是圆形的方法对我来说有点难以理解。
这是我到目前为止的代码。图像为 600*600px,我在 300*300px 的正方形区域中水平和垂直居中生成 100 个 25*25px 的白色圆圈。
$w = $h = 600;
$img = imagecreatetruecolor($w,$h);
$cl = imagecolorallocatealpha($img,255,255,255,0);
for ($i=0;$i<=100;$i++){ // GENERATE 100 CIRCLES
$x = rand(150,450);
$y = rand(150,450);
imagefilledellipse($img, $x, $y, 25, 25, $cl);
}
header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
在圆形边界中生成这些圆圈的最佳方法是什么?
因此,例如,如果 $x=155 它不可能在 $y=155,或者如果 $x=445 它不可能是 $y=445
感谢帮助 !
编辑这是带有极坐标的新代码
$w = $h = 600;
$img = imagecreatetruecolor($w,$h);
$cl = imagecolorallocatealpha($img,255,255,255,0);
for ($i=0;$i<=100;$i++){ // GENERATE 100 CIRCLES
$r = rand(25,(300-25));
$a = rand(0,360);
$x = $r * cos(deg2rad($a));
$y = $r * sin(deg2rad($a));
imagefilledellipse($img, $x, $y, 25, 25, $cl);
}
header('Content-Type: image/jpeg');
imagejpeg($img);
imagedestroy($img);
解决方案
您可以随机化极坐标,而不是试图找到 (x,y) 坐标:
- 0° 到 360° 之间的角度
- 半径在 25 和 300-25 之间:有了这些限制,您可以确定您的小圆圈将始终位于圆圈边界内。
然后通过标准公式转换这些极坐标
x = r * cos(t)
y = r * sin(t)
推荐阅读
- ruby-on-rails - 如何在每次循环迭代中创建一个新的 JSON 对象
- c++ - 如何将 X509 证书转换为 C++ 中的公钥字符串?
- javascript - Redux 道具在 Redux DevTools 中收到,但在 React 组件中没有
- c++ - C++ 前向声明在 Pimple 成语中的类之前或成员之前?
- excel - 删除空白单元格
- winapi - 如何使用 ShellExecuteW 运行带有参数的 python 脚本?
- ios - 标签栏项目作为按钮
- javascript - 打开Popup,触发JS
- wordpress - 当 FacetWP 取消选中时重新加载查询循环
- javascript - Vanilla JavaScript 更改 API 端点基于