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

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

<b>Вращение картинок</b> - алгоритм поворота изображения относительно заданного центра.
(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.

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

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


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

Похожие статьи:
Обратный отсчет - Компьютеры готовы отбросить нас на 100 лет назад.
Обзор новинок - Peking, Fisher.
Вступление - AREAsoft снова с Вами !
Вступление - содержание номера.
Interface - elph: "игры, в которые я не играл".

В этот день...   1 января

SibNews #08, Woot! #01, Spectrum Magazine #01, ACNews #25, Psychoz #14, ACNews #14, Last 128 #08, Last 128 #06, Last 128 #05, Last 128 #04, Last 128 #03, Last 128 #02, Last 128 #09, Last 128 #3.5, Last 128 #8.025, Sinclair Club #05, Last 128 #M!R 01, Fantadrom #01, Buzz #20, Last 128 #01, DonNews #13, Nicron #120, Promised Land #01, Inferno #01, Marazm #25, Ultimathum #01, Marazm #21, Hooy Mag #02, KrNews #11, Marazm #22, Marazm #23, ZX Football 2000 #01, Codemania #01, Always #03, Bugs #02, IzhNews #08, Virtual Worlds #01, Listok #04, Scenergy #02, Flash Info #18, Marazm #16, Marazm #17, Zed #01, Balagan #02, ZX Format #08, ZX Power #03, Shock #01, Impulse #02, Deja Vu #03, ZX Club #08, ZX Club #06, Numberology #01, Marazm #13, Marazm #12, Marazm #14, Gorodok #02, Zodiac #01, Marazm #15, Deja Vu #07, Marazm #11, Deja Vu #07, Playboy #03, Crazy News #2, Crazy News #4, ZX Light #01, Crazy News #5, Playboy #02, ZX News #03, ZX Review #1-2, Read Me #02, Crazy News #3, Nicron #13, Read Me #01, Public Spirit #01, Faultless #06, Faultless #05, ZX Software #01, Stump #04, Speccy #07, Возраждение #0, Speccy #03, On-Line #17, Scene+ #01, Welcome Press #01, ZX Konig #04, Adventurer #01, Faultless #05, Faultless #04, Di Halt #01, Faultless #01, Playboy #01, Crazy News #1, Faultless #03, Pioneer #03, Sinclair Town #02, ZX Magazine #01, Eldorado #01, ZX Magazine #02, Spectron #01, ZX News #01, ZX Konig #02, 200 #W, Welcome Press #00, Dune #07, Subliminal Extacy #01, Subliminal Extacy #02, ZX Konig #01, Subliminal Extacy #00, Muchomor #01, Spectrofon #01, ZX Revija #02, Outlet #01, Outlet #1-3