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

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

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

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

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

Міністерство освіти та науки України Національний університет “Львівська політехніка” ПОБУДОВА РУХОМИХ ГРАФІЧНИХ ЗОБРАЖЕНЬ В СЕРЕДОВИЩІ MICROSOFT VISUAL STUDIO C++ 2008 Лабораторна робота №4 з курсу «Програмування комп’ютерної графіки» Варіант №10 Завдання: Незатухаючі коливання маятника. Нитка маятника видима. Кольори кульки і нитки різні. Параметри: R=60, d=18, φ= 90 0 . / Блок-схема програми: 1 2 3 4 11 5 6 7 8 9 10 Список індетифікаторів, змінних та функцій: 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 Dx,int Dy){ n=n1; matrix.resize(3); for(int i=0;i<3;i++) matrix[i].resize(3); matrix[0][0]=1; matrix[0][1]=2; matrix[0][2]=3; matrix[1][0]=4; matrix[1][1]=5; matrix[1][2]=6; matrix[2][0]=Dx; matrix[2][1]=Dy; matrix[2][2]=7; }*/ 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(const TMatrix &matrix1){ for(int i=0; i<3;i++) for(int j=0;j<3;j++) matrix[i][j]=matrix1.matrix[i][j]; for(int i=0;i<3;i++) x_matrix[i]=matrix1.x_matrix[i]; }*/ ~TMatrix(){}; friend void duha(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; } /*TPmatrix operator *(TPmatrix Matrix1);*/ //friend ostream &operator<<(ostream ,TPmatrix); }; 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 : implementation of the CChildView class // #include "stdafx.h" #include "ChildView.h" #include <math.h> #include "main.h" #ifdef _DEBUG #define new DEBUG_NEW #endif const int r=10; // CChildView CChildView::CChildView() { } CChildView::~CChildView() { } BEGIN_MESSAGE_MAP(CChildView, CWnd) ON_WM_PAINT() END_MESSAGE_MAP() // CChildView message handlers 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; } void duha(CPaintDC *dcc, TPmatrix B) { CPen pen; CBrush br; pen.CreatePen(PS_SOLID,1,RGB(0,0,0));// колір дуги br.CreateSolidBrush(RGB(255,0,0)); // колір кульки dcc->SelectObject(&pen); dcc->SelectObject(&br); dcc->Ellipse(B.matrix[0][0]-r,B.matrix[0][1]-r,B.matrix[0][0]+r,B.matrix[0][1]+r); dcc->MoveTo(200,200); dcc->LineTo(B.matrix[0][0],B.matrix[0][1]); //нитка pen.DeleteObject(); br.DeleteObject(); Sleep(10); pen.CreatePen(PS_SOLID,1,RGB(255,255,255)); //затирання руху кульки br.CreateSolidBrush(RGB(255,255,255)); dcc->SelectObject(&pen); dcc->SelectObject(&br); dcc->Ellipse(B.matrix[0][0]-r,B.matrix[0][1]-r,B.matrix[0][0]+r,B.matrix[0][1]+r); pen.DeleteObject(); br.DeleteObject(); pen.CreatePen(PS_SOLID,1,RGB(0,0,0)); dcc->SelectObject(&pen); dcc->Rectangle(-10,-10,1000,1000); pen.DeleteObject(); } void CChildView::OnPaint() { CPaintDC dc(this); for(int k=1;k<=10000;k++) { TPmatrix P(1,1),P1(150,190),B(1,1); TMatrix T1(-200,-200),T2(200,200),M1; duha(&dc,P); for( double i=140;i<=240;i++) { TMatrix R1(i); M1=T1*R1*T2; P=P1*M1; duha(&dc,P); } T1.matrix[2][0]=-200; T1.matrix[2][1]=-200; T2.matrix[2][0]=200; T2.matrix[2][1]=200; for( double i=240;i>=140;i--) { TMatrix R1(i); M1=T1*R1*T2; P=P1*M1; duha(&dc,P); } } } Результати роботи програми: / / / Висновок: На даній лабораторній роботі я здобув навики в складанні програм для побудови рухомих графічних зображень на екрані комп'ютера за допомогою матричних перетворень.
Антиботан аватар за замовчуванням

12.04.2016 16:04

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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