Копирование круговых областей

Дмитрий Маштаков
    Копирование круговых областей в графическом редакторе с целью изменения формы изображения оказывается не только более удобным в сравнении с копированием прямоугольниками, но и позволяет при некоторой модификации достичь плавности в передаче линий рисунка.

   Быстрота и лёгкость, с которой делается изменение рисунка, очень важна, например, при создании анимации. Поскольку именно рисование нового кадра занимает по времени большую часть этого процесса, то очень хорошо, когда основа для прорисовки нового кадра уже сделана методом копирования, и не нужно рисовать весь кадр заново, а надо лишь внести небольшие добавления в уже имеющуюся основу.
   Всё это мне удалось реализовать в своём редакторе, о чём и рассказываю.

   КАК ОРГАНИЗОВАТЬ КОПИРОВАНИЕ КРУГОВОЙ ОБЛАСТИ

   Проблема состоит в том, что во многих цифровых средах ( и в Визуал Бейсике, в котором я работаю, тоже) копирование прямоугольных областей происходит просто и очень быстро, а для копирования круговой области приходится изощряться.
   У проблемы может быть два решения.
   Первое - копировать круговую область по-пиксельно, то есть, использовать тот метод, который реализуется при рисовании кистями - имеется список пикселей, входящих в круг заданного радиуса, и, в соответствии с координатами этих пикселей, круг заполняется цветом.
   Однако размер области копирования обычно в несколько раз превосходит размер кисти, и потому пикселей в области предназначенной для копирования будет в "несколько раз в квадрате" больше, и программа в моменты копирования будет зависать. Удобного копирования мы в этом случае не получим.

  Второе решение - вписать в круг прямоугольники и провести копирование с их помощью. И хотя результаты такого копирования станут накладываются друг на друга, что, в общем-то, как бы лишнее, но поскольку само копирование происходит очень быстро, то делу это никак не повредит.
  На иллюстрации вы можете видеть эти прямоугольники, заполняющие круг - три прямоугольника, синий, красный и зелёный, расположены горизонтально, и три таких же, расположенных с вертикальной ориентацией. Всего прямоугольников шесть.
  Для круга каждого радиуса прямоугольники задаются списком значений H и W - это координаты углов относительно центра круга.

   Практически копирование происходит так. Когда стилус касается поверхности планшета, то на рисунке появляется окружность, показывающая область копирования. Если эта область не устраивает нас по своему размеру, то мы изменяем радиус круга и вновь касаемся стилусом планшета.
   Если всё в порядке, то ведём стилусом в сторону (окружность при этом следует вместе с ним) и в нужной точке отрываем стилус от планшета. Скопированное изображение появляется вокруг этой точки.
   Это, так сказать, обычное копирование, ничем не примечательное, за исключением того, что копируемая область имеет форму круга.
   Более интересным является следующий режим копирования.

      КОПИРОВАНИЕ  с  СОХРАНЕНИЕМ НЕПРЕРЫВНОСТИ ЛИНИЙ РИСУНКА

    Поскольку копирование получилось очень быстрым, то его можно ещё более усложнить - копировать за один приём не один большой круг, а ряд кругов уменьшающегося размера, вложенных друг в друга как матрёшки.
    Эти круги мы и увидим, если при копировании передвинем стилус значительно.
    Однако, если мы сдвинем стилус в пределах первого, большего круга, не выходя за границы очерчивающей его окружности, то круги копирования последовательно наложатся друг на друга, плавно исказив линии рисунка, в том числе и линии контура фигуры.
     Именно так был изменён абрис  передней части птички на иллюстрации. Одним действием копирования получился вполне готовый следующий кадр, запечатлевший движение птички.

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

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

    Мультик с летающей птичкой, сделанный с использованием указанных принципов копирования, можно посмотреть тут - http://yadi.sk/i/jkoy6UyCOiDaAg

  В мультфильме кроме копирования кругами использован перенос с зеркальным отражением, копирование на прозрачном фоне, копирование с поворотом изображения на заданный угол, сдвиг изображения в области анимации, копирование анимации в буфере, наложение анимации на задний план и изменение чередования кадров на обратное. Все эти технические приёмы позволили ограничиться всего 23-мя различными кадрами с фигурой птички, которые, чередуясь между собой, использованы в мультфильме в разных комбинациях.   
___________
20.10.2019

вот ещё две пробы в которых движение сделано этим методом -
http://yadi.sk/i/MVrwDezYqh9bVg  http://yadi.sk/i/E5ss7oTjyOsENA
Мультик "Шорох снега" - http://youtu.be/2Kptm9z2N2M   тоже сделан этим способом.