Лабораторная работа № 1 «Фрактальная графика». Лабораторная работа 1 Фрактальная графика По дисциплине Компьютерная графика студент группы з511П85
Скачать 110.01 Kb.
|
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР) Кафедра компьютерных систем в управлении и проектировании (КСУП) Лабораторная работа № 1 «Фрактальная графика» По дисциплине Компьютерная графика Выполнил: студент группы з-511П8-5 Кузнецов Сергей Сергеевич Проверил: преподаватель Перемитина Татьяна Олеговна Томск 2023 Содержание Введениe Описание исходных данных Описание используемой среды программирования Функциональные возможности программы Приложение №1 Приложение №2 Введение Задача: Реализовать программу, строящую фрактал с заданными границами расчета X0 (-1.0), Xn (1.0), Y0 (-1.0), Yn (1.0). Цель работы: изучение теоретических основ фрактальной графики, приобретение практических навыков построения алгебраических фракталов. Описание исходных данных x0,xn,y0,yn – Диапазон координат yc,xc – Экранные координаты my,mx - Масштаб для перевода координат в экранные Описание используемой среды программирования Для выполнения поставленной задачи мной выбрана среда программирования PascalABC Функциональные возможности разработанного приложения В листинге программы можно менять координаты по х и у тем самым проявляется вариативность программы . В данных написаны следующие координаты X0 (-1.0), Xn (1.0), Y0 (-1.0),Yn (1.0). Приложение №1 Полный листинг программы: program Newton; uses GraphABC,Utils; type Complex = Record x : Real; y : Real; end; const iter = 50; max = 1e+6; min = 1e-6; var z, t, d : Complex; y, x, p : Real; xc, yc, n : Integer; mx, my : real; x0,xn,y0,yn : real; {Функция для перевода кода цвета в константу} function IntToColor(const kode: integer):color; begin case kode of 0: result:=clBlack; 1: result:=clBlue; 2: result:=clGreen; 3: result:=clCyan; 4: result:=clRed; 5: result:=clDarkMagenta; 6: result:=clBrown; 7: result:=clLightGray; 8: result:=clDarkGray; 9: result:=clLightBlue; 10: result:=clLightGreen; 11: result:=clLightCyan; 12: result:=clLightPink; 13: result:=clMagenta; 14: result:=clYellow; 15: result:=clWhite; end; IntToColor:=result; end; begin SetWindowSize(790,500); Window.Title := 'Фрактал Ньютона'; Randomize; x0:=-1.0;xn:=1.0; y0:=-1.0;yn:=1.0; {начало экранных координат, смещено влево и вверх} xc := round(790*(-x0)/(xn-x0)); yc := round(500*(-y0)/(yn-y0)); {масштаб для перевода координат в экранные} mx:=xc/(-x0); my:=yc/-y0; y:=y0;{цикл по у} repeat x:=x0; {цикл по х} repeat n := 0; z.x := x; z.y := y; d := z; while (sqr(z.x)+sqr(z.y) < max) and (sqr(d.x)+sqr(d.y) > min) and (n < iter) do begin t := z; p := sqr(sqr(t.x)+sqr(t.y)); z.x := 2/3*t.x + (sqr(t.x)-sqr(t.y))/(3*p); z.y := 2/3*t.y*(1-t.x/p); d.x := abs(t.x - z.x); d.y := abs(t.y - z.y); Inc(n); end; PutPixel(xc + round(x*mx),yc + round(y*my),IntToColor(16 - (n mod 16))); x:=x+0.001;{шаг по x: чем больше шаг, тем быстрее рисуется, но менее качественная картинка} until x>xn; y:=y+0.001; {шаг по y} until y>yn; end. Приложение №2 Основное окно программы: |