geometry — функция PHP для рисования нескольких восьмиугольников с центром в одной и той же позиции

Я работаю над веб-приложением на основе PHP GD, и мне нужна помощь с рисованием полигонов.

У меня есть функция, которая может рисовать n-сторонний многоугольник. В этом случае мне просто интересно рисовать восьмиугольники.

Упрощенная функция выглядит так:

function drawoctagon($ourimage,$xpoint,$ypoint,$radius,$color){

$sides= 8;
$points = array();
for ($i = 1; $i <= $sides; $i++) {
$points[] = round( $radius * cos($i*2 * pi() / $sides) + $radius +$xpoint);  // x
$points[] = round( $radius * sin($i*2 * pi() / $sides) + $radius  + $ypoint);  // y
}

imagefilledpolygon($ourimage, $points, $sides, $color);

}

//////////////////////////

Я называю эту функцию выше таким образом:

drawoctagon($png1,$xpoint,$ypoint,$radius,$linecolor44);

Но при условии, что я выполню эту строку выше 3 раз, при всех различных радиусах, восьмиугольники не концентрически … они расположены рядом и т. Д.

При создании массива $ points я добавил + $ xpoint и $ ypoint соответственно, чтобы переместить нарисованный восьмиугольник из верхнего левого угла, где он был создан.

Я надеюсь, что объяснил это правильно … но в основном мой вопрос:
как мне переписать эту функцию, чтобы нарисовать КОНЦЕНТРИЧЕСКИЕ восьмиугольники, чтобы, если она вызывалась несколько раз с одной и той же точкой x и точкой y (как центры многоугольника), несмотря на изменение радиуса, она будет создавать восьмиугольники с центром в одной и той же точке.

Дополнительные очки для вас, если вы оставляете функцию все еще способной к настройке для любого n-стороннего многоугольника.

Большое спасибо!

1

Решение

Центр вашего восьмиугольника с вашей функцией

  x=$radius+ $xpoint
y=$radius+$ypoint

Вы можете попытаться удалить радиус радиуса из выражения центра

   for ($i = 1; $i <= $sides; $i++) {
$points[] = round( $radius * cos($i*2 * pi() / $sides) + $xpoint);  // x
$points[] = round( $radius * sin($i*2 * pi() / $sides) + $ypoint);  // y
}

и введите то же самое $xpoint а также $ypoint в каждом полигоне, который вы создаете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]