Вступление
Всем привет. Сегодня в своей первой публикации я, дедушка Иван, расскажу вам оптимальный способ создания 3D модели, если вам задана функция вида z = f(x, y). Где это может пригодиться? Да откуда мне знать, может, вы не можете создать сферу в блендере, но знаете её уравнение? А может, вы придумали интересную функцию и хотите вдохнуть в неё жизнь? Так или иначе, герой (или героиня🤔) этой статьи: программа Functy. Ссылка на официальный сайт: Functy (sourceforge.net). Вот как выглядит окно этой программы:
Краткий обзор
Создать новую функцию очень просто. Для этого нужно нажать одну из трёх кнопок под 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.
Скрытые проблемы
Справедливости ради стоит сказать, что программа эта очень старая не такая уж и новая, в ней есть несколько, на мой взгляд, критических ошибок. Вот они:
- Неверный расчёт степени (оператор **). Во-первых, приоритет в этой программе у степени такой же, как у + или -. Во-вторых, возникают проблемы при сочетании различных знаков в основании и степени. Например, (-2)**3 будет равно 8 (зависит ещё от включения шейдеров). Вместо этой операции я рекомендую использовать конструкцию a**b = exp(b*ln(a)) . Правда, в этом случае a всегда больше нуля.
- Пробелы иногда влияют на результат. Вообще я вам рекомендую в больших выражениях как можно чаще использовать скобки
- И самое главное. Почему-то расчёт логарифма с шейдерами и без них осуществляется по-разному. Но как я уже говорил, сохранение модели осуществляется как если бы шейдеры были отключены. Проблема как-раз в том, что ошибка расчёта возникает при отключении шейдеров.
К сожалению, на мои просьбы по улучшению программы автор не дал никакого ответа. Третью ошибку мне пришлось исправлять самому, на это я потратил достаточно времени. Интересно, как исправил? Как повысил параметр accuracy? Подписывайтесь, ставьте лайки, пишите комментарии, и статья не заставит себя ждать. Дедушка пошёл отдыхать, всем пока)