Файл: Лабораторная работа 1 Фрактальная графика По дисциплине Компьютерная графика студент группы з511П85.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.04.2024

Просмотров: 46

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное

учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ

УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра компьютерных систем в управлении

и проектировании (КСУП)


Лабораторная работа № 1

«Фрактальная графика»

По дисциплине Компьютерная графика

Выполнил: студент группы з-511П8-5

Кузнецов Сергей Сергеевич

Проверил:

преподаватель

Перемитина Татьяна Олеговна


Томск 2023

Содержание

  1. Введениe

  2. Описание исходных данных

  3. Описание используемой среды программирования

  4. Функциональные возможности программы

  5. Приложение №1

  6. Приложение №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

Основное окно программы: