Как стать автором
Обновить

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

Время на прочтение 4 мин
Количество просмотров 6.3K

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

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

Трапеция

y=\left|x-4\right|+\left|x+2\right|-5.5

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

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

\sqrt{\left(x-1\right)^{2}+1.9\left(y-2\right)^{2}}-1.3=0

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

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

\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=0

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

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

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

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

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

\max\left(\left|x\right|,\left|y\right|\right)\le1

Снеговик

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

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

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

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

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

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

-\left|x-1\right|-\left|x+1\right|-y\ge0

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

2-1.9\left|x-0.3\right|-1.9\left|x+0.3\right|-y\ge0

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

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

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

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

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

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

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

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

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

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

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)\ge0

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

Переместим

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)\ge0

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

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)\le0

Здесь минус перед 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\le0

Пальцы аналогично, но симметрия не только по х = 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\le0

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

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

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

Лицо

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

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

Все функции снеговика для вставки в 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.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|

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

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\le0

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

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

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

Результат

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\le0

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

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

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\le0

Комбинируем

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

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

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.5

Формула

\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\le0

Гипербола

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

Круг

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

Эллипс

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

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

j_1j_4\le0

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

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

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

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}\le0

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

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

Теперь 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)\ge0

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

\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(\left|\left|x_{1}\right|-1.05\right|,\left|y_{1}-0.9\right|\right)-1\le0

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

\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)\ge0

Объединим

\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)\le0

Сдвинем на 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)\le0

Одна буква "I"

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

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

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

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.3

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

Первое, на что хочется обратить внимание - то, что для рисунка применялись функции, неограниченные искусственно, как например 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 в формулах фигур легально в данной задаче.

Теги:
Хабы:
+19
Комментарии 5
Комментарии Комментарии 5

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн