ZX News #03
28 февраля 1997

Вращение картинок - алгоритм поворота изображения относительно заданного центра.

(C)1997 Bob Klubov
                  




          Долой горизонтальность!


  В этой статье пойдет речь о двух прог-
раммах, имеющихся в приложении,  которые
предназначены для  поворота  изображения
относительно заданного центра на опреде-
ленный угол. Заняться этой проблемой ме-
ня побудило  то,  что большинство всяких
надписей  (названия фирм, игр, мегадем и
прочих логотипов) расположены строго го-
ризонтально или вертикально, что уже на-
било оскомину. Конечноже такое простран-
ственное положение объясняется простотой
рисования,  но ведь нужно  совершенство-
вать дизайн своих  программ.  Нельзя от-
брасывать и тот  факт, что при раскраши-
вании "повернутых" изображений начинает-
ся война не на  жизнь, а на смерть с ат-
рибутами. Ну  тут ничем помочь не могу,-
выкручивайтесь сами как хотите! Еще нуж-
но остановиться на вот каком нюансе: при
повороте  изображения на угол не кратный
90  градусам  наблюдается незначительное
искажение изображения. Причину  этих ис-
кажений можно  понять,  если  посмотреть
  рис.1 и  почитать  дальше.
  Например, мы  поворачиваем
  пиксель 1 относительно пи-
  кселя 0 на 45  градусов пo
  часовой стрелке  в пиксель
  2. Так как  пиксель,  эле-
  ментарный элемент  изобра-
  жения, имеет форму квадра-
та, причем две его стороны  строго гори-
зонтальны, а   две  строго  вертикальны,
то пиксели 0 и 1 попадают  строго в свои
"лунки", но у пикселя 2 все стороны нак-
лонены на 45  градусов  и  поэтому здесь
возникает спорный вопрос: в какую из че-
тырех "лунок" его следует  поместить.  В
идеальном случае пиксель 2 нужно было бы
каким-то образом оставить  таким,  какой
он есть (квадрат, повернутый  на 45 гра-
дусов). 
  Итак, в приложении к жур- 
налу имеется две программы: 
Rotat0.0 и Rotat1.0. Первая 
из них работает быстрее, но 
не очень качественно,  вто- 
рая   работает    медленнее 
(очень медленно),  но с бо- 
лее высоким качеством.  Ре- 
зультаты работы обеих прог- 
рамм представлены на  рис.2 
(рис.2а поворачивался на 45 
градусов   при  помощи  Ro- 
tat0.0 - рис.2б; при помощи 
Rotat1.0 - рис.2в).         

  А теперь я попытаюсь рассказать об ал-
горитмах программ и почему их, собствен-
но говоря, две. Обе программы внешне ра-
ботают одинаково:

 1. спрашивают: показать ли каталог?
 2. ввод имени и  загрузка  картинки под
    адрес 16384 и длиною 6144;
 3. при помощи клавиш  Q,  A,  O,  P и M
    указывается центр вращения;
 4. ввод угла поворота  (против  часовой
    стрелки);
 5. ввод имени для  отгрузки "повернуто-
    го" изображения;
 6. поворот изображения;
 7. отгрузка полученной картинки.

  Алгоритмы  же   несколько  отличаются.
Причем отличается только  само вращение.
В Rotat0.0 вращение происходит следующим
образом:

 1. считываются в память координаты всех
    засвеченных точек (nx,ny);
 2. очистка экрана;
 3. каждая  точка  поворачивается на за-
    данный угол вокруг  центра и печата-
    ется по новой координате (rx,ry).

  Но изображение при таком алгоритме по-
лучается неважное.  Объяснение  этому  я
найти не могу,  поэтому пришлось исполь-
зовать другой алгоритм, который работает
как-бы  наоборот.  В  Rotat1.0  вращение
происходит следующим образом:

 1. берем  координату левой нижней точки
    (nx,ny);
 2. поворачиваем на угол,  обратный  за-
    данному,  получая  новые  координаты
    (rx,ry);
 3. смотрим, засвечен  ли пиксель по ко-
    ординате (rx,ry). Если  засвечен, то
    ставим точку по координате  (nx,ny);
 4. Переход к следующей точке и  переход
    на пункт 1, пока  не  переберем  все
    точки экрана, а их 256*176 штук.

  При использовании этого алгоритма изо-
бражение  получается получше. Более про-
должительное  время работы второго алго-
ритма связано с тем, что в нем перебира-
ются все пиксели экрана, а не только за-
свеченные, как в Rotat0.0.

                   Еще следует отметить,
                   что обе  программы на
                   97% написаны в Бейси-
                   ке и в следствие это-
                   го сильно тормозят. Я
                   не дружу с  калькуля-
                   тором Спектрума, поэ-
                   тому  написал  все  в
                   Бейсике. 


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

  Да, чуть не забыл:  во время  поворота
изображения  программой  Rotat0.0, новое
строится  сразу; во время поворота прог-
раммой Rotat1.0, новое строится в памяти
и лишь в конце перебрасывается на экран.
Время работы первой программы зависит от
количества засвеченных пикселей, а время
работы второй - всегда примерно одинако-
во: чуть больше часа (кто вас научил так
ругаться?!).

  На  этом  время нашего эфира подошло к
концу. До новых встреч


  ____________________________________



Другие статьи номера:

От автора - Новшества во вьювере.

Анкетиривание - Ответьте на 10 вопросов и вы попадете в энциклопедию "SPECCY особей".

Обзор журналов - О журналах : SPECTROFON,ZX-FORMAT,ADVENTURER,SPECCY, FAULTLESS.

Моя собака - Фокстерьер - мечты и реальность.

ANDY CAPP - Описание игры ANDY CAPP.

WEC LE MANS - Небольшое вскрытие WEC LE MANS.

RED HAWK - Описание игры RED HAWK.

Вращение картинок - алгоритм поворота изображения относительно заданного центра.

Сглаживание картинок - Алгоритм сглаживания статических изображений.

Морфирование картинок - Об эффекте плавного перетикания одного изображения в другое.

Последний звездный боец - Презентация луганской игры - THE LAST STAR FIGHER.

Как вы знаете Spectrum - Тест "Как хорошо вы знаете Spectrum".

Сокращения - Общепринятые сокращения (это должен знать каждый).

Война за феньки - Хроника однодневной войны (Игровая секция Толкиновского Общества в действии).

Ролевая игра - Немного о ролевых играх.

Умные мысли - Умные мысли великих людей.

Письма читателей - Первые отклики читателей о журнале: Роман Рублаченко, Вячеслав Садоненко, Impetus Led.

Отчет за год - Прошел год... с момента выхода первого номера.

Coming soon - что вас ждет в 4-м номере журнала.

Приложение - Смагли-3 демо, Andy Capp, Red Hawk!, SGLEXMP, Crystal Dream members in East Ucrainian State University, Screen Editor, Rotate, Morph, Last Star Fighter, UFO-2 Help.

Реклама - Реклама и обьявления ...

Авторы - авторы журнала.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Игрушки - "Last battle" (Последняя битва) подробное описание.
FreeNews - Да, теперь с полной уверенностью можно сказать, что такое Millennium Demoparty.
Анкета! - шуточный опрос.

В этот день...   19 сентября