LINUX.ORG.RU

Создание иллюстраций в MetaPost


0

0

По согласованию редакцией LF выложил вторую часть "Базовые элементы" из цикла статей <<Создание иллюстраций в MetaPost>> в открытый доступ. В тексте описаны необходимые для рисования базовые примитивы.

Там же доступны иходники картинок к уже опубликованным частям. Сборка картинок производится по команде make pics. В качестве базового дистрибутива использовался TeX Live. В случае проблем, вопросов, замечаний и пожеланий координаты в README или в тексте.

>>> Подробности

★★★★★

Проверено: Pi ()

Ответ на: комментарий от anonymous

>А разве Asymptote не рвет MetaPost как тузик?

Мой опыт работы с Asymptote не сравним с MetaPost, поэтому следующее высказывание, естественно, IMHO

Asymptote создавался по образу и подобию MetaPost. Всё, что я видел в Asymptote из улучшений является обычной косметикой. Для части людей (те, кто знает C++) Asymptote может показаться знакомым, но это знакомство примерно того же рода, что и с офтопиком.

Из неизлечимых недостатков Asymptote: он многословен и с ростом опыта скорость набора не увеличивается - нет разумных сокращений по умолчанию, что сплошь и рядом встречаются в META.

В любом случае, если хотите серьёзно работать с/улучшать Asymptote METAFONT/MetaPost следует знать. MetaPost - это очень компактный инструмент. Ну и, естественно, по METAFONT/MetaPost есть очень качественная документация в том числе и написанная ИМ :).

Evgueni ★★★★★
() автор топика

Отличная работа. Полезные статьи.

ip1981 ☆☆
()

Спасибо большое, очень интересно!

McGray ★★
()

Интересно было бы где-нибудь почитать внятное сравнение изобразительных возможностей metapost & svg.

svu ★★★★★
()
Ответ на: комментарий от svu

> Интересно было бы где-нибудь почитать внятное сравнение изобразительных возможностей metapost & svg.

SVG - это XML со всеми вытекающим: писать код руками очень не эффективное занятие. Это формат для перекодирования из одного представления (скажем визуального) в другое (скажем твёрдую копию).

META же - полноценный язык программирования со встроенными для рисования структурами, стабильной реализацией компилятора и полной документацией. Он предназначен именно для работы с ним руками. Хотя есть и GUI прилада над MetaPost.

А сравнивать изобразительные возможности: прямую и там и там нарисовать можно. Это даже и Paint делать умеет. Или имелось в виду что-то другое?

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от svu

1) Svg-это открытый векторный формат графических файлов. Возможности -прямые, кривые, тестовые надписи, заливки и текстуры. SVG пригоден для программирования любыми программными средствами поддерживающими парсеры SVG. Верстка математических символов обеспечивается наличием специальных шрифтов.Получить пригодные для полиграфии изображения из SVG получить проблематично, но можно

2) mеtapost-язык программирвания для создания иллюстраций технического характера-интеграция с TeX - возможность получать математические формулы и графику в пригодном для полиграфии формате.Плюс возможность программировать разные графические эффекты.

obp
()
Ответ на: комментарий от Evgueni

>>>META же - полноценный язык программирования со встроенными для рисования структурами, стабильной реализацией компилятора и полной документацией. Он предназначен именно для работы с ним руками.

Постскрипт тоже полноценный язык программирования, но из этого еще не следует, что на нем обязательно писать вручную. На самом деле совсем не...

geekkoo
()
Ответ на: комментарий от obp

> SVG пригоден для программирования любыми программными средствами поддерживающими парсеры SVG

Во-во. Именно это и имелось в виду. Человек - не парсер SVG :)

> Постскрипт тоже полноценный язык программирования, но из этого еще не следует, что на нем обязательно писать вручную. На самом деле совсем не...

O'k в случае META можно добавить, что он был ориентирован на лёгкость чтения кода именно человеком.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Evgueni

> А сравнивать изобразительные возможности: прямую и там и там нарисовать можно. Это даже и Paint делать умеет. Или имелось в виду что-то другое?

Да, вопрос о другом. Я понимаю, что метапост - это язык программирования. Например, тех же циклов в SVG не сделаешь - надо явно объявлять все элементы отрисовки (хотя, используя xslt можно немного это компенсировать). Мой вопрос о другом. Ну вот отрезок провести можно и там и там. Круг тоже. А вот как насчет прозрачности? По разным типам сопряжений отрезков (угол, закругление)? По работе с заливками (явно заданными или в виде внешних битмап-файлов)? Использование разных цветовых моделей (cmyk/rgb)? Работа с разными типами шрифтов (ttf/postscript/...) и пр. и пр. Аффинные преобразования (и не аффинные). Надеюсь, вопрос понятен?

svu ★★★★★
()
Ответ на: комментарий от Evgueni

> А сравнивать изобразительные возможности: прямую и там и там нарисовать можно. Это даже и Paint делать умеет. Или имелось в виду что-то другое?

Переспрошу за svu:

- сложные градиенты (хотя бы линейные и радиальные) с несколькими опорными точками;
- сложные фигуры, получаемые логическими операциями с контурами (сложение, вычитание, разрез и пр.);
- соединительные линии, автоматически обходящие препятствия и вычисляемые при перемещении объектов.

Ну вот это как минимум :)

AP ★★★★★
()
Ответ на: комментарий от AP

Ну, так далеко моя мысль не залетала, но да, это тоже интересно;)

svu ★★★★★
()
Ответ на: комментарий от AP

>>>сложные градиенты (хотя бы линейные и радиальные) с несколькими опорными точками;

Понятно, не царское это дело по ссылкам не ходить. У Евгения в тексте есть пример спектра.

>>> сложные фигуры, получаемые логическими операциями с контурами (сложение, вычитание, разрез и пр.);

Метапост развивался как продолжение метафонта, придуманного Кнутом для разработки шрифтов. Как вы себе представляете разработку шрифтов без "логических операций с контурами"?

>>>соединительные линии, автоматически обходящие препятствия и вычисляемые при перемещении объектов.

Это либо очень просто, либо очень сложно, в зависимости, что именно имелось ввиду. Трассировку печатных плат на метапосте делать не стоит. Это по поводу "автоматически обходящие препятствия"

geekkoo
()
Ответ на: комментарий от svu

>>>Надеюсь, вопрос понятен?

Метапост, грубо говоря, пакет макросов для постскрипт. Если постскрипт какую-то фичу поддерживает, то она есть в метапосте. Это к вопросу о cmyk/rgb/прозрачности/ttf/type1.

>>По разным типам сопряжений отрезков (угол, закругление)?

ДА!

>>Аффинные преобразования (и не аффинные).

Афинные есть. Не аффинные - это большая экзотика, сопряженная с нехилыми математическими проблемами.

geekkoo
()
Ответ на: комментарий от geekkoo

> Это либо очень просто, либо очень сложно, в зависимости, что именно имелось ввиду.

есть два объекта, связанных соединительной линией. между ними воткнули ещё один объект. соединительная линия должна "обойти" появившийся объект.

AP ★★★★★
()
Ответ на: комментарий от svu

Это совершенно разные технологии и разные возможности.
Например,
1)художник рисут на планшете портрет своего любимого пса.
Далее он в Corel или Inkscape доводит цвета, заливки и прозрачность.
Это всё может быть сохранаено в SVG.
2)Программа строит графики поведения частиц в каком-нибудь приборе.
назовём его синхрфазотрон. Далее из базы данных результатов делается некая визуализация.Это можно сделать с использованием скриптовых языков и xml парсера и получить на выходе тот же svg
3) Дизайнер-рекламщик делает 25 вариант рекламного плаката, при этом у него оьразовывется некая библиотека готовых объектов, пригодных для масштабирования и последующего использования . Это тоже SVG

4) Математический гений придумал новую теорию функционального анализа в 4 мерных пространствах. Делает иллюстрацию для своей докторскоий и ему нужно получить только postscript. При этом формулы у него в 4 этажа,а для переменных он использовал исключительно еврейский алафавит.(Как Гильберт, например любил).Тут ему SVG не поможет. Это как раз для TeX и MetaPost.
5)Доцент решил наконец выпустить книжку по начертательной геометрии для студентов гуманитарного вуза. Иллюстрации все довольно специфические.
Это тоже на SVG геморорройно делать(оси, координаты и т.д.)

obp
()
Ответ на: комментарий от AP

Нет. Задайте вначале расположение объектов и соедините их линиями. Если у вас появился новый объект - измените их расположение и соедините их по-новому. Напомню, что стрелки вы же не ручками рисуете, так что перерисовать картинку с нуля не является чем-то очень сложным ;)

Хотя я согласен, что специализированные трассировщики печатных плат с этой проблемой справятся гораздо лучше ;)

geekkoo
()
Ответ на: комментарий от geekkoo

Ну вот о том и речь, что нужно, как это правильно расписал obp, подбирать под задачу адекватные инструменты :)

AP ★★★★★
()
Ответ на: комментарий от AP

Языки, в этом смысле, инструменты очень гибкие. Так что нельзя исключить, что через некоторое время кто-то не запостит на ЛОРе новость с реализацией трассировщика печатных плат на метапосте ;P

geekkoo
()
Ответ на: комментарий от AP

> есть два объекта, связанных соединительной линией. между ними воткнули ещё один объект. соединительная линия должна "обойти" появившийся объект.

В базовой комплектации нет, но никто не мешает это сделать. Традиционно для простых рисунков проще путь руками указать, причём это можно делать примерно, а кривая сама нарисуется.

По поводу градиентов: поддержка цветов в MetaPost довольно примитивная, но написать заливку фигуры градиентом достаточно просто. В некоторых пакетах, где это надо, реализовано. Например в piechartmp есть пример.

По поводу шрифтов: держит всё, что держит LaTeX.

По поводу сложных путей, контуров, заливок, добавлений, убираний, вырезки картинки по контуру: всё есть.

По поводу прозрачности: ориентация на PostScript - появится в PostScript прозрачность, она и в MetaPost появится.

В MetaPost есть пакеты, которые позволяют трёхмерную поверхность рисовать с отсечением невидимых частей, затенением и тому подобное. Есть пакеты для создания анимации. Есть пакет для рисования электронных схем. В общем, довольно много чего понаделали, если покопаться.

К чему это я: MetaPost много чего может, но всё-таки у него есть своя вполне определёная ниша: кодирование (не рисование, а именно кодирование) не сильно сложных иллюстраций. Хотя можно и извратиться - благо инструмент очень компактен и доступен для освоения.

P.S. Есть конвертор в SVG - правда не знаю на сколько хорош.

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от obp

> 2)Программа строит графики поведения частиц в каком-нибудь приборе. назовём его синхрфазотрон. Далее из базы данных результатов делается некая визуализация.Это можно сделать с использованием скриптовых языков и xml парсера и получить на выходе тот же svg

На Fortran пишется код, который распихивает всё по гистограммам, вычисляет среднее, разброс и выдаёт эти два числа экспериментатору - какая визуализация? какое SVG? :)

Evgueni ★★★★★
() автор топика
Ответ на: комментарий от Evgueni

Забыл про линейные преобразования сказать: есть на уровне языка, как и решение систем линейных уравнений.

Нелинейные преобразования отсутсвуют, но при желании их можно добавить.

Evgueni ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.