2012-05-14 8 views
2

ある幅と高さを持つ矩形にN点を均等に配分する必要があります。均等にN点を矩形に配置する

Ex。どのように私は、任意のN点、幅と高さの組み合わせのためにこれを一般化することができます

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

:10×10箱と100ポイント与えられ、ポイントは以下のように設定しますか?

注:これは完璧である必要はありませんが、近いうちにこれをちょっとランダム化します(X軸とY軸上の+/- xピクセルをこの「開始点」から移動します) 、最後に無作為に追加するために残った数点を残しておけばいいかもしれません。

私はこのような何か(quasirandom)を探しています:

quasirandom

+0

私はVoronoi Diagram/Delaunay Triangulationを生成するPHPスクリプトでこれをやっています。私は、図を計算せずにロイドリラクゼーションを何回も繰り返さなくても、画像に沿ってポイントを配布するより速い方法が必要でした。 –

答えて

4

誰がこれを達成するために探している場合、私はここにどのようにだ、これを作るために管理:あなたは計算

ファースト矩形の総面積を計算すると、各ポイントが使用する領域を計算し、独自のpointWidthとpointHeight(長さ)を計算し、次に繰り返してcolsとrowsを作成します。

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

Iはまた、ドットの位置を少しランダム化するために必要な、私の代わりに上記のコードの「の」2でこれを置くことによってこれを行いました。

{ 
    $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. 
} 

これが誰かを助けてくれることを願っています。

関連する問題