ПРИМЕНЕНИЕ РЕКУРСИИ
Применение рекурсии. Сглаживание кривых.
Лекция №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();
}
|

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