Файл: Графика и рекурсивные алгоритмы.doc

Добавлен: 29.10.2018

Просмотров: 303

Скачиваний: 11

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Г
рафика и рекурсивные алгоритмы


Рассмотрим пример рисования рекурсивной самоподобной фигуры.






Основная фигура – окружность радиуса r с четырьмя меньшими окружностями радиусов r/2 с центрами в точках A, B, C, D. Точка А расположена на основной окружности под углом 45 градусов от горизонтали, точка B – под углом 135°=90°+45° от горизонтали,

точка С – под углом 225°=180°+45° от горизонтали, точка D – под углом 315°=45°+ 90°+90°+90°. Если координаты центра основной окружности Xc, Yc, тогда точки A, B, C, D будут иметь координаты:

A (Xc+ r cos45°, Yc+ r sin45°)

B (Xc+ r cos(45°+90°), Yc+ r sin(45°+90°))

C (Xc+ r cos(45°+2 90°), Yc+ r sin(45°+2 90°))

D (Xc+ r cos(45°+3 90°), Yc+ r sin(45°+3 90°))

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


Алгоритм рисования самоподобной фигуры


Круги(300, 300, 200, 10)


Функция круги(xc, yc, r, rmin)

Если r<rmin тогда

Выход

КонецЕсли


Круг (r, xc, yc)

P=pi()/4

Цикл по i от 0 до 3

xc1=xc+r*cos(p+i*p*2)

yc1=yc+r*sin(p+i*p*2)

круги(xc1, yc1, r/2, rmin)

КонецЦикла


В результате выполнения этой процедуры должна получиться фигура:




1.

_screen.Cls


krug(350,350,150)


FUNCTION krug

LPARAMETERS x,y,r

LOCAL ph1,ph2,ph3,ph4

IF r<10

RETURN

ENDIF

WAIT window "hhh"



_screen.Circle(r,x,y)


ph1=PI()/4

x1=x+r*COS(ph1)

y1=y+r*SIN(ph1)

krug(x1,y1,r/2)

ph2=ph1+PI()/2

x2=x+r*COS(ph2)

y2=y+r*SIN(ph2)

krug(x2,y2,r/2)

ph3=ph2+PI()/2

x3=x+r*COS(ph3)

y3=y+r*SIN(ph3)

krug(x3,y3,r/2)

ph4=ph3+PI()/2

x4=x+r*COS(ph4)

y4=y+r*SIN(ph4)

krug(x4,y4,r/2)

RETURN






2.

_screen.Cls

krug(350,350,150)

FUNCTION krug

LPARAMETERS x,y,r

LOCAL ph1,ph2,ph3,ph4

IF r<10

RETURN

ENDIF

*WAIT window "hhh"

_screen.Circle(r,x,y)


ph1=PI()/3

x1=x+r*COS(ph1)

y1=y+r*SIN(ph1)

krug(x1,y1,r/2)

ph2=ph1+PI()*2/3

x2=x+r*COS(ph2)

y2=y+r*SIN(ph2)

krug(x2,y2,r/2)

ph3=ph2+PI()*2/3

x3=x+r*COS(ph3)

y3=y+r*SIN(ph3)

krug(x3,y3,r/2)

RETURN