ZX-Ревю 1997 №1-2 1997 г.

Этюды - процедура рисования круга без использования вычислений с плавающей точкой.


ИФК.: Евгений и Алексей Федяевы представили на рассмотрение читателей ZX РЕВЮ процедуру, взятую из boot REAL MASTER, и свою процедуру рисования круга.

КОРР.: В boote красиво горит надпись в верхней части экра

на. Формат картинки: справо побайтно, сверху вниз по 1 пиксельной строчке, без атрибутов.

Если IX указывает на пустую область памяти, то вся заданная область экрана сгорает.

ORG

40000

GGG

CALL

FIRE

CALL

OG1

LD

A, 127

IN

A,(#FE)

BIT

0,A

,RET

Z

JR

GGG

OG1

LD

A,R

; п.п. случайных

LD

L,A

чисел

LD

A,R

AND

7

LD

H,A

PUSH

HL

POP

IY

RET

FIRE LD IX.50000 ; адрес картинки

LD С,64 ; ее высота в PIX

LD HL,#4000 ; адрес вывода в экране LD E.L LD D.H OG2 PUSH HL

LD В, 14 ; ширина в байтах OG3 XOR (IY+0) OR (IY+1) если убрать эту команду,

AND (HL) то высота огня уменьшится.

OR (IX+1) если заменить на OR 0,

LD (DE),A то все по точкам сгорит. INC L INC Е INC IY

ШШШШШШШ

INC

IX

DJNZ

OG3

POP

HL

LD

E.L

LD

D.H

CALL

DAD1

DEC

С

JR

NZ.OG2

RET

DAD1 INC

H

; п.п. расчета адреса в

LD

A.H

; дисплейном файле

AND

7

на PIX ниже

RET

NZ

LD

A.L

ADD

A,32

LD

L.A

RET

С

LD

A,H

SUB

8

LD

H,A

RET

Теперь программа рисования круга без использования вычислений с плавающей точкой.

Алгоритм рисования круга взят из книги Роджерса Д. "Алгоритмические основы машинной графики" Перевод с англ. Москва, издательство "Мир", 1989.

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

Теперь описание алгоритма. Основные положения: 1) круг находится в своей системе отсчета - его центр в координатах (0,0);

этюды

2)

3)

4)

5)

6)

7)

8)

1) 2)

3)

4)

5)

6)

7)

8) 9)

строится он от координат (0,-R) до (R,0), т.е. дуга; остальные 3 дуги получаются отражением от координатных осей;

при расчетах следует выбрать

1 из 3 случаев: увеличивается только X, только Y, увеличиваются и X и Y;

этот алгоритм основывается на приближенности точки к идеалу. Для этого введем величину С. Возьмем, к примеру, смещение точки по диагонали, тогда: С=(Х+1)Ж2+(У+1Г2-КЛ2. начальное значение: С=(0+1Г2+(У+1Г2-КА2=2*(1-

R)

величины для горизонтального и .вертикального смещения: CG=(X+in+YA2-RA2=C-(2*Y+1);

(Y+1)A2-R~2=C-(2*X+1) выбирается, какая из них ближе к 0, т.е. наименьшую по абсолютной величине, т.к. по построению Х>0, Y<0 видно, что при C<=Y ближе будет CG, т.е. выбирается горизонтальное направление ОХ ближе CV, т.е. вертикальное, в остальных случаях диагональное.

Теперь сам алгоритм: X=0,Y=-R,C=2*(1-R)=2*(Y+1) PLOT (+-X,+-Y) ЕСЛИ Y=0 ТО ВЫХОД С1=С

ЕСЛИ С1>Х ТО НА ПУНКТ 8 Х=Х+1, С=С+2*Х+1 ЕСЛИ C1<=Y ТО НА ПУНКТ

2

Y=Y+1, C=C+2*Y+1 НА ПУНКТ 2

ритм

этом в следующий раз.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Paradox 2000 - Интервью: Disabler/Disabler Production Laboratory.
Эпилог - Всем поучаствовавшим в тусовке "пески" - огромное спасибо!
Обзор - обзор игрушек: Boovie, Motor Massacre, Soccer Pinball, Huxley 1 & 2.
Part 12 - Spectrum on the Net.
Дискуссия - "Multitask. Реалии и мифы..."

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