1

いくつかの点があります。これらの点を円の上に置き、それらの座標を取得する必要があります。

function positionX($numItems,$thisNum){ 
  $alpha = 360/$numItems; // angle between the elements
  $r = 1000; // radius
  $angle = $alpha * $thisNum; // angle for N element
  $x = $r * cos($angle); // X coordinates
  return $x;
}

function positionY($numItems,$thisNum){ 
  $alpha = 360/$numItems; // angle between the elements
  $r = 1000; // radius
  $angle = $alpha * $thisNum; // angle for N element
  $y = $r * sin($angle); // Y coordinates
  return $y;
}

しかし、私のコードは機能しません。これらの関数は奇妙な座標を生成します。

画像の例: http://cl.ly/image/453E2w1Y0w0d

更新:

echo positionX(4,1)."<br>";
echo positionY(4,1)."<br><br>";

echo positionX(4,2)."<br>";
echo positionY(4,2)."<br><br>";

echo positionX(4,3)."<br>";
echo positionY(4,3)."<br><br>";

echo positionX(4,4)."<br>";
echo positionY(4,4)."<br><br>";

4 - すべての要素。1,2,3,4 - 要素の数。

これらのコードは私に結果を与えます:

-448.073616129
893.996663601

-598.460069058
0

984.381950633
-176.045946471

-283.691091487
958.915723414

サークルでは機能しません。

4

2 に答える 2

2

これは、sin() および cos() 関数で放射を使用していないためです。天使を輝きに変換する必要があります。sin() の関数の説明を見ると、arg がラジアンになっていることがわかります。

リマインダー

1° = 2 PI / 360;

編集

コードでエラーが見つからないようです。代わりにこれを試してください

function($radius, $points, $pointToFind) {

 $angle = 360 / $points * 2 * pi(); //angle in radiants

 $x = $radius * cos($angle * $pointToFind);
 $y = $radius * sin($angle * $pointToFind);

}
于 2012-11-23T14:05:38.253 に答える
2

cos() および sin() 関数は、引数を度ではなくラジアンで期待します。

deg2rad()関数を使用して変換します

編集

コード:

function positionX($numItems,$thisNum){
  $alpha = 360/$numItems; // angle between the elements
  $r = 1000; // radius
  $angle = $alpha * $thisNum; // angle for N element
  $x = $r * cos(deg2rad($angle)); // X coordinates
  return $x;
}

function positionY($numItems,$thisNum){
  $alpha = 360/$numItems; // angle between the elements
  $r = 1000; // radius
  $angle = $alpha * $thisNum; // angle for N element
  $y = $r * sin(deg2rad($angle)); // Y coordinates
  return $y;
}

echo round(positionX(4,1))."<br>";
echo round(positionY(4,1))."<br><br>";

echo round(positionX(4,2))."<br>";
echo round(positionY(4,2))."<br><br>";

echo round(positionX(4,3))."<br>";
echo round(positionY(4,3))."<br><br>";

echo round(positionX(4,4))."<br>";
echo round(positionY(4,4))."<br><br>";

結果:

0
1000

-1000
0

-0
-1000

1000
-0
于 2012-11-23T14:05:41.593 に答える