我想我会使用rand()来获取0到20000之间的数字两次,以获得随机的x和y坐标。这有效,但它给了我一个正方形内的随机坐标。
我真正需要的是圆圈内的坐标。如何将随机x / y限制在半径为20,000的圆圈内?
我在网上尝试了一些示例代码,但其中大部分代码似乎是用于计算领域并找到球体上两点之间的距离而且我不足以将这些代码应用于我只是选择随机圆(圆)半径内的坐标。
非常感谢任何帮助。
答案 0 :(得分:3)
要在半径R的圆内生成均匀分布的随机点,您可以使用next approach:
a = Random //range 0..1
b = Random
theta = b * 2 * Pi
rr = R * Sqrt(a)
x = rr * Cos(theta)
y = rr * Sin(theta)
答案 1 :(得分:2)
$radius = 250;
$image = imagecreatetruecolor((2 * $radius) + 1, (2 * $radius) + 1);
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $white);
imageellipse($image, $radius, $radius, $radius * 2, $radius * 2, $black);
for ($a = 0; $a < 1000; $a++)
{
$point = getPoint($radius);
imagesetpixel($image, $point['x'], $point['y'], $black);
}
// Output the image.
header("Content-type: image/png");
imagepng($image);
...
scripts{
...
"js-vendor-concat": "concat-cli -f src/js/vendor/**/*.js -o dist/js/vendors.js",
...
}
....
"devDependencies": {
...
"concat-cli": "^4.0.0"
...
}
答案 2 :(得分:1)
您可以在-20,000到20,000之间获得随机x
,并使用毕达哥拉斯定律获得正y
值。然后你随机做0或1来使该值为正或负。
一个例子:
$r = 20000;
$x = rand(-$r, $r);
$y = rand(0, 1) ? -sqrt(pow($r, 2) - pow($x, 2)) : sqrt(pow($r, 2) - pow($x, 2));
var_dump($x, $y);
我不确定这些数字是如何准确分配的,但听起来是正确的。
编辑:谢谢@andand,当然这只会计算圆圈上的点数。要获取圆圈中任意位置的点,计算出的y
值是最大值:
$r = 20000;
$x = rand(-$r, $r);
$yMax = sqrt(pow($r, 2) - pow($x, 2));
$y = rand(-$yMax, $yMax);
var_dump($x, $y);