Найти в Дзене
Дед Иван

Создание 3D модели по графику функции двух переменных

Всем привет. Сегодня в своей первой публикации я, дедушка Иван, расскажу вам оптимальный способ создания 3D модели, если вам задана функция вида z = f(x, y). Где это может пригодиться? Да откуда мне знать, может, вы не можете создать сферу в блендере, но знаете её уравнение? А может, вы придумали интересную функцию и хотите вдохнуть в неё жизнь? Так или иначе, герой (или героиня🤔)...
Оглавление

Вступление

Всем привет. Сегодня в своей первой публикации я, дедушка Иван, расскажу вам оптимальный способ создания 3D модели, если вам задана функция вида z = f(x, y). Где это может пригодиться? Да откуда мне знать, может, вы не можете создать сферу в блендере, но знаете её уравнение? А может, вы придумали интересную функцию и хотите вдохнуть в неё жизнь? Так или иначе, герой (или героиня🤔) этой статьи: программа Functy. Ссылка на официальный сайт: Functy (sourceforge.net). Вот как выглядит окно этой программы:

Окно программы Functy
Окно программы Functy

Краткий обзор

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

Нужные кнопки во второй подгруппе
Нужные кнопки во второй подгруппе

Как вводить данные в поля, поясняют всплывающие подсказки. Также можно обратиться к готовым примерам, которые находятся в папке ...\Functy\examples.

https://yapx.ru/v/KW3V2 - ссылка на анимацию изменения фигур выше.

Таким образом, можно задавать саму фигуру, координаты её центра, цвет математической записью. Хочу заметить, что декартовы координаты используются только при создании "Cartesian function", а сферические - "Spherical function". При создании параметрической кривой используются: параметр a (от 0 до 1) и r (какой-то угол поворота, сам не использовал). Параметр t можно использовать в функциях любого вида. Также ниже остальных полей находится параметр accuracy (точность). Чем он больше, тем точнее построение графика, но на это затрачивается больше времени. Максимальное значение, которое можно установить - 1000. Однако, с помощью некоторых хитростей, это значение можно повысить. Например, я как-то выставлял 5000, только из интереса🙂. Теперь поговорим о левой панели.

Левая панель настроек
Левая панель настроек
  • Show axis - показывать ли сетку координат
  • Spin - вращение вдоль оси Oz
  • Invert background - заменяет цвета фона на противоположные
  • Wireflame - заливки нет, отображаются только рёбра и вершины
  • Use shaders - как я понял, подключает GPU для построения графика. Однако, сохранение графика происходит так, если бы галочка в данном поле отсутствовала. Об этом я ещё напишу ниже
  • Focus blur, Near, Far - не использовал, но как я понял, связано со взаимодействием со светом.

Для сохранения графика используются форматы, которые могут быть открыты 3D редакторами. Также можно сохранить изображение в формате .bmp.

Доступные форматы для сохранения
Доступные форматы для сохранения
Результат импорта в blender в формате .stl
Результат импорта в blender в формате .stl

Скрытые проблемы

Справедливости ради стоит сказать, что программа эта очень старая не такая уж и новая, в ней есть несколько, на мой взгляд, критических ошибок. Вот они:

  1. Неверный расчёт степени (оператор **). Во-первых, приоритет в этой программе у степени такой же, как у + или -. Во-вторых, возникают проблемы при сочетании различных знаков в основании и степени. Например, (-2)**3 будет равно 8 (зависит ещё от включения шейдеров). Вместо этой операции я рекомендую использовать конструкцию a**b = exp(b*ln(a)) . Правда, в этом случае a всегда больше нуля.
  2. Пробелы иногда влияют на результат. Вообще я вам рекомендую в больших выражениях как можно чаще использовать скобки
  3. И самое главное. Почему-то расчёт логарифма с шейдерами и без них осуществляется по-разному. Но как я уже говорил, сохранение модели осуществляется как если бы шейдеры были отключены. Проблема как-раз в том, что ошибка расчёта возникает при отключении шейдеров.

К сожалению, на мои просьбы по улучшению программы автор не дал никакого ответа. Третью ошибку мне пришлось исправлять самому, на это я потратил достаточно времени. Интересно, как исправил? Как повысил параметр accuracy? Подписывайтесь, ставьте лайки, пишите комментарии, и статья не заставит себя ждать. Дедушка пошёл отдыхать, всем пока)