Продолжение вчерашней статьи, посвящённой fЁлке, ниже.
Здесь дважды применяется модуль числа, меняя константы под модулем и вычитаемое мы можем регулировать длину отрезка с константным значением y и само значение y на данном отрезке. Данная функция позже пригодится для сугробов и ведра.
Альтернативная запись эллипса. Константы внутри скобок отвечают за координаты центра эллипса, константы перед скобками – за степень сжатия по осям, число за корнем – радиус.
Согласно определению, эллипс – это замкнутая кривая, сумма расстояний каждой точки которой до двух точек (A и B на изображении) равна постоянной величине. Данный тип эллипса пригодится для рисования рук снеговику.
Это такая фигура, максимальное расстояние от точек которой до осей координат не превышает константного значения.
Если размер прямоугольника одинаков – его можно вынести за знак сравнения:
Объединение снеговика – операция min ко всем эллипсам.
Для того, чтобы поднять ведро – добавляем 2 в начало, чтобы стенки ведра стали более крутыми – поставим множители перед модулями.
Применим схожую методику, как делали это с ёлкой.
Черный график:
Красный график
Суммируем, получаем ограничитель для ведра
Применяем – ведро готово
Переместим
Объединим со снеговиком
Здесь минус перед s4 по той причине, что для получения ведра использовалось сравнение >0, вместо <0, когда велась работа с эллипсами.
Ось симметрии снеговика – это x = 10, поэтому можно создать две руки, а позже глаза и рот, одной функцией.
Пальцы аналогично, но симметрия не только по х = 10, но и у = 2.55
s_{1}=sqrt{left(x-10right)^{2}+1.1left(y-2.7right)^{2}}-0.85
s_{2}=sqrt{left(x-10right)^{2}+1.2left(y-1.05right)^{2}}-1.15
s_{3}=sqrt{left(x-10right)^{2}+1.1left(y-3.85right)^{2}}-0.55
s_{4}=2-1.9left|x-9.7right|-1.9left|x-10.3right|-left(frac{left(left|y-4right|+y-4right)}{2}+frac{100left(left|y-4right|-y+4right)}{2}right)
h_{1}=sqrt{left(left|x-10right| – 0.8right)^{2}+left(y-2.7right)^{2}}+sqrt{left(left|x-10right| – 2.8right)^{2}+left(y-2.5right)^{2}}-2.015
h_{2}=sqrt{left(left|x-10right| – 1.9right)^{2}+left(y-2.55right)^{2}}+sqrt{left(left|x-10right| – 2.3right)^{2}+left(left|y-2.55right|-0.3right)^{2}}-0.51
minleft(s_{1}, s_{2},s_{3},-s_{4},h_{1},h_{2}right)le0
100left(left|x-10right|-0.2right)^{2}+100left(y-3.95right)^{2}le1
left(300left(left|x-10right|-0.03-0.-left(y-3.6right)right)^{2}+3000left(y-3.6right)^{2}right)le1
Сугробы – функция модуля синуса с константной частотой и изменяемой амплитудой. Амплитуду будем регулировать с помощью трапеций.
d_{1}=-left|x+7right|-left|x-14right|+22
d_{2}=left|x+2.7right|+left|x-2.7right|-6.35
d_{3}=left|x-9right|+left|x-11right|-2.8
d=d_{1}+left|d_{1}right|+d_{2}-left|d_{2}right|+d_{3}-left|d_{3}right|
0.3dleft|sinleft(13xright)right|
Всё предельно просто. Снежинка – это “окружность наоборот”, вместо второй степени используется корень, а для того, чтобы он вычислялся используются модули x и у.
Используем mod, остаток от деления
Снежинки закрывают ёлку и снеговика, исправим это с помощью эллипсов.
f_{1}=sqrt{left|operatorname{mod}left(x,2right)-1right|}+sqrt{left|operatorname{mod}left(y,2right)-1right|}-0.45
f_{2}=2xx+left(y-6right)^{2}-40
f_{3}=2left(x-10right)^{2}+left(y-2.5right)^{2}-10
minleft(-f_{1},f_{2},f_{3}right)ge0
Подарок – это квадрат. Подарков будет два, поэтому используя |x| будем рисовать сразу два подарка и сразу два бантика к ним.
Формула
maxleft(left|left|xright|-2.1right|,left|y-0.5right|right)le0.5
j_{1}=left|0.9left|left|xright|-2.1right|right|-left(y-1right)-0.2
j_{2}=left|left|xright|-2.1right|^{2}-left(y-1right)^{2}-0.05
j_{3}=0.2left|left|xright|-2.1right|^{2}+0.2left(y-1right)^{2}-0.1
j_{4}=left(0.5left|left|xright|-2.1right|right)^{2}+left(y-1right)^{2}-0.02
maxleft(j_{1}j_{4}, -j_{2}, j_{3}right)le0
Для начала зададим локальную систему координат, это будет полезно, когда мы будем двигать надпись.
2021 в римской системе счисления будет MMXXI, это несколько упрощает задачу
Определим для начала функцию t2, которая будет ограничивать каждую букву М
Теперь “окошки”, чтобы у букв появились вертикальные элементы
Теперь V-образные элементы
Применяем знакомые ограничители
Крестообразные элементы
Сдвинем на 4.1 вправо, теперь ХХ займут своё место
Тривиально, сразу же поставим “I” на её место
t_{2}=maxleft(left|left|x_{1}right|-1right|,left|y_{1}-0.89right|right)-0.95
maxleft(minleft(-t_{2},maxleft(left|1.2left|x_{1}right|-1.2right|,left|y_{1}-0.9right|right)-1right),minleft(left|2left|x_{1}right|-2right|-y_{1},-left|2left|x_{1}right|-2right|+y_{1}+0.2,-t_{2}right)right)ge0
maxleft(-minleft(left|left|x_{1}-4.1right|-1.05right|-left|y_{1}-0.9right|, -left|left|x_{1}-4.1right|-1.05right|+left|y_{1}-0.9right|+0.15right),maxleft(left|left|x_{1}-4.1right|-1.05right|,left|y_{1}-0.9right|right)-1right)le0
Первое, на что хочется обратить внимание – то, что для рисунка применялись функции, неограниченные искусственно, как например sin(x), x∈(-5, 5). Все ограничения создаются естественным путём на базе арифметических операций с функциями.
Минимум и максимум также можно выразить с помощью простейших операций:
Поэтому использование функций min и max в формулах фигур легально в данной задаче.
VK объявляет о приобретении 40% компании Intickets.ru (Интикетс). Это облачный сервис для контроля и управления продажей билетов на мероприятия. Сумма…
OpenAI готовится запустить собственную поисковую систему на базе ChatGPT. Информацию об этом публикуют западные издания. Ожидается, что новый поисковик может…
Центр управления связью общего пользования (ЦМУ ССОП) Роскомнадзора рекомендовал компаниям из реестра провайдеров ограничить доступ поисковых ботов к информации на российских сайтах.…
Apple возобновила переговоры с OpenAI о возможности внедрения ИИ-технологий в iOS 18, на основе данной операционной системы будут работать новые…
Конкурсный управляющий российской «дочки» Google подготовил 23 иска к участникам рекламного рынка. Общая сумма исков составляет 16 млрд рублей –…
Google завершил обновление основного алгоритма March 2024 Core Update. Раскатка обновлений была завершена 19 апреля, но сообщил об этом поисковик…