Есть ли простой способ создать угловой прямоугольник в php? - PullRequest
0 голосов
/ 14 января 2012

Интересно, есть ли довольно простой способ нарисовать угловой прямоугольник, используя GD в php?
Я знаю, что могу использовать функцию imagefilledpolygon, но это немного сложно, учитывая, что вы должны вычислить все точки вручную.

Я думаю, что преобразованная версия imagefilledrectangle будет выглядеть так:

imagefilledrectangle($img,$centerX,$centerY,$angle,$color);

Где $centerX и $centerY будут координатами центральной точки прямоугольника.
иличто-нибудь похожее на это.

1 Ответ

2 голосов
/ 14 января 2012

Что вы подразумеваете под "прямоугольным углом"? Вы имеете в виду прямоугольник, стороны которого не перпендикулярны к осям x и y изображения?

Для использования функции imagefilledrectangle() необходимо указать координаты двух точек, которые определяют протяженность прямоугольника. Я бы подумал, что если вы хотите нарисовать прямоугольник, повернутый на угол, то вы, вероятно, хотите предоставить

  • ширина и высота прямоугольника
  • центр прямоугольника (или другая заданная точка, похожая на выделенную вершину прямоугольника)
  • угол, через который проходит прямоугольник должен быть повернут.
Вы упомянули каждый из них, кроме ширины и высоты.

Предположим, я хотел создать функцию imagefilledrotatedrectangle($img, $centerX, $centerY, $width, $height, $angle, $color). Возможно, я бы вычислил 4 вершины прямоугольника, а затем вызвал бы imagefilledpolygon(), передавая эти 4 точки. В псевдокоде:

(Давайте предположим, что мои вершины помечены как 1, 2, 3 и 4, вращаясь по часовой стрелке. Я могу представить их как пары целых чисел, получив целые числа $x1, $y1, $x2, $y2 , $x3, $y3, $x4 и $y4.)

function imagefilledrotatedrectangle( $img,
                                      $centerX, $centerY,
                                      $width, $height,
                                      $angle,
                                      $color
                                      ) {
    // First calculate $x1 and $y1. You may want to apply
    // round() to the results of the calculations.
    $x1 = (-$width  * cos($angle) / 2) + $centerX;
    $y1 = (-$height * sin($angle) / 2) + $centerY;
    // Then calculate $x2, $y2, $x4 and $y4 using similar formulae. (Not shown)
    // To calculate $x3 and $y3, you can use similar formulae again, *or*
    // if you are using round() to obtain integer points, you should probably
    // calculate the vectors ($x1, $y1) -> ($x2, $y2) and ($x1, $y1) -> ($x3, $y3)
    // and add them both to ($x1, $y1) (so that you do not occasionally obtain
    // a wonky rectangle as a result of rounding error). (Not shown)
    imagefilledpolygon( $img,
                        array($x1, $y1, $x2, $y2, $x3, $y3, $x4, $y4),
                        4,
                        $color
                        );
}
...