Построение снежинки Коха
Словесное описание алгоритма решения задачи, в виде блок-схемы. Обоснование выбора основных инструментов реализации алгоритма. Пользовательский интерфейс программы, ее исходный код и спецификация. Рекомендации по улучшению или добавлению функционала.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 24.06.2011 |
Размер файла | 133,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
12
Размещено на http://www.allbest.ru/
Курсовая работа
Фрактальная графика
Задание на выполнение курсовой работы
Построить «снежинку Коха»
Реализовать снегопад из нескольких снежинок
Словесное описание алгоритма решения задачи
Для начала нужно построить кривую Коха. Процесс её построения выглядит следующим образом: берём единичный отрезок, разделяем на три равные части и заменяем средний интервал равносторонним треугольником без этого сегмента. В результате образуется ломаная, состоящая из четырех звеньев длины 1/3. На следующем шаге повторяем операцию для каждого из четырёх получившихся звеньев
Три копии кривой Коха, построенные (остриями наружу) на сторонах правильного треугольника, образуют замкнутую кривую, называемую снежинкой Коха.
Пусть дан список вершин треугольника , - направление обхода стороны равностороннего треугольника, если 1 - направо от точки, если -1 - налево.
Для того чтобы получить точку необходимо построить D-сторонню нормаль и получим формулу
Если значение итераций level >1, то строим кривую Коха вызывая функцию paint.
Если значение итераций level=1, то алгоритм завершает работу возвращением списка вершин в порядке их следования. Затем фрактал Коха рисуется как последовательность между вершинами списка P.
Описание и обоснование выбора основных инструментов реализации алгоритма
Данная программа написана на языке С так как библиотека языка отлично подходит для операционной системы Linux. Данный язык очень удобен для написания программ. Его основные преимущества:
1. переносимость программ на компьютеры различной архитектуры и из одной операционной системы в другую
2. лаконичность записи алгоритмов
3. логическая стройность программ
Также в данной работе используется графическая библиотека Opengl.
OpenGL - это мощный программный интерфейс, применяемый для получения высококачественных, программно генерируемых изображений и интерактивных приложений, использующих двух- и трехмерные объекты, а также растровые изображения.
С точки зрения программиста OpenGL - это программный интерфейс для графических устройств, таких как графические ускорители. Он включает в себя около 150 различных команд, с помощью которых программист может определять различные объекты и производить рендеринг. OpenGL имеет хорошо продуманную внутреннюю структуру и довольно простой процедурный интерфейс. Несмотря на это с помощью OpenGL можно создавать сложные и мощные программные комплексы, затрачивая при этом минимальное время по сравнению с другими графическими библиотеками.
Описание пользовательского интерфейса программы
Для запуска данной программы необходимо открыть терминал и прописать строчку «./koch1»
Исходный код программы
1. #include <GL/glut.h>
2. #include <stdio.h>
3. #include <stdlib.h>
4. //assign alternative names to existing types
5. typedef GLfloat point2 [2];
6. int level;
7. point2 a, b;
8. int l, yv, k, t;
9. int value;
10. //initialization
11. void myinit(void) {
12. // set colour for window
13. glClearColor (1. 0,1. 0,1. 0,1.0);
14. // set colour for snowflake
15. glColor3f (0. 5,0. 6,0.7);
16. //load the matrix
17. glMatrixMode (GL_PROJECTION);
18. //load identity matrix
19. glLoadIdentity();
20. // set koordinates for painting
21. gluOrtho2D (0. 0,600. 0,0. 0,600.0);
22. glMatrixMode (GL_MODELVIEW);
23. }
24. //find points and divide our length
25. void paint (point2 a, point2 b, int level) {
26. point2 p1, p2, p3, c1, c2, c3, a1, a2, a3;
27. float dx, dy;
28. dx = b[0] - a[0];
29. dy = b[1] - a[1];
30. //point p1
31. p1 [0] = a[0]+dx/3;
32. p1 [1] = a[1]+dy/3;
33. //point p2
34. p2 [0] = a[0]+2*dx/3;
35. p2 [1] = a[1]+2*dy/3;
36. //point p3
37. p3 [0] = -0.2886751f*dy+0.5*dx + a[0];
38. p3 [1] = 0.2886751f*dx+0.5*dy + a[1];
39. //point c1
40. c1 [0] = a[0]+dx/3;
41. c1 [1] = a[1]+dy/3;
42. //point c2
43. c2 [0] = a[0]+2*dx/3;
44. c2 [1] = a[1]+2*dy/3;
45. //point c3
46. c3 [0] = -0.2886751f*dy+0.5*dx + a[0];
47. c3 [1] = 0.2886751f*dx+0.5*dy + a[1];
48. dx = b[0] - a[0];
49. dy = b[1] - a[1];
50. //point a1
51. a1 [0] = a[0]+dx/3;
52. a1 [1] = a[1]+dy/3;
53. //point a2
54. a2 [0] = a[0]+2*dx/3;
55. a2 [1] = a[1]+2*dy/3;
56. //point a3
57. a3 [0] = -0.2886751f*dy+0.5*dx + a[0];
58. a3 [1] = 0.2886751f*dx+0.5*dy + a[1];
59. if (level>1)
60. {
61. // low interecion's number
62. level -;
63. paint (a, p1, level);
64. paint (p1, p3, level);
65. paint (p3, p2, level);
66. paint (p2, b, level);
67. paint (a, c1, level);
68. paint (c1, c3, level);
69. paint (c3, c2, level);
70. paint (c2, b, level);
71. paint (a, a1, level);
72. paint (a1, a3, level);
73. paint (a3, a2, level);
74. paint (a2, b, level);
75. }
76. else if (level==1) {
77. //draw right triangle
78. glBegin (GL_LINE_LOOP);
79. glVertex2fv(a);
80. glVertex2fv(p1);
81. glVertex2fv(p1);
82. glVertex2fv(p2);
83. glVertex2fv(p2);
84. glVertex2fv(p3);
85. glVertex2fv(p3);
86. glVertex2fv(b);
87. glEnd();
88. glBegin (GL_LINES);
89. glVertex2fv(a);
90. glVertex2fv(c1);
91. glVertex2fv(c1);
92. glVertex2fv(c2);
93. glVertex2fv(c2);
94. glVertex2fv(c3);
95. glVertex2fv(c3);
96. glVertex2fv(b);
97. glEnd();
98. glBegin (GL_LINES);
99. glVertex2fv(a);
100. glVertex2fv(a1);
101. glVertex2fv(a1);
102. glVertex2fv(a2);
103. glVertex2fv(a2);
104. glVertex2fv(a3);
105. glVertex2fv(a3);
106. glVertex2fv(b);
107. glEnd();
108. }
109. }
110. // output on display
111. void display(void) {
112. //point's koordinates
113. point2 p1={50. 0,600.0}, p2={75. 0,665.0}, p3={105. 0,600.0};
114. point2 a1 = {105. 0,740.0}, a2 = {150. 0,770.0}, a3 = {200. 0,740.0};
115. point2 c1 = {335. 0,670.0}, c2 = {395. 0,710.0}, c3 = {400. 0,670.0};
116. glClear (GL_COLOR_BUFFER_BIT);
117. //push current matrix
118. glPushMatrix();
119. //translate on l parameter along y koordinates
120. glTranslatef (1, - l, 1);
121. paint (p1, p2,5);
122. paint (p2, p3,5);
123. paint (p3, p1,5);
124. //pop current matrix
125. glPopMatrix();
126. glPushMatrix();
127. //translate k parameter along y koordinates
128. glTranslatef (1, - k, 1);
129. paint (c1, c2,5);
130. paint (c2, c3,5);
131. paint (c3, c1,5);
132. glPopMatrix();
133. glPushMatrix();
134. //translate t parameter along y koordinates
135. glTranslatef (1, - t, 1);
136. paint (a1, a2,5);
137. paint (a2, a3,5);
138. paint (a3, a1,5);
139. glPopMatrix();
140. // change buffers
141. glutSwapBuffers();
142. }
143. // function timer fo animation
144. void timer (int value) {
145. l=yv;
146. // translate with step 3
147. yv+=3;
148. if (yv>670) {
149. yv-=670;
150. }
151. // translate with step 1
152. k+=1;
153. if (k>670) {
154. k-=670;
155. };
156. // translate with step 8
157. t+=8;
158. if (t>670) {
159. t-=670;
160. };
161. //call function display after 30
162. display();
163. // call function timer
164. glutTimerFunc (30, timer, value);
165. //redrawing display
166. glutPostRedisplay();
167. };
168. int main (int argc, char **argv) {
169. glutInit (&argc, argv);
170. glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGB);
171. glutInitWindowSize (640,480);
172. glutInitWindowPosition (40,30);
173. glutCreateWindow («Koch Snowflake»);
174. glutDisplayFunc(display);
175. glutTimerFunc (30, timer, value);
176. myinit();
177. glutMainLoop();
178. return 0;
179. }
программа алгоритм снежинка кох
Спецификация программы
glutInit (&argc, argv); - инициальзация режима GLUT
glutInitDisplayMode (GLUT_DOUBLE|GLUT_RGB); - иниц. модуля дисплея
glutInitWindowSize (640, 480); - размер окна
glutCreateWindow («Koch Snowflake»); - создание окна
glutDisplayFunc(@disp); - функция вызывается при перерисовки окна
glutTimerFunc (30, timer, value); - таймер
glutMainLoop; - переход в главный цикл GLUT
glutPostRedisplay(); - перерисовка дисплея
glBegin (GL_LINES); - рисование граней
glutDisplayFunc(disp); - вызов функции дисплея
Рекомендации по улучшению или добавлению функционала
Для улучшения функционала можно добавить:
· Возможность масштабирования снежинок
· Возможность изменения траектории движения
· Возможность случайного изменения цвета при прохождении определенного количества шагов
Описание проблемных мест в коде и алгоритме
Программа не позволяет создать снегопад из снежинок больше чем 3 штуки. Это связано с большими вычисления каждой из линий, поэтому для некоторых ЭВМ происходят проблемы при анимации.
Список литературы
1) Никулин Е.А. Компьютерная геометрия и алгоритмы машинной графики Спб: БВХ - Петербург 2003
2) Роджерс Д. Алгоритмические основы машинной графики. М.:Мир, 1989.
3) Морозов А.Д. Введение в теорию фракталов
4) http://en.wikipedia.org/wiki/Koch_snowflake - википедия
Размещено на Allbest.ru
Подобные документы
Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012Математическое обоснование метода решения задачи: определенный интеграл, квадратурная формула Симпсона (формула парабол). Словесное описание алгоритма и составление его блок-схемы. Выбор языка программирования. Текст программы решения задачи, ее листинг.
курсовая работа [593,6 K], добавлен 09.07.2012Разработка алгоритма, выполняющего поиск наилучшего решения на каждый ход в игре "крестики-нолики" (используя минимальный алгоритм). Обоснование выбора программных средств для решения задачи. Блок-схема интеллектуального алгоритма реализации программы.
контрольная работа [380,0 K], добавлен 28.04.2014Составление алгоритма и разработка в среде программирования Delphi 7 программы, вычисляющей макроэкономические индексы цен. Реализация программы в виде 4 форм и 1 диалогового окна. Описание алгоритма решения задачи. Текст программы, руководство оператора.
курсовая работа [1,4 M], добавлен 04.06.2013Введение в объектно-ориентированное программирование. Постановка задачи. Описание алгоритма решения в псевдокоде (команды в виде текста на русском языке). Исходный текст программы на С. Тестирование программы. Модификация программы. Полиморфизм.
курсовая работа [294,0 K], добавлен 08.09.2008Алгоритм решения задачи: расположение значений ветора в порядке возрастания методом "Всплывающих пузырьков". Блок-схема алгоритма решения задачи. Описание блок-схемы, распечатка программы. Операторы: rem, dim, print, input, lprint using, for-next.
курсовая работа [17,4 K], добавлен 27.02.2010Основные принципы функционирования ПК. Определение конфигурации компьютера с требуемыми характеристиками. Характеристики основных компонентов современного ПК. Описание алгоритма решения задачи с использованием MS Excel. Блок-схема алгоритма решения задач.
курсовая работа [3,5 M], добавлен 20.12.2010Основные аналитические соотношения. Блок схемы и алгоритм решения задачи. Проверка работоспособности алгоритма вручную. Таблица идентификации переменных. Формы входной и выходной печати. Разработка и отладка программы. Инструкция для работы с программой.
курсовая работа [69,8 K], добавлен 13.02.2012Изучение понятия и свойств алгоритма. Определение сущности технологии Robson. Исполнитель, а также блок-схема алгоритма или его графическое представление, в котором он изображается в виде последовательности связанных между собой функциональных блоков.
реферат [155,9 K], добавлен 19.10.2013Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014