Копирование в ракурсе с коррекцией края
На эти функции я и рассчитывал, вводя в свою программу не просто функцию копирования, а пытаясь сделать из неё инструмент, создающий кадры анимации.
Наверное, такие возможности есть и в других программах, я не очень хорошо об этом знаю, но у меня, как мне кажется, это получилось неплохо.
Среди описанных задач есть и поворот изображения в ракурсе. Конечно повернуть плоское изображение в ракурсе невозможно, но можно его исказить, так, чтобы создать иллюзию такого поворота. Результат вы можете видеть на иллюстрации.
Поворот в ту или другую сторону регулируется движками, раздельно по координатам X и Y. Движок включается кнопочкой справа от него, а чёрточкой, показывающей на отклонение регулятора от центра, выставляется величина ракурса - от нулевой до максимальной.
Образец для копирования выделяется на рисунке тонкой пунктирной рамочкой, так, как это показано на иллюстрации, и представляет собой прямоугольник, ограниченный координатами X2-X3 и Y2-Y3, белый цвет считается прозрачным, и пиксели этого цвета не копируются.
Если регуляторы выключены, или чёрточки на них находятся в центре, то цвет для копирования берётся от оригинала в том месте, на которое указывают координаты X,Y. Но если движок, например по Х, включён, и задаёт некий ракурс R, то тогда цвет пикселя для аппликации берётся с другого места – с места Х1=f(X,R), где f – функция, осуществляющая пересчёт координаты Х.
Для простоты рассуждений проведём линейные преобразования и приведём -прямоугольник X2,Y2-X3,Y3 к квадрату с единичной стороной 0,0-1,1. Так же, на единицу, нормируем и значение ракурса – ракурс у нас будет принимать значения от -1 до 1. И примем
Х1=Х для ракурса 0
Х1=Х^2 для ракурса 1
В первом случае это прямая линия, а во втором, это парабола. В остальных же случаях будем брать среднее значение между ними. Что получается, показано на иллюстрации слева синими и красными кривыми – от максимального ракурса постепенно переходим к прямой линии и от неё к ракурсу в другую сторону.
Всё это получается хорошо, но вот незадача – у изображения в ракурсе имеется сильно растянутый край, на котором кудри развиваются как по ветру. Чтобы подрезать этот край снова применяется перевычисляющая координаты функция, но уже другая, типа
Х1=Х1/(1-Х), где Х уже не координата нашей точки, а её расстояние от центра изображения, а чтобы при подрезании учитывался ракурс, можно функцию записать так - Х1=Х1/(1-Х*R) или так Х1=Х1/(1-Х*R/2), вдвое приуменьшив влияние ракурса.
Эксперимент однако показал, что влияние ракурса лучше не приуменьшать, а наоборот, вдвое увеличить. Эти и те кривые приведены в средней части иллюстрации для сравнения.
По этой схеме и были сделаны аппликации, приведённые на иллюстрации справа. Кудри на них тоже развиваются, но в меру.
__________
10.08.2023
Свидетельство о публикации №223081000483