Файл: Вариант 6 Цель работы Научиться составлять алгоритмы решения графических задач. Научиться составлять алгоритмы и программы в соответствии с этими алгоритмами..docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.12.2023
Просмотров: 27
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Вариант 6
Цель работы:
-
Научиться составлять алгоритмы решения графических задач.
-
Научиться составлять алгоритмы и программы в соответствии с этими алгоритмами.
-
Научиться программированию на языке высокого уровня Pascal.
-
Изучить математический аппарат дисциплины «Компьютерная графика».
Постановка задачи:
Задание 1
Реализовать программу, строящую фрактал с заданными границами расчета . В таблице 1 каждому номеру варианта (№) соответствует вид фрактала и границы расчета.
Вариант | Вид фрактала | | | | |
6 | Джулия | –0.9 | 0.9 | –1.1 | 1.0 |
Алгоритм построения множества Жюлиа
Шаг 0:
Выбрать параметр
Выбрать число M, которое считается бесконечно большим.
Положить , где - разрешающая способность экрана.
Для всех пар , где и выполнить следующую процедуру:
Шаг 1:
Положить
Шаг 2 (итерация):
Вычислить по , используя формулы
Увеличить счетчик k на 1.
Шаг 3 (оценка):
Вычислить .
Если , то выбрать цвет k и идти дальше на Шаг 4.
Если , то выбрать цвет 0 (черный) и идти на Шаг 4.
Если , вернуться на Шаг 2.
Шаг 4:
Приписать цвет k точке экрана и перейти к следующей точке, начиная с Шаг 1.
program J2;
uses Graph, Crt;
type
TComplex = record
X : Real;
Y : Real;
end;
const
iter = 50;
max = 16;
x0=-0.9;
xn=0.9;
y0=-1.1;
yn=1.0;
var
z, t, c : TComplex;
n : Integer;
Cancel : Boolean;
gd, gm : Integer;
msx,msy : Real;
x, y :Real;
xc, yc : Integer;
begin
Cancel := false;
Randomize;
gd := Detect;
InitGraph(gd,gm,'c:\bp\bgi');
xc:=GetMaxX div 2;
yc:=GetMaxY div 2;
msx:= xc/xn;
msy:= yc/yn;
y:=y0;
while y<=yn do
begin
x:=x0;
while x<=xn do
begin
n := 0;
z.x := x*msx * 0.005;
z.y := y*msy * 0.005;
c.x := 0.11;
c.y := -0.66;
while (sqr(z.x) + sqr(z.y) < max) and (n < iter) do
begin
t := z;
z.x := sqr(t.x) - sqr(t.y) + c.x;
z.y := 2*t.x*t.y + c.y;
Inc(n);
if keypressed then
cancel := true;
end;
if n < iter then
begin
PutPixel(xc+round(x*msx),yc+round(y*msy),16 - (n mod 16));
end;
if cancel then
exit;
x:=x+0.002;
end;
y:=y+0.002;
end;
Readkey;
end.
Задание 2
Реализовать программу, строящую двумерное изображение заданной фигуры. Необходимо выполнить 2D преобразования и отобразить новое положение фигуры.
В таблице 2 каждому номеру варианта (№) соответствует фигура для построения
, и вид двумерного преобразования. Координаты вершин объектов сцены задаются самостоятельно.
6 | | Растяжение вдоль оси Y и поворот на 45° относительно начала координат |
program kontrgraf;
uses crt,graph;
var dr,m:integer;
x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x22,x33,x44,x55,x66,x77,x88,x99,x1010:integer;
y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y22,y33,y44,y55,y66,y77,y88,y99,y1010:integer;
pressedkey:char;
label 1;
begin
x1:=100; x2:=200; x3:=250; x4:=200; x5:=100;
x6:=50; x7:=150; x8:=200; x9:=150; x10:=100;
y1:=250; y2:=250; y3:=350; y4:=450;
y5:=450; y6:=350; y7:=300; y8:=350; y9:=400; y10:=350;
dr:=Detect;
InitGraph(dr,m,'');
SetColor(5);
Line(50,50,640,50);
Line(50,50,50,480);
SetColor(14);
Line (x1,y1,x2,y2); {1-2}
Line (x2,y2,x3,y3); {2-3}
Line (x3,y3,x4,y4); {3-4}
Line (x4,y4,x5,y5); {4-5}
Line (x5,y5,x6,y6); {5-6}
Line (x6,y6,x1,y1); {6-1}
Line (x7,y7,x8,y8); {7-8}
Line (x8,y8,x9,y9); {8-9}
Line (x9,y9,x10,y10); {9-10}
Line (x10,y10,x7,y7); {10-7}
outtextxy(10,2,'Dlya preobrazovania figuri najmite klavishu Enter, Esc - vihod');
pressedkey:=readkey;
if pressedkey=chr(27) then halt;
if ord(pressedkey)=13 then goto 1;
1:
SetColor(20);
x11:=round(cos(pi/4)*x1+sin(pi/4)*y1);
y11:=round(-sin(pi/4)*x1+cos(pi/4)*y1);
x22:=round(cos(pi/4)*x2+sin(pi/4)*y2);
y22:=round(-sin(pi/4)*x2+cos(pi/4)*y2);
x33:=round(cos(pi/4)*x3+sin(pi/4)*y3);
y33:=round(-sin(pi/4)*x3+cos(pi/4)*y3);
x44:=round(cos(pi/4)*x4+sin(pi/4)*y4);
y44:=round(-sin(pi/4)*x4+cos(pi/4)*y4);
x55:=round(cos(pi/4)*x5+sin(pi/4)*y5);
y55:=round(-sin(pi/4)*x5+cos(pi/4)*y5);
x66:=round(cos(pi/4)*x6+sin(pi/4)*y6);
y66:=round(-sin(pi/4)*x6+cos(pi/4)*y6);
x77:=round(cos(pi/4)*x7+sin(pi/4)*y7);
y77:=round(-sin(pi/4)*x7+cos(pi/4)*y7);
x88:=round(cos(pi/4)*x8+sin(pi/4)*y8);
y88:=round(-sin(pi/4)*x8+cos(pi/4)*y8);
x99:=round(cos(pi/4)*x9+sin(pi/4)*y9);
y99:=round(-sin(pi/4)*x9+cos(pi/4)*y9);
x1010:=round(cos(pi/4)*x10+sin(pi/4)*y10);
y1010:=round(-sin(pi/4)*x10+cos(pi/4)*y10);
Line (x11,y11*2,x22,y22*2); {1-2}
Line (x22,y22*2,x33,y33*2); {2-3}
Line (x33,y33*2,x44,y44*2); {3-4}
Line (x44,y44*2,x55,y55*2); {4-5}
Line (x55,y55*2,x66,y66*2); {5-6}
Line (x66,y66*2,x11,y11*2); {6-1}
Line (x77,y77*2,x88,y88*2); {7-8}
Line (x88,y88*2,x99,y99*2); {8-9}
Line (x99,y99*2,x1010,y1010*2); {9-10}
Line (x1010,y1010*2,x77,y77*2); {10-7}
pressedkey:=readkey;
if pressedkey=chr(27) then halt;
closegraph;
end.
Заключение
Мною освоено:
-
Язык программирования Pascal. Работа с графикой в нем. -
Алгоритмизация и построение программ. -
Дисциплина «Компьютерная графика».
Благодаря понятным методическим указаниям, удалось научиться способам графического представления тех или иных действий с телами, понять связь матриц преобразования с этими действиями, а также как решить ту или иную задачу, составив сначала алгоритм, а затем по нему и программу на языке программирования, получить представление об основных приемах графического изображения тел. Кроме того, удалось научиться представлять данные с помощью MS Office, достаточно наглядно и быстро.