Tensorial






Весь алгоритм можно разделить на 3 части:
I. Инициализация
На этом этапе значения параметров выбираются случайным образом.
Например, количество линий, количество опорных точек для каждой оси и так далее. Сейчас нет смысла разбирать каждый параметр, я объясню их в Части 3 по ходу дела.

II. Построение линий
Все линии хранятся в списке объектов класса Line, который просто хранит начальную и конечную точки линии.
Построение линий происходит в цикле:Выбирается угол из списка углов (обычно в этом списке только 2-3 угла).Создается объект класса Line с центром в случайной точке под выбранным углом.Вычисляются все точки пересечения с ранее построенными линиями, затем находятся две ближайшие точки к центру исходной линии, и линия обрезается по этим двум точкам.

III. Деформация
Основная идея этой части — заменить обычные координаты x и y на деформированные. То есть для каждой точки (x, y) есть соответствующая точка (f(x, y), g(x, y)), где f(x, y) и g(x, y) — это функции деформации.В Части I одним из параметров были опорные точки для осей, они отвечают за конечный вид изображения.Вот код для функции f(x, y):

Сначала вычисляется среднее квадратичное расстояние до каждой из опорных точек.
Затем вычисляется угол нового вектора по формуле.
Аналогично происходит для оси y, только для нее используются другие опорные точки.
После этого я просто рисую каждую линию из массива. Прохожу по всей длине линии, вычисляя деформированные координаты для каждой точки.

Не знаю как сюда код вставить))) Но проверил у себя, довольно интересно потыкать)))





Комментарии