Что вы подразумеваете под "прямоугольным углом"? Вы имеете в виду прямоугольник, стороны которого не перпендикулярны к осям 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
);
}