Поздравляю Хабр и Хаброжителей с Новым 2021 годом и дарю всем нам вот такую незатейливую и приятную Функциональную Ёлку (fЁлка). В этой статье я рассказываю как сделать ёлочку на мониторе за 10 минут. Свою вторую статью я посвящу тому, как "слепить" снеговика, положить подарки под ёлку и всё это припорошить сверху снегом.
Базовая идея
Весь рисунок - это набор математических функций от двух аргументов, x и y. Все они так или иначе базируются на SDF. Для рисования графиков использовался desmos.com.
![](https://habrastorage.org/getpro/habr/upload_files/903/f2e/5ed/903f2e5ed85cfe028ee3793a574c3e30.png)
Базовые функции
Ограничение нуля
![](https://habrastorage.org/getpro/habr/upload_files/c6e/c38/84d/c6ec3884df1d151a3db12a99e84f90cd.png)
Эллипс
![](https://habrastorage.org/getpro/habr/upload_files/f71/62d/024/f7162d0242427ba48a56cdac0ff25834.png)
Ёлка
Опишем основу ёлки
![](https://habrastorage.org/getpro/habr/upload_files/ead/115/33c/ead11533cffe6c2a60a51bbfa6eef577.png)
Добавим ветви
![](https://habrastorage.org/getpro/habr/upload_files/2ea/61a/4e0/2ea61a4e0bc3dcfec090e6adc873c273.png)
Пригнём кончики ветвей к земле
![](https://habrastorage.org/getpro/habr/upload_files/943/cca/583/943cca58326d84e247f24cef6e6c7891.png)
Ограничим ель сверху
![](https://habrastorage.org/getpro/habr/upload_files/08a/059/05f/08a05905f75ad3b949bf9f30e1eaabb5.png)
Ель съехала вниз, это исправится позднее
Параллельный ход: ограничение снизу
Ограничитель
![](https://habrastorage.org/getpro/habr/upload_files/1fd/09a/df4/1fd09adf4bd5cc8f480857d507832b36.png)
Итог данного этапа
![](https://habrastorage.org/getpro/habr/upload_files/255/e3f/f1e/255e3ff1e5648898a001c872de6d102c.png)
Комбинируем
![](https://habrastorage.org/getpro/habr/upload_files/c9b/b46/a5c/c9bb46a5c60b58f49068b3d978b824ef.png)
Финальный штрих
![](https://habrastorage.org/getpro/habr/upload_files/593/65a/acf/59365aacfdbdf01d44f00037e3273553.png)
Займёмся стволом
Эллипс с более острыми углами
![](https://habrastorage.org/getpro/habr/upload_files/66f/f0e/7ed/66ff0e7edefcb35441abb85651842667.png)
Объединение объектов
Объединение, пересечение и вырезание базируются на простейшей операции min(a, b). В зависимости от знаков перед a и b получаются различные булевы операции.
Листва - a(xy), ствол - b(xy)
![](https://habrastorage.org/getpro/habr/upload_files/485/edd/47a/485edd47af9bf7ba44d10e930bc0301c.png)
Финал
![](https://habrastorage.org/getpro/habr/upload_files/c1f/293/d0c/c1f293d0c07d1c3b6fa6961fa3ec1cac.png)
Все формулы для вставки в desmos.com
a=2-0.2\cos\left(6.8y+0.7\left|x\right|\right)\left(y-13\right)-2\left|x\right|-0.51\left(y+\left|y\right|\right)+5\left(y-\left|y-2\right|\right)
b\ =\ 0.1x^{10}+30\left(y-1\right)^{10}-1
\min\left(-a,\ b\right)\le0
Продолжение следует...
Quiensabe
Nehc
Поэлементно впечатляет не слишком. ) Понятно, что практически любой сложный объект можно разложить на относительно простые составляющие, которые можно описать математически.
![image](https://habrastorage.org/webt/ic/ez/3e/icez3edtddwsi9ldszmq9_96a64.png)
Что понравилось в исходном посте с елкой:
Это собственно математическая формула елки (по мне так и с таким «стволом» норм!):
ОДНА формула. ;) Прикольно, как по мне…
rurulik
Это да, Ёлка из поста одной формулой заслуживает внимания) Может есть другие варианты формул для будущей новогодней красавицы?)
VPryadchenko
В конце концов, лемнискатой можно что угодно нарисовать)
sergeymolchanovsky
Не отображаются некоторые символы в формулах.
GeMir
Desmos — это «русифицированная» версия GeoGebra?
RigelGL Автор
Я пробовал GeoGebra. В браузере она тормозит, некорректно парсит формулы, например ||x|-1| (\left|\left|x\right|-2\right|), не везде работает Ctrl+Z. Поэтому я выбрал Desmos. Единственное чем GeoGebra лучше Desmos'a лично для меня — возможностью строить трёхмерные уравнения.