@Zorgios

Как средствами PHP нарисовать дугу для SVG файла?

Для отрисовки простых объектов из линий и окружностей/эллипсов, использую библиотеку php-svg

Сейчас столкнулся с проблемой отрисовки дуги (части окружности).
Например, требуется нарисовать половину окружности, или четверть (зная радиус окружности).
Сейчас для отрисовки линий c помощью библиотеки использую такой код:
$image = new SVG(10mm','10mm');
$doc = $image->getDocument();
$square = new SVGLine('0mm', '0mm', '5mm', '5mm'); // x0 y0 x1 y1
$square->setStyle('stroke', '#FF0000'); //цвет
$doc->addChild($square);
header('Content-Type: image/svg+xml');
echo $image;


Что можно придумать с половинами окружностей? Как можно обрезать окружности до определенной дуги?
Не обязательно средствами библиотеки. Можно и классическим PHP
  • Вопрос задан
  • 219 просмотров
Решения вопроса 2
Vamp
@Vamp
Проще всего нарисовать дугу через элемент path.

$image = new SVG('100mm','100mm');
$doc = $image->getDocument();
$square = new SVGLine('0mm', '0mm', '55mm', '55mm'); // x0 y0 x1 y1
$square->setStyle('stroke', '#FF0000'); //цвет
$doc->addChild($square);

$arc = new SVGPath('m 40,40 A 30,30,0,0,1,150,150');
$arc->setStyle('stroke', '#FF0000');
$doc->addChild($arc);

header('Content-Type: image/svg+xml');
echo $image;


Нужно немного изучить формат path. Он не сложный.

m 40,40 A 30,30,0,0,1,150,150

m - это команда move. Устанавливает "кисть" в указанную позицию. Далее команда A - arc (дуга). Её формат несколько сложнее:

30,30 - радиус дуги по осям x и y
0 - угол поворота дуги вокруг оси x
0 - должна ли дуга быть больше 180 градусов или нет
1 - в какую сторону рисовать дугу - по часовой или против
150,150 - координаты конца дуги
Ответ написан
Adamos
@Adamos
SVG - весьма простой текстовый формат. Библиотеки для него в случае, когда надо нарисовать что-то нетривиальное, только мешают. Почитайте документацию по формату - и там найдете все, что вам нужно.
Разве что иногда придется приложить немного математики.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы