如何在圆半径内获得随机x和y坐标?

时间:2016-06-21 13:22:00

标签: php math

我想我会使用rand()来获取0到20000之间的数字两次,以获得随机的x和y坐标。这有效,但它给了我一个正方形内的随机坐标。

我真正需要的是圆圈内的坐标。如何将随机x / y限制在半径为20,000的圆圈内?

我在网上尝试了一些示例代码,但其中大部分代码似乎是用于计算领域并找到球体上两点之间的距离而且我不足以将这些代码应用于我只是选择随机圆(圆)半径内的坐标。

非常感谢任何帮助。

3 个答案:

答案 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);

GD中的奖金实施:

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