Построение снежинки Коха

Словесное описание алгоритма решения задачи, в виде блок-схемы. Обоснование выбора основных инструментов реализации алгоритма. Пользовательский интерфейс программы, ее исходный код и спецификация. Рекомендации по улучшению или добавлению функционала.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.