Как сделать ёлку, если ты математик

в 20:49, , рубрики: ёлка, математика, Новый Год

Поздравляю Хабр и Хаброжителей с Новым 2021 годом и дарю всем нам вот такую незатейливую и приятную Функциональную Ёлку (fЁлка). В этой статье я рассказываю как сделать ёлочку на мониторе за 10 минут. Свою вторую статью я посвящу тому, как "слепить" снеговика, положить подарки под ёлку и всё это припорошить сверху снегом.

Базовая идея

Весь рисунок - это набор математических функций от двух аргументов, x и y. Все они так или иначе базируются на SDF. Для рисования графиков использовался desmos.com.

Как сделать ёлку, если ты математик - 1

Базовые функции

Ограничение нуля

x+left|xright|

Как сделать ёлку, если ты математик - 3

Эллипс

frac{left(x-2right)^{2}}{3}+frac{left(y-3right)^{2}}{1}=1

Как сделать ёлку, если ты математик - 5

Ёлка

Опишем основу ёлки

-left(y-13right)-2left|xright|=0

Как сделать ёлку, если ты математик - 7

Добавим ветви

-0.2cosleft(6.8yright)left(y-13right)-2left|xright|=0

Как сделать ёлку, если ты математик - 9

Пригнём кончики ветвей к земле

-0.2cosleft(6.8y+0.7left|xright|right)left(y-13right)-2left|xright|=0

Как сделать ёлку, если ты математик - 11

Ограничим ель сверху

-0.2cosleft(6.8y+0.7left|xright|right)left(y-13right)-2left|xright|-0.51left(y+left|yright|right)=0

Как сделать ёлку, если ты математик - 13

Ель съехала вниз, это исправится позднее

Параллельный ход: ограничение снизу

Ограничитель

2x=5left(y-left|y-2right|right)

Как сделать ёлку, если ты математик - 15

Итог данного этапа

-0.2cosleft(6.8y+0.7left|xright|right)-2left|xright|+5left(y-left|y-2right|right)=0

Как сделать ёлку, если ты математик - 17

Комбинируем

-0.2cosleft(6.8y+0.7left|xright|right)left(y-13right)-2left|xright|-0.51left(y+left|yright|right)+5left(y-left|y-2right|right)=0

Как сделать ёлку, если ты математик - 19

Финальный штрих

2-0.2cosleft(6.8y+0.7left|xright|right)left(y-13right)-2left|xright|-0.51left(y+left|yright|right)+5left(y-left|y-2right|right)=0

Как сделать ёлку, если ты математик - 21

Займёмся стволом

Эллипс с более острыми углами

 0.1x^{10}+30left(y-1right)^{10}-1=0

Как сделать ёлку, если ты математик - 23

Объединение объектов

Объединение, пересечение и вырезание базируются на простейшей операции min(a, b). В зависимости от знаков перед a и b получаются различные булевы операции.

Листва - a(xy), ствол - b(xy)

-ale0, ble0

Как сделать ёлку, если ты математик - 25

Финал

minleft(-a,bright)le0

Как сделать ёлку, если ты математик - 27

Все формулы для вставки в desmos.com

a=2-0.2cosleft(6.8y+0.7left|xright|right)left(y-13right)-2left|xright|-0.51left(y+left|yright|right)+5left(y-left|y-2right|right)

b = 0.1x^{10}+30left(y-1right)^{10}-1

minleft(-a, bright)le0

Продолжение следует...

Автор: RigelGL

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js