DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
О
Факультет:
ЗІ
Кафедра:
Не вказано

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Програмування комп’ютерної графіки

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” ПОБУДОВА РУХОМИХ ГРАФІЧНИХ ЗОБРАЖЕНЬ В СЕРЕДОВИЩІ MICROSOFT VISUAL STUDIO C++ 2008 Лабораторна робота №4 з курсу «Програмування комп’ютерної графіки» Варіант №16 Завдання: Затухаючі відскоки кульки від поверхні. Параметри: H=100, d=20. / Блок-схема програми: - + Список індетифікаторів, змінних та функцій: CBrush br; br.CreateSolidBrush(RGB(0,0,0)); dc.SelectObject(&br); - Створення та використання користувацького пера; dc.SelectStockObject(Color); - перо , Color – колір пера; dc.Rectangle() – малює прямокутник. Остаточна версія програми: Файл main.h #include<vector> #include"iostream" #include<math.h> using namespace std; const int n1=3,m1=1; class TMatrix { public: vector<vector<double>> matrix; int n; public: TMatrix(){ n=n1; matrix.resize(n1); for(int i=0;i<n1;i++) matrix[i].resize(n1); } TMatrix(int Dx,int Dy){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); for(int i=0;i<3;i++) for(int j=0;j<3;j++) if(i==j)matrix[i][j]=1; else matrix[i][j]=0; matrix[2][0]=Dx; matrix[2][1]=Dy; } TMatrix(int e){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); for(int i=0;i<3;i++) for(int j=0;j<3;j++) matrix[i][j]=0; matrix[0][0]=cos(e*3.14/180); matrix[0][1]=sin(e*3.14/180); matrix[1][0]=-sin(e*3.14/180); matrix[1][1]=cos(e*3.14/180); matrix[2][2]=1; } TMatrix(double e){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); for(int i=0;i<3;i++) for(int j=0;j<3;j++) matrix[i][j]=0; matrix[0][0]=sin(e*3.14/180); matrix[0][1]=cos(e*3.14/180); matrix[1][0]=-cos(e*3.14/180); matrix[1][1]=sin(e*3.14/180); matrix[2][2]=1; } ~TMatrix(){}; friend void rec(CPaintDC *dcc, TMatrix B); friend void drec(CPaintDC *dcc, TMatrix B); friend ostream &operator<<(ostream &out,TMatrix &L){ for(int i=0;i<3;i++) {out<<endl; for(int j=0;j<3;j++) out<<L.matrix[i][j]<<" "; } out<<endl; return out; } TMatrix operator *(TMatrix Matrix1); TMatrix &TMatrix:: operator=(TMatrix Matrix1) { int n=Matrix1.n; for(int i=0;i<n;i++) for(int j=0;j<n1;j++) matrix[i][j]=Matrix1.matrix[i][j]; return *this; } }; class TPmatrix: public TMatrix { public: vector<vector<double>> matrix; int n; TPmatrix(){ n=m1; matrix.resize(m1); for(int i=0;i<m1;i++) matrix[i].resize(n1); } TPmatrix(int x,int y){ n=m1; matrix.resize(m1); for(int i=0;i<m1;i++) matrix[i].resize(n1); matrix[0][0]=x; matrix[0][1]=y; matrix[0][2]=1; } ~TPmatrix(){}; TPmatrix operator *(TMatrix Matrix1){ TPmatrix Matrix2; for(int i=0;i<m1;i++) for(int j=0;j<n1;j++) for(int k=0;k<n1;k++) Matrix2.matrix[i][j]+=matrix[i][k]*Matrix1.matrix[k][j]; return Matrix2; } TPmatrix &operator=(TPmatrix Matrix1) { int n=Matrix1.n; for(int i=0;i<n;i++) for(int j=0;j<n1;j++) matrix[i][j]=Matrix1.matrix[i][j]; return *this; } friend ostream &operator<<(ostream &out,TPmatrix &L){ for(int i=0;i<m1;i++) {out<<endl; for(int j=0;j<n1;j++) out<<L.matrix[i][j]<<" "; } out<<endl; return out; } }; TMatrix TMatrix:: operator *(TMatrix Matrix1) { int n=Matrix1.n; TMatrix Matrix2; for(int i=0;i<n;i++) for(int j=0;j<n1;j++) for(int k=0;k<n1;k++) Matrix2.matrix[i][j]+=matrix[i][k]*Matrix1.matrix[k][j]; return Matrix2; } Файл ChildView.cpp // ChildView.cpp : реализация класса CChildView // #include "stdafx.h" #include "ChildView.h" #include "main.h" #include <conio.h> using namespace std; const int L=100,d=20; #ifdef _DEBUG #define new DEBUG_NEW #endif // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() END_MESSAGE_MAP() // обработчики сообщений CChildView BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs) { if (!CWnd::PreCreateWindow(cs)) return FALSE; cs.dwExStyle |= WS_EX_CLIENTEDGE; cs.style &= ~WS_BORDER; cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS, ::LoadCursor(NULL, IDC_ARROW), reinterpret_cast<HBRUSH>(COLOR_WINDOW+1), NULL); return TRUE; } class m_dc: public CPaintDC { public: m_dc(CWnd* pWnd); int x_c,y_c; void Circle(int x,int y,int r,COLORREF cl); void dCircle(int x,int y,int r,COLORREF cl); int getX(int l,int r); int getY(int l,int r); }; void circle(CPaintDC *dcc,TPmatrix B) { CPen pen(PS_SOLID,1,RGB(0,0,0)); CBrush br(RGB(0,0,0)); dcc->SelectObject(&br); dcc->SelectObject(&pen); dcc->MoveTo(100,100); dcc->LineTo(200,100); dcc->MoveTo(100,200); dcc->LineTo(200,200); dcc->Ellipse(B.matrix[0][0]-10,B.matrix[0][1]-10,B.matrix[0][0]+10,B.matrix[0][1]+10); pen.DeleteObject(); br.DeleteObject(); Sleep(10); br.CreateSolidBrush(RGB(255,255,255)); dcc->SelectObject(&br); pen.CreatePen(PS_SOLID,1,RGB(255,255,255)); dcc->SelectObject(&pen); dcc->Ellipse(B.matrix[0][0]-10,B.matrix[0][1]-10,B.matrix[0][0]+10,B.matrix[0][1]+10); pen.DeleteObject(); br.DeleteObject(); } void CChildView::OnPaint() { CPaintDC dc(this); CBrush br; TPmatrix P(150,110),P1(150,110); TMatrix T2(0,-1),T(0,1); dc.MoveTo(100,100); dc.LineTo(200,100); dc.MoveTo(100,200); dc.LineTo(200,200); circle(&dc,P); int k=0; do { for(int i=90-k*20;i>=10;i--) { P=P*T; circle(&dc,P); }k++; for(int i=10;i<=90-k*20;i++) { P=P*T2; circle(&dc,P); } } while(k<=5); CPen pen(PS_SOLID,1,RGB(0,0,0)); br.CreateSolidBrush(RGB(0,0,0)); dc.SelectObject(&br); dc.SelectObject(&pen); dc.Ellipse(140,180,160,200); pen.DeleteObject(); br.DeleteObject(); } Результати роботи програми: // Висновок: На даній лабораторній роботі я здобув навики в складанні програм для побудови рухомих графічних зображень на екрані комп'ютера за допомогою матричних перетворень.
Антиботан аватар за замовчуванням

12.04.2016 16:04

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!