如何用php获取圆上几个点的坐标

时间:2012-11-23 14:00:29

标签: php

我有几点意见。我需要将这些点放在一个圆上并得到它们的坐标。

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

UPD:

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

在圆圈上它不起作用。

2 个答案:

答案 0 :(得分:2)

那是因为你没有在sin()和cos()函数中使用radiants。你需要将天使转换为辐射。看看sin()的function description,你会发现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);

}

答案 1 :(得分:2)

cos()和sin()函数期望以弧度为单位的参数,而不是度数。

使用deg2rad()功能转换

修改

CODE:

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