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

Продолжение вчерашней статьи, посвящённой fЁлке, ниже.

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

Трапеция

y=\left|x-4\right|+\left|x+2\right|-5.55381c4251666a6a54202b344a74567c1.png

Здесь дважды применяется модуль числа, меняя константы под модулем и вычитаемое мы можем регулировать длину отрезка с константным значением y и само значение y на данном отрезке. Данная функция позже пригодится для сугробов и ведра.

Альтернативный эллипс

\sqrt{\left(x-1\right)^{2}+1.9\left(y-2\right)^{2}}-1.3=0708d0ddf4a22b1c08610431231c32aee.png

Альтернативная запись эллипса. Константы внутри скобок отвечают за координаты центра эллипса, константы перед скобками — за степень сжатия по осям, число за корнем — радиус.

Эллипс по двум точкам

\sqrt{\left(x-1\right)^{2}+\left(y-2\right)^{2}}+\sqrt{\left(x-0.1\right)^{2}+\left(y+1\right)^{2}}-3.3=0c6938080055270b488da144a53c14147.png

Согласно определению, эллипс — это замкнутая кривая, сумма расстояний каждой точки которой до двух точек (A и B на изображении) равна постоянной величине. Данный тип эллипса пригодится для рисования рук снеговику.

Прямоугольник

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

\max\left(\left|x\right|-1,\left|y\right|-1\right)\le0

Если размер прямоугольника одинаков — его можно вынести за знак сравнения:

\max\left(\left|x\right|,\left|y\right|\right)\le1d52289f3110e3f68a6ec44450c8b9d36.png

Снеговик

Тело — три эллипса

s_{1}=\sqrt{\left(x-10\right)^{2}+1.1\left(y-3.85\right)^{2}}-0.55s_{2}=\sqrt{\left(x-10\right)^{2}+1.1\left(y-2.7\right)^{2}}-0.85s_{3}=\sqrt{\left(x-10\right)^{2}+1.2\left(y-1.05\right)^{2}}-1.15s_1>=0, s_2>=0, s_3>=0» src=«https://habrastorage.org/getpro/habr/upload_files/de1/558/e4d/de1558e4dabdd98b3bb6d945f516c234.svg» /><img src=

Объединение снеговика — операция min ко всем эллипсам.

\min\left(s_{1},\ s_{2},s_{3}\right)\le07f741359bad587a96d9b9be6aa9188d0.png

Ведро на голову!

Шаг первый — трапеция

-\left|x-1\right|-\left|x+1\right|-y\ge031ecd950174e080c9d2e6458cc4c789f.png

Шаг второй — доработаем форму, поднимем ведро

2-1.9\left|x-0.3\right|-1.9\left|x+0.3\right|-y\ge0d33b2ba8c80c115448fd35e02db96540.png

Для того, чтобы поднять ведро — добавляем 2 в начало, чтобы стенки ведра стали более крутыми — поставим множители перед модулями.

Шаг третий — ограничение снизу

Применим схожую методику, как делали это с ёлкой.

Черный график:

x=\frac{\left(\left|y\right|+y\right)}{2}

Красный график

x=\frac{100\left(\left|y\right|-y\right)}{2}1305c4523b116d25048b555f096a0e8a.png

Суммируем, получаем ограничитель для ведра

x=\left(\frac{\left(\left|y\right|+y\right)}{2}+\frac{100\left(\left|y\right|-y\right)}{2}\right)c55615f013a0e79bed93370210b752ce.png

Применяем — ведро готово

2-1.9\left|x-0.3\right|-1.9\left|x+0.3\right|-\left(\frac{\left(\left|y\right|+y\right)}{2}+\frac{100\left(\left|y\right|-y\right)}{2}\right)\ge0380e75165b76d959f5ae0d080f051073.png

Шаг пятый — наденем ведро на голову

Переместим

2-1.9\left|x-9.7\right|-1.9\left|x-10.3\right|-\left(\frac{\left(\left|y-4\right|+y-4\right)}{2}+\frac{100\left(\left|y-4\right|-y+4\right)}{2}\right)\ge0379b0c43bee18f31c589a6d6d6fd74a4.png

Объединим со снеговиком

s_{4}=2-1.9\left|x-9.7\right|-1.9\left|x-10.3\right|-\left(\frac{\left(\left|y-4\right|+y-4\right)}{2}+\frac{100\left(\left|y-4\right|-y+4\right)}{2}\right)\min\left(s_{1},\ s_{2},s_{3},-s_{4}\right)\le09c8cc4d285abb0b103f84c94e004f940.png

Здесь минус перед s4 по той причине, что для получения ведра использовалось сравнение >0, вместо <0, когда велась работа с эллипсами.

Руки — эллипсы

Ось симметрии снеговика — это x = 10, поэтому можно создать две руки, а позже глаза и рот, одной функцией.

h_{1}=\sqrt{\left(\left|x-10\right|\ -\ 0.8\right)^{2}+\left(y-2.7\right)^{2}}+\sqrt{\left(\left|x-10\right|\ -\ 2.8\right)^{2}+\left(y-2.5\right)^{2}}-2.015\\h_1\le0a5701faf72eed8bcf1fb25cc36e75526.png

Пальцы аналогично, но симметрия не только по х = 10, но и у = 2.55

h_{2}=\sqrt{\left(\left|x-10\right|\ -\ 1.9\right)^{2}+\left(y-2.55\right)^{2}}+\sqrt{\left(\left|x-10\right|\ -\ 2.3\right)^{2}+\left(\left|y-2.55\right|-0.3\right)^{2}}-0.51\\h_2\le0bf4ef89a8c6e64e63c9a9d2ced39dabb.png

Тело снеговика по элементам

702bcaeacbeaab137fcb9624c6c4ea4f.png

Результат тела снеговика

\min\left(s_{1},\ s_{2},s_{3},-s_{4},h_{1},h_{2}\right)\le0f9ee1ad70065e298357ec926d1f21981.png

Лицо

Глаза — 2 круга

100\left(\left|x-10\right|-0.2\right)^{2}+100\left(y-3.95\right)^{2}\le18f39dcd83fd3d7bfccf8a803a25ebfc4.png

Рот — два эллипса

\left(300\left(\left|x-10\right|-0.03-0.-\left(y-3.6\right)\right)^{2}+3000\left(y-3.6\right)^{2}\right)\le19a8a7d3ee2746998ed6313505df81ccb.png

Все функции снеговика для вставки в desmos

s_{1}=\sqrt{\left (x-10\right)^{2}+1.1\left (y-2.7\right)^{2}}-0.85

s_{2}=\sqrt{\left (x-10\right)^{2}+1.2\left (y-1.05\right)^{2}}-1.15

s_{3}=\sqrt{\left (x-10\right)^{2}+1.1\left (y-3.85\right)^{2}}-0.55

s_{4}=2–1.9\left|x-9.7\right|-1.9\left|x-10.3\right|-\left (\frac{\left (\left|y-4\right|+y-4\right)}{2}+\frac{100\left (\left|y-4\right|-y+4\right)}{2}\right)

h_{1}=\sqrt{\left (\left|x-10\right|\ -\ 0.8\right)^{2}+\left (y-2.7\right)^{2}}+\sqrt{\left (\left|x-10\right|\ -\ 2.8\right)^{2}+\left (y-2.5\right)^{2}}-2.015

h_{2}=\sqrt{\left (\left|x-10\right|\ -\ 1.9\right)^{2}+\left (y-2.55\right)^{2}}+\sqrt{\left (\left|x-10\right|\ -\ 2.3\right)^{2}+\left (\left|y-2.55\right|-0.3\right)^{2}}-0.51

\min\left (s_{1},\ s_{2}, s_{3},-s_{4}, h_{1}, h_{2}\right)\le0

100\left (\left|x-10\right|-0.2\right)^{2}+100\left (y-3.95\right)^{2}\le1

\left (300\left (\left|x-10\right|-0.03–0.-\left (y-3.6\right)\right)^{2}+3000\left (y-3.6\right)^{2}\right)\le1

Сугробы

Сугробы — функция модуля синуса с константной частотой и изменяемой амплитудой. Амплитуду будем регулировать с помощью трапеций.

d_{1}=-\left|x+7\right|-\left|x-14\right|+22\\d_{2}=\left|x+2.7\right|+\left|x-2.7\right|-6.35\\d_{3}=\left|x-9\right|+\left|x-11\right|-2.8b9eb9ca4739c9ee6fc42c9eb920f8596.png

Суммируем

d=d_{1}+\left|d_{1}\right|+d_{2}-\left|d_{2}\right|+d_{3}-\left|d_{3}\right|3da3eea2d7292cce6886ee9dbaacbf18.png

Результат

0.3d\left|\sin\left(13x\right)\right|70686300d38978ca51a0d48b93eb61f5.png

Все функции сугробов

d_{1}=-\left|x+7\right|-\left|x-14\right|+22

d_{2}=\left|x+2.7\right|+\left|x-2.7\right|-6.35

d_{3}=\left|x-9\right|+\left|x-11\right|-2.8

d=d_{1}+\left|d_{1}\right|+d_{2}-\left|d_{2}\right|+d_{3}-\left|d_{3}\right|

0.3d\left|\sin\left (13x\right)\right|

Снежинки

Всё предельно просто. Снежинка — это «окружность наоборот», вместо второй степени используется корень, а для того, чтобы он вычислялся используются модули x и у.

\sqrt{\left|x\right|}+\sqrt{\left|y\right|}-0.45\le03cb50f8df7f7d03a842c56d1a20aa29b.png

Много снежинок

Используем mod, остаток от деления

\left|\operatorname{mod}\left(x,2\right)-1\right|b7b140d44c855b61af80c208c9acfabd.png

Результат

f_{1}=\sqrt{\left|\operatorname{mod}\left(x,2\right)-1\right|}+\sqrt{\left|\operatorname{mod}\left(y,2\right)-1\right|}-0.45\\f_1\le0d0c58e94c735add2c25829a837040031.png

Корректировка снежинок

Снежинки закрывают ёлку и снеговика, исправим это с помощью эллипсов.

f_{2}=2xx+\left(y-6\right)^{2}-40\\f_{3}=2\left(x-10\right)^{2}+\left(y-2.5\right)^{2}-10\\f_2\le0\\f_3\le0623e598ff6560b3d40a0f81ecdd7c005.png

Комбинируем

\min\left(-f_{1},f_{2},f_{3}\right)\ge0376fcd2cffe55bcd5c9058fa562f824b.png

Все формулы снежинок

f_{1}=\sqrt{\left|\operatorname{mod}\left (x,2\right)-1\right|}+\sqrt{\left|\operatorname{mod}\left (y,2\right)-1\right|}-0.45

f_{2}=2xx+\left (y-6\right)^{2}-40

f_{3}=2\left (x-10\right)^{2}+\left (y-2.5\right)^{2}-10

\min\left (-f_{1}, f_{2}, f_{3}\right)\ge0

Подарки под ёлку

Подарок — это квадрат. Подарков будет два, поэтому используя |x| будем рисовать сразу два подарка и сразу два бантика к ним.

\max\left(\left|\left|x\right|-2.1\right|,\left|y-0.5\right|\right)\le0.5391521ed30b4b136183771c1636cc560.png

Формула

\max\left (\left|\left|x\right|-2.1\right|,\left|y-0.5\right|\right)\le0.5

Бантики к подаркам

Модуль

j_{1}=\left|0.9\left|\left|x\right|-2.1\right|\right|-\left(y-1\right)-0.2\\j_1\le0fb1a6b7d62d7f047975ccea424b7b7a1.png

Гипербола

j_{2}=\left|\left|x\right|-2.1\right|^{2}-\left(y-1\right)^{2}-0.05\\j_2\ge0a83208e15e11f25e0aa1e6e324127bf0.png

Круг

j_{3}=0.2\left|\left|x\right|-2.1\right|^{2}+0.2\left(y-1\right)^{2}-0.1\\j_3\le087ed264265d7ea96ee7438ca3a8bfc37.png

Эллипс

j_{4}=\left(0.5\left|\left|x\right|-2.1\right|\right)^{2}+\left(y-1\right)^{2}-0.02\\j_4\le00ef26d4a319fe4f0b9ee18df1b5895d7.png

Внезапный ход: множим эллипс на модуль

j_1j_4\le01f45611f6e0bdba6b53b2b48282ebbaa.png

Комбинируем все элементы

\max\left(j_{1}j_{4},\ -j_{2},\ j_{3}\right)\le05c7ec542934d22e654d5b950cf642e42.png

Все формулы для бантиков

j_{1}=\left|0.9\left|\left|x\right|-2.1\right|\right|-\left (y-1\right)-0.2

j_{2}=\left|\left|x\right|-2.1\right|^{2}-\left (y-1\right)^{2}-0.05

j_{3}=0.2\left|\left|x\right|-2.1\right|^{2}+0.2\left (y-1\right)^{2}-0.1

j_{4}=\left (0.5\left|\left|x\right|-2.1\right|\right)^{2}+\left (y-1\right)^{2}-0.02

\max\left (j_{1}j_{4},\ -j_{2},\ j_{3}\right)\le0

Цифры

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

x_{1}=x\\y_{1}=y

2021 в римской системе счисления будет MMXXI, это несколько упрощает задачу

Две буквы «М»

Определим для начала функцию t2, которая будет ограничивать каждую букву М

t_{2}=\max\left(\left|\left|x_{1}\right|-1\right|,\left|y_{1}-0.89\right|\right)-0.95\\t_{2}\le00f7238cb747234086b7c20ba5b25b27d.png

Теперь «окошки», чтобы у букв появились вертикальные элементы

\max\left(\left|1.2\left|x_{1}\right|-1.2\right|,\left|y_{1}-0.9\right|\right)-1\ge08403946bc36fa9c13578f3aec04480e7.png

Теперь V-образные элементы

\min\left(\left|2\left|x_{1}\right|-2\right|-y_{1},-\left|2\left|x_{1}\right|-2\right|+y_{1}+0.2,-t_{2}\right)\ge042da55ed89c803549c6ff925cd0f4274.png

Скомбинируем в одну формулу

\max\left(\min\left(-t_{2},\max\left(\left|1.2\left|x_{1}\right|-1.2\right|,\left|y_{1}-0.9\right|\right)-1\right),\min\left(\left|2\left|x_{1}\right|-2\right|-y_{1},-\left|2\left|x_{1}\right|-2\right|+y_{1}+0.2,-t_{2}\right)\right)\ge094aeea4e3103c5ff8f612264f7568288.png

Две буквы «Х»

Применяем знакомые ограничители

\max\left(\left|\left|x_{1}\right|-1.05\right|,\left|y_{1}-0.9\right|\right)-1\le0a9bba9e33d228110f4dfc951c8278d83.png

Крестообразные элементы

\min\left(\left|\left|x_{1}\right|-1.05\right|-\left|y_{1}-0.9\right|,\ -\left|\left|x_{1}\right|-1.05\right|+\left|y_{1}-0.9\right|+0.15\right)\ge0bb34d2aae2219726cfc7de7d861cde52.png

Объединим

\max\left(-\min\left(\left|\left|x_{1}\right|-1.05\right|-\left|y_{1}-0.9\right|,\ -\left|\left|x_{1}\right|-1.05\right|+\left|y_{1}-0.9\right|+0.15\right),\max\left(\left|\left|x_{1}\right|-1.05\right|,\left|y_{1}-0.9\right|\right)-1\right)\le0de1bbdb63ac29451ae5127d10788bd4d.png

Сдвинем на 4.1 вправо, теперь ХХ займут своё место

\max\left(-\min\left(\left|\left|x_{1}-4.1\right|-1.05\right|-\left|y_{1}-0.9\right|,\ -\left|\left|x_{1}-4.1\right|-1.05\right|+\left|y_{1}-0.9\right|+0.15\right),\max\left(\left|\left|x_{1}-4.1\right|-1.05\right|,\left|y_{1}-0.9\right|\right)-1\right)\le0a344f40160d2bc5a4448140da349d9b5.png

Одна буква «I»

Тривиально, сразу же поставим «I» на её место

\max\left(\left|x_{1}-6.4\right|-0.06,\left|y_{1}-0.9\right|-01\right)\le08215f863f07b7eab4e22296037c180f9.png

Все формулы для букв

t_{2}=\max\left (\left|\left|x_{1}\right|-1\right|,\left|y_{1}-0.89\right|\right)-0.95

\max\left (\min\left (-t_{2},\max\left (\left|1.2\left|x_{1}\right|-1.2\right|,\left|y_{1}-0.9\right|\right)-1\right),\min\left (\left|2\left|x_{1}\right|-2\right|-y_{1},-\left|2\left|x_{1}\right|-2\right|+y_{1}+0.2,-t_{2}\right)\right)\ge0

\max\left (-\min\left (\left|\left|x_{1}-4.1\right|-1.05\right|-\left|y_{1}-0.9\right|,\ -\left|\left|x_{1}-4.1\right|-1.05\right|+\left|y_{1}-0.9\right|+0.15\right),\max\left (\left|\left|x_{1}-4.1\right|-1.05\right|,\left|y_{1}-0.9\right|\right)-1\right)\le0

Сдвинем локальную систему координат

x_{1}=\left(x\ -8\right)\cdot1.3\\y_{1}=\left(y-9.3\right)\cdot1.39769754a64b30b5806d52efa591f35a9.png

Краткие замечания по работе

Первое, на что хочется обратить внимание — то, что для рисунка применялись функции, неограниченные искусственно, как например sin (x), x∈(-5, 5). Все ограничения создаются естественным путём на базе арифметических операций с функциями.

Минимум и максимум также можно выразить с помощью простейших операций:

min=\frac{f+g}{2}-\left|\frac{f-g}{2}\right|\\max=\frac{f+g}{2}+\left|\frac{f-g}{2}\right|

Поэтому использование функций min и max в формулах фигур легально в данной задаче.

© Habrahabr.ru