- •До розрахунково-графічної роботи
- •Завдання
- •Побудувати графік функції
- •Завдання
- •2.1 Розрахунок функціональних залежностей для побудови графіка.
- •2.2 Розрахунок матриці перетворень для рухомого зображення.
- •3. Список ідентифікаторів програми.
- •4. Блок-схеми основної програми побудови графіка та анімації.
- •If(first && rotate)
- •5. Текст програми.
- •6. Результат виконання програми
Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Звіт
До розрахунково-графічної роботи
з курсу “Програмування комп’ютерної графіки”
Варіант 7-19-19
Виконав:
студент гр. СІ – 22
Палюшок В.О.
Перевірив:
Іванюк О.О.
Львів - 2015
Завдання
Побудувати графік функції заданої таблично.Параметри для побудови графіку визначені в таблиці 1,2.
Побудувати графік функції
,
Параметри для побудови графіка:
-
№ варіанта
Тип лінії для побудови осей графіка
Товщина лінії
(пікселів)
Колір
7
−∙−∙−∙−∙−∙−∙(ШТРИХ-ПУНКТИР)
4
blue
Завдання
Створити
на екрані комп’ютера
графічне вікно і сформувати в ньому
рухоме зображення. Параметри зображення
задані в пікселах.
Графік і вікно з рухомим зображенням
повинні бути присутні на екрані
одночасно.
2.1 Розрахунок функціональних залежностей для побудови графіка.
Оскільки реальні координати графіка функції, що виводиться на екран можуть бути або значно більшими, або значно меншими за машинні координати екрану монітору, необхідно визначити значення масштабних коефіцієнтів стискання або розтягу для функції, що виводиться на екран.
Позначимо максимальні та мінімальні значення реальних координат по осях X та Y - mахx, minx, maxy, miny.
Приймаємо машинний робочий діапазон для графіка функції 540 пікселів по осі X та 400 пікселів по осі Y. Тоді масштабні коефіцієнти для графіка по осях X та Y дорівнюють, відповідно:
При виведенні графіка функції на екран монітору значення реальних координат заданої функції домножуємо на масштабні коефіцієнти і додаємо координати машинного центру координат (X0,Y0):
2.2 Розрахунок матриці перетворень для рухомого зображення.
Результуюча матриця М, руху є добутком трьох матриць: переносу T1, T2 і повороту R, причому перша матриця відповідає перенесенню центру повороту в початок координат на відстань -dx та -dy, друга – повороту об’єкта на кут φ, третя – поверненню об’єкта з початку координат на площину зображення (координати dx та dy).
Перемноживши матрицю-рядок із старими координатами на результуючу матрицю руху, одержимо матрицю з новими координатами рухомої точки.
3. Список ідентифікаторів програми.
y- поточне значення функції
dXmash,dXreal,dYmash,dYreal, Kx,Ky масштабні коефіцієнти
a –початок відрізку табуляції
b- кінець відрізку табуляції
h– крок зміни реального значення аргументу;
Ymax, Ymin - максимальне та мінімальне реальні значення аргументу;
LineTo(int x,int y)
MoveTo(int x , int y)
const CString
dc.TextOutW(int x , int y, char a)
dc.TextOut(int x , int y, char a)
CPen pen;
ToRadian (ᵒ)
4. Блок-схеми основної програми побудови графіка та анімації.
Графік
Xo1=rect.right-VXR
Xo1<VXL
-
+
Xo1>rect.right-VXR
Xo1=VXL
-
+
обчислення
kx,ky
-
+
-
+
Ymax=y
Ymax<y
Ymax=y
Ymax<y
y=F(x)
x=a,b
x+=h
Ymax=F(a)
Ymin=F(a)
проміжок функції
початок
2
3
4
5
7
8
9
10
11
12
13
14
15
16
7
15
6
Кінець
Xmashn=Xo+x*Kx; y=F(x); Ymashn=Yo-y*Ky; dc.LineTo(Xmashn,Ymashn);
x=a,b
x+=h
задання
кольору
і типу лінії
градуювання
осі Y
градуювання
осі Х
рисування
осі Х
рисування
осі
Y
Yo1=rect.bottom-VYB
-
+
Yo1>rect.bottom-VYB
-
+
Yo1=VYT
Yo1<VYT
16
17
18
19
20
21
22
23
24
25
26
27
Початок
phi
= ToRadian(180); int
r=60 ; int
t=20;
Square
square = Square();
Vector2
pos = Vector2(400 + r + k + t/2, 250); bool
first = true; bool
rotate = true; double
phi2 = ToRadian(45);
(true)
- 5
Кінець
i=0:2;
i++
if(i==0)
+
dc.SelectStockObject(WHITE_PEN); dc.SelectStockObject(WHITE_BRUSH);
dc.SelectStockObject(BLACK_PEN)
10
double
teta = PI/20.0;
j=0:6;
j++
dc.LineTo(square.vertex[j].X,
square.vertex[j].Y);
dc.LineTo(square.vertex[0].X,
square.vertex[0].Y);
dc.MoveTo(400
+ r, 250); dc.AngleArc(400,
250, r, 0, 180); dc.MoveTo(400
+ r, 250); dc.LineTo(400
+ r + k, 250); dc.AngleArc(400,
250, r+k, 0, 180); dc.LineTo(400
- r, 250);
25
9
15
9
14
8
28
8
15
if(i==1)
if(i
== 0)
26 16 +
dc.FloodFill(square.Center.X,
square.Center.Y, RGB(255,255,255)); dc.FloodFill(400
- r - t/2, 240, RGB(255,255,255));
+
dc.SelectObject(brush); dc.FloodFill(square.Center.X,
square.Center.Y, RGB(0,0,0)); dc.SelectObject(brush2);dc.FloodFill(400
- r - t/2, 240, RGB(0,0,0)); Sleep(100);
