КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Применение рекурсииПрименение рекурсии. Сглаживание кривых. Лекция №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.
Дата добавления: 2014-01-14; Просмотров: 386; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |