У меня есть несколько моментов. Мне нужно наложить эти точки на круг и получить их координаты.
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
На круге это не работает.
Функции 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
Это потому, что вы не используете радианты в своих функциях 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); }