4

特定の幅と高さの長方形にN個のポイントを均等に分散させる必要があります。

元。10x10ボックスと100ポイントが与えられた場合、ポイントは次のように設定されます。

(1,1)  (1,2)  (1,3)  (1,4)  (1,5)  (1,6)  (1,7)  (1,8)  (1,9)  (1,10)
(2,1)  (2,2)  (2,3)  (2,4)  (2,5)  (2,6)  (2,7)  (2,8)  (2,9)  (2,10)
(3,1)  (3,2)  (3,3)  (3,4)  (3,5)  (3,6)  (3,7)  (3,8)  (3,9)  (3,10)
...
...

Nポイント、幅、高さの組み合わせに対してこれを一般化するにはどうすればよいですか?

注:完全である必要はありませんが、近いですが、とにかくこれを少しランダム化します(X軸とY軸のこの「開始点」からポイント+/- xピクセルを移動します)。最後にランダムに追加するいくつかのポイントの残りは問題ないかもしれません。

私はこのようなものを探しています(準ランダム):

準ランダム

4

1 に答える 1

8

他の誰かがこれを達成しようとしているなら、私はこれをなんとか作ることができました:ここに方法があります:

最初に長方形の総面積を計算し、次にすべてのポイントが使用する面積を計算し、次にそれ自体のpointWidthとpointHeight(長さ)を計算し、次に列と行を作成するために繰り返します。これが例です。

PHPコード:

$width = 800;
$height = 300;
$nPoints = 50;

$totalArea = $width*$height;
$pointArea = $totalArea/$nPoints;
$length = sqrt($pointArea);

$im = imagecreatetruecolor($width,$height);
$red = imagecolorallocate($im,255,0,0);

for($i=$length/2; $i<$width; $i+=$length)
{
    for($j=$length/2; $j<$height; $j+=$length)
    {
        imageellipse($im,$i,$j,5,5,$im,$red);
    }
}

また、ドットの位置を少しランダム化する必要がありました。これは、上記のコードの代わりに2番目の「for」に配置することで作成しました。

{
    $x = $i+((rand(0,$length)-$length/2)*$rand);
    $y = $j+((rand(0,$length)-$length/2)*$rand);
    imageellipse($im,$x,$y,5,5,$im,$red);

    // $rand is a parameter of the function, which can take a value higher than 0 when using something like 0.001 the points are "NOT RANDOM", while a value of 1 makes the distribution of the points look random but well distributed, high values produced results unwanted for me, but might be useful for other applications.
}

これが誰かに役立つことを願っています。

于 2012-05-15T00:09:06.347 に答える