Как сделать простые 2D-иллюстрации, чтобы сопровождать ответы по геометрии?

14

В своем ответе об аффинных преобразованиях я сделал несколько небольших иллюстраций, чтобы помочь объяснению.

Как быстро создать PNG с возможностью загрузки, которая выражает геометрическую или математическую идею?

Этот вопрос был придуман, чтобы поддержать мой постскриптумный ответ, но он предназначен для поиска других решений, которые могут принести пользу сети SE в более общем плане. Но для правдоподобия ответ должен содержать ссылку на пост, в котором этот метод фактически использовался, а также достаточную часть «Howto», если речь идет о чем-то более очевидном, например «Выбор экспорта из меню».

Есть два мета вопросы здесь и здесь относительно того, как в рамках этого вопроса в свете того старшинства он может установить для нашего сайта.

Люзер Дрог
источник
2
Я лично вижу этот вопрос больше на PostScript, чем на компьютерной графике.
CIFZ
1
@ Cifz правильно, это будет соответствовать GD.SE лучше. Но это не причина, почему это не может быть здесь.
joojaa
@citz Я думаю, я понимаю, что ты имеешь в виду. Что, если я уберу это из вопроса, и открою для tikz и асимптоты и еще много чего.
Люсер Дрог
Я отвечаю здесь, чтобы показать, что это немного самоуверенный вопрос, и ответы определенно будут. Может быть , весь этот поток должен жить в нашей Meta, как это делает на GD.SE . Любые мысли, @cifz
joojaa

Ответы:

13

Я использую различные инструменты в зависимости от конкретных потребностей на данный момент. У меня есть склонность к бесплатным инструментам, поскольку у меня нет доступа к таким вещам, как Illustrator или Mathematica.

Для общего векторного искусства я использую бесплатный Inkscape . Он работает с файлами .svg, а также может выводить их в виде высококачественных файлов .png или других растровых форматов. Например, вот диаграмма, которую я сделал в Inkscape, чтобы объяснить UV-картирование :

Для графиков 2D-функций я часто использую онлайн-калькулятор Desmos , который имеет удобную возможность, позволяющую вам обмениваться графиками в Интернете, чтобы другие могли просматривать и изменять их. Вы также можете создавать ползунки, которые можно изменять для воспроизведения параметров кривой в режиме реального времени. Например, вот настраиваемая функция повышения резкости .

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

Это было слишком сложно для Desmos, поскольку в нем программно создавалось кусочное приближение гауссиана.

Для действительно странных графических задач, которые не выполняются ни кем другим, я использовал Python с пакетом svgwrite для программного генерирования диаграмм в файлы .svg. Затем они могут быть исправлены в Inkscape при желании и преобразованы в растровые изображения с использованием Inkscape или ImageMagick. Я использовал этот рабочий процесс для создания изображений в этом посте с высокой точностью , например:

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

И, наконец, если ничего не достаточно, я буду использовать Python с numpy и pillow для рендеринга изображений попиксельно. Вот как я создал изображения шума Перлина в этом ответе ( в данном случае также с помощью пакета шумов ).

Натан Рид
источник
Натан, ты тот, кто написал это о точности глубины? Вау, круто ... Я прочитал эту вещь, и это очень помогло! маленький мир: P
Алан Вулф
12

Лично мой выбор яда - Adobe Illustrator. Другие приложения, такие как Inkscape, Corel Draw, Xara Designer также подойдут. В крайнем случае, даже PowerPoint будет работать. Хотя я лично не рекомендую PowerPoint из-за серьезных проблем с его моделью данных, даже жесткое, возможно, самое развернутое приложение для рисования в мире.

Также может быть хорошей идеей иметь под рукой графическое приложение. Я лично использую Mathematica для этого, хотя многие другие приложения тоже будут работать. Или, если хотите, вы можете использовать Wolfram alpha, это бесплатная онлайн-версия mathematica.

Отказ от ответственности: потому что примеры мои и бесстыдная самоутверждение взять с щепоткой соли.

Иллюстратор

Первое, что вы должны сделать в любом приложении для векторного рисования, - это включить сетку привязки . Это уменьшает утомительность точного размещения линий. Одна из главных причин, по которой я не люблю использовать Inkscape, заключается в низком способе реализации этого замыкания. PowerPoint по умолчанию поставляется с привязкой к сетке.

Illustrator меня не очень устраивает, поскольку он не удовлетворяет всем моим потребностям. Но программного обеспечения пока нет (Maya раньше занимала эту нишу, но потом произошло Autodesk).

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

  • Ресурс, показывающий оснастку, postscript и java-скрипт, доступ к иллюстратору и ссылки вперед.

Вот несколько примеров рисунков, которые я сделал по сети с помощью Illustrator, в основном с помощью привязки к сетке:

Круговой марш

Изображение 1 : одно из многих изображений, которые я нарисовал в иллюстраторе на этом сайте. Примечание: я довольно опытный иллюстратор (иногда коммерческий), и это очень просто по моим стандартам.

Изображение круга в довольно простом виде. Просто нарисуйте случайную форму, нажимая вокруг. После этого отключите оснастку и пусть умные гиды сделают вашу работу за вас. Нарисуйте линии к ближайшей точке на линии, сделайте круги на линии и (я удалил контрольные линии после того, как закончил). Промыть и повторить. Мне понадобилось 3-5 минут, чтобы нарисовать изображение, как только я начал работать.

Волна продолжения

Изображение 2 : GD.SE Продолжение волны .

Хотя это изображение кажется более сложным, оно не намного больше работы, чем первое изображение. Это более технически, поэтому в дополнение к привязке сетки I теперь используется клавиша Shift для ограничения линий до углов 45 градусов. Заполнения штриховки легко назначаются регионам с помощью инструмента конструктора фигур в Illustrator. (пример использования построителя фигур , снимок экрана)

тетра изображение

Изображение 3 : Иногда легче начать с нуля в постскриптуме. Изображение добавлено к сообщению на ENG.SE .

Наконец, изображение, которое действительно легче сделать, набрав значения в postscript. Это относительно легко сделать в постскриптуме. Я все еще делал типографику в иллюстраторе. Хотя рисовать это от руки - не большое дело, я предпочитаю этого не делать, но я сделаю это, если я должен сделать суждение на глаз.

Mathematica

Mathematica замечательно, если вы хотите исследовать вещи немного больше. Единственный недостаток Mathematica - это то, что он НЕ дешевый. Но это может сделать почти все быстро. Я использовал Mathematica для некоторых моих фотографий на основе нурб .

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

Graphics[{
    orig = {
        Table[
            GeometricTransformation[
                Line[{{0, 0}, {50, 0}}],
            RotationTransform[ang]],
            {ang, 0, 3 Pi/2, Pi/2}
        ],
        Line[{{20, 0}, {30, 20}, {40, 0}}]
    },
    Red,
    GeometricTransformation[
        orig,
        RotationTransform[Pi/6]
    ]
}]

Результаты в той же картине, что и другие. Оборачивая это в таблицу согласно результату:

введите описание изображения здесь

Рисунок 4 : Анимацию просто сделать в редакторе кода с помощью Mathematica.

joojaa
источник
4

PostScript + ps2eps + mogrify

Для ответа Affine Transformations я написал очень маленькую постскриптумную программу, а затем сохранил несколько копий под разными именами и отредактировал каждую для выполнения каждой отдельной задачи: масштабировать, переводить, вращать. Например, вот основной, ident.psкоторый ничего не делает для изменения координат между красным рисунком и черным рисунком. Я сделал красные линии немного больше и всегда рисую их в первую очередь, чтобы они были хорошо наложены и видимы (IMO). Я просмотрел ghostscript с помощью команды vi (ex) :!gs %. ( все исходные файлы )

%!
/axis {
    currentpoint 4 { 
        2 copy moveto
            50 0 lineto
            90 rotate
    } repeat pop pop 
} def 
/shape {
    20 0 moveto
    30 20 lineto
    40 0 lineto
    closepath
} def 

100 100 translate

gsave
% do transform here
currentlinewidth 1.5 mul setlinewidth
1 0 0 setrgbcolor
0 0 moveto axis shape stroke
grestore

0 0 moveto axis shape stroke

showpage

Затем я использовал ps2epsкоманду psutilsдля автоматического вычисления ограничивающих рамок

$ ps2eps -f *.ps
Input files: ident.ps rotate.ps scale.ps skewx.ps skewy.ps translate.ps
Processing: ident.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 50 150 150
Creating output file ident.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: rotate.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 50 150 150
Creating output file rotate.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: scale.ps
Calculating Bounding Box...ready. %%BoundingBox: 25 25 175 175
Creating output file scale.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: skewx.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 49 150 151
Creating output file skewx.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: skewy.ps
Calculating Bounding Box...ready. %%BoundingBox: 49 50 151 150
Creating output file skewy.eps ... ** Warning **: Weird heading line -- %! -- ready.
Processing: translate.ps
Calculating Bounding Box...ready. %%BoundingBox: 50 50 165 165
Creating output file translate.eps ... ** Warning **: Weird heading line -- %! -- ready.

И, наконец, использовал convertкоманду imagemagick для создания обрезанных изображений PNG. (Я не думал о быстром способе автоматизации этой части. Редактировать: как прокомментировано, это можно сделать с помощью mogrify -format png *.eps. Спасибо, joojaa!)

$ convert ident.eps ident.png

josh@cadabra ~/affine
$ convert scale.eps scale.png

josh@cadabra ~/affine
$ convert rotate.eps rotate.png

josh@cadabra ~/affine
$ convert skewx.eps skewx.png

josh@cadabra ~/affine
$ convert translate.eps translate.png

josh@cadabra ~/affine
$ convert skewy.eps skewy.png

Который производит PNG, готов к загрузке.

$ ls -l *.png
-rw-r--r-- 1 josh None  587 Sep  1 21:16 ident.png
-rw-r--r-- 1 josh None 1431 Sep  1 21:21 rotate.png
-rw-r--r-- 1 josh None  798 Sep  1 21:19 scale.png
-rw-r--r-- 1 josh None 1133 Sep  1 21:22 skewx.png
-rw-r--r-- 1 josh None 1197 Sep  1 21:23 skewy.png
-rw-r--r-- 1 josh None  756 Sep  1 21:23 translate.png

Люзер Дрог
источник
Я действительно не вижу смысла в генерации инкапсуляции с помощью ps2eps, не могу просто ввести заголовок eps в свой шаблон. Это делает инструкцию более чистой (и пользователю нужно меньше зависимостей). Вместо того, чтобы конвертировать каждый файл отдельно, делайтеmogrify -format png *.eps
joojaa
Здорово. Я не знал о mogrify. Для ps2epsчасти он автоматически вычисляет (и добавляет) информацию ограничивающего прямоугольника. Пропустив эту часть, вы convertполучите полноразмерные изображения
luser droog
4

Я просто использую Powerpoint для создания таких диаграмм, и он отлично работает, как только вы освоитесь с его основными примитивами. Он поддерживает все простые операции, такие как вращение, перемещение и т. Д., А последние изменения также имеют сдвиговые и трехмерные преобразования. Примеры:

введите описание изображения здесь

введите описание изображения здесь

Вот пример диаграммы Powerpoint, которую я сделал для ответа.

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

Похоже, jsfiddle также популярен здесь.

ap_
источник
Я согласен - мой ответ, вероятно, больше не действителен, потому что я до сих пор не использовал диаграммы ни в одном ответе. Но я ожидаю, что это скоро произойдет. Так что, если этот ответ будет нормальным в течение нескольких дней, я уверен, что смогу найти ответ.
ap_
Выполнено! Мой ответ должен быть действительным сейчас.
ap_
Отлично. Удаление моих предыдущих комментариев.
Люсер Дрог
4

Не полный набор инструментов, который вы, возможно, ищете, а просто дополнительный инструмент, который я использую сам: для 3D-графики может пригодиться Blender. Особенно, если вы используете плагин Export_SVG (доступен по адресу http://dl.dropbox.com/u/16486113/Blender/archivos/temp/SVG/export_svg.py и http://blenderartists.org/forum/showthread.php? 282824-SVG-output-script )

Это позволяет вам получать трехмерные объекты Blenders в качестве векторной графики в Illustrator или Inkscape. Я считаю, что это дает мне хорошее начало для создания простых 3d иллюстраций.

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

введите описание изображения здесь

идеограмма
источник
Конечно, вы имеете в виду иллюстратор и Inkscape (вместо иллюстратор и иллюстратор)
Joojaa
Я уверен, что да! Tnx!
Идеограмма
1

Я использую Powerpoint и различные (дорогие) пакеты САПР. Я написал макросы Powerpoint (код VBA) для некоторых специальных вещей, таких как рисование управляющих полигонов кривых Безье. Затем я использую стандартный инструмент Windows Snipping Tool, чтобы делать снимки экрана. Вот некоторые примеры:

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

И еще несколько примеров из Math.SE

Один
два
три
четыре
пять

Bubba
источник
Powerpoint на самом деле довольно дорогой, учитывая вещи. Все в порядке, в конце концов, навыки рисования исходят от вас Но, по крайней мере, tikz, inkscape, blrnder и postscript намного дешевле, чем powerpoint.
joojaa
Я стар, поэтому время для меня важнее денег. Inkscape хорош, но я бы ни за что не потратил время на написание кода tikz или Postscript для создания картинок.
Бубба