ПРИМЕНЕНИЕ РЕКУРСИИ

Применение рекурсии. Сглаживание кривых.

Лекция №3

И интерактивные системы

Графическое и геометрическое моделирование


СОДЕРЖАНИЕ

3.1 Применение рекурсий для решения ряда задач 3.2 Построение дерева Пифагора 3.3 Сглаживание кривых в двухмерном пространстве. Понятие В-сплайна. Использование В-сплайна для сглаживания кривых

Ряд задач может быть решен с применением рекурсии. Вот один из примеров:

Для заданных трех чисел Xc, Yc и r соединить точки с координатами

Xi=Xc+r*cosfi

Yi=Yc+r*sinfi

(i=0,1,2,3,4,5; fi=i*144°)

что в результате дает звезду. Последовательно (как часть задачи!) выполнить подобную работу еще 5 раз , но теперь с другими тремя числами :

Xc’=Xc+2*r*cosf

Yc’=Yc+2*r*sinf

r’=0.5

(j=0,1,2,3,4; jj=36°+j*72°)

Выполнение задачи продолжается до тех пор, пока задаваемая величина г будет не меньше 0.1. Для начальной (или главной) задачи задаваемые числа будут равны Xc=0, Yc=0, r=1. Как и ранее, будем использовать автоматическое масштабирование и размещение. Ниже приводится программа, решающая поставленную задачу.

 

/*STARS: Звезды различных размеров*/

#include "math.h"

#include "stdio.h"

FILE *fp;

 

struct {float xx; float yy; int ii;} s;

 

void pfopen(){ fp=fopen("scratch", "wb");}

 

void pmove(float x,float y)

{ s.xx=x; s.yy=y; s.ii=0; /* 0 = перо поднято */

fwrite(&s, sizeof s, 1, fp);

}

 

void pdraw(float x,float y)

{ s.xx=x; s.yy=y; s.ii=1; /* 1 = перо опущено */

fwrite(&s, sizeof s, 1, fp);

}

 

void pfclose(){ fclose(fp); }

void star(float xC,float yC,float r)

{ float phi, r_half, r_double,

factor=0.0174533; /* factor = pi/180 */

int i;

if (r<0.1) return;

pmove(xC+r,yC);

for (i=1; i<=5; i++)

{ phi=i*144*factor;

pdraw(xC+r*cos(phi), yC+r*sin(phi));

}

r_half=0.5*r; r_double=2*r;

for (i=0; i<5; i++)

{ phi=(36+i*72)*factor;

star(xC+r_double*cos(phi), yC+r_double*sin(phi), r_half);

}

}

 

void main()

{ pfopen();

star(0.0,0.0,1.0);

pfclose();

}

Рис. 3.1 Результат работы программы STARS

После этой программы должна быть вызвана программа GENPLOT, описанная в предыдущем параграфе, результат их совместной работы показан на рис. 3.1.