Файл: Лабораторная работа 1 Фрактальная графика По дисциплине Компьютерная графика студент группы з511П85.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.04.2024
Просмотров: 46
Скачиваний: 4
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ
УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра компьютерных систем в управлении
и проектировании (КСУП)
Лабораторная работа № 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
Функциональные возможности разработанного приложения
В листинге программы можно менять координаты по х и у тем самым проявляется вариативность программы . В данных написаны следующие координаты X
0 (-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
Основное окно программы: