Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика»





НазваниеРеферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика»
страница4/9
Дата публикации17.02.2015
Размер0.59 Mb.
ТипРеферат
100-bal.ru > Информатика > Реферат
1   2   3   4   5   6   7   8   9

product.W=1;

return product;

}


matrix.h

#ifndef MATRIX_H

#define MATRIX_H

#include "ScalarTypes.h"

#include "vector.h"
struct Matrix {

union{

scalar array1D[16];

scalar array2D[4][4];

struct {

scalar

_0, _1, _2, _3,

_4, _5, _6, _7,

_8, _9, _A, _B,

_C, _D, _E, _F;

};

struct {

scalar

_00, _01, _02, _03,

_10, _11, _12, _13,

_20, _21, _22, _23,

_30, _31, _32, _33;

};

struct {

scalar

a, b, c, p,

d, e, f, q,

g, h, i, r,

x, y, z, w;

};

};

Matrix();

inline Matrix(const scalar array1D[16]);//? inline

inline Matrix(const scalar array2D[4][4]);

inline Matrix(const scalar array0[4], const scalar array1[4], const scalar array2[4], const scalar array3[4]);

inline Matrix(const Vector &vec0, const Vector &vec1, const Vector &vec2, const Vector &vec3);

Matrix(

scalar _0, scalar _1, scalar _2, scalar _3,

scalar _4, scalar _5, scalar _6, scalar _7,

scalar _8, scalar _9, scalar _A, scalar _B,

scalar _C, scalar _D, scalar _E, scalar _F);

inline Matrix &set_value(const scalar array1D[16]);

inline Matrix &set_value(const scalar array2D[4][4]);

inline Matrix &set_value(const scalar array0[4], const scalar array1[4], const scalar array2[4], const scalar array3[4]);

inline Matrix &set_value(const Vector &vec0, const Vector &vec1, const Vector &vec2, const Vector &vec3);

inline Matrix &set_value(

scalar _0, scalar _1, scalar _2, scalar _3,

scalar _4, scalar _5, scalar _6, scalar _7,

scalar _8, scalar _9, scalar _A, scalar _B,

scalar _C, scalar _D, scalar _E, scalar _F);

Matrix inverse() const;

Matrix transpose() const;

Matrix operator - () const;

Vector &operator [] (IDX i);

const Vector &operator [] (IDX i) const;

scalar &operator () (IDX i);

const scalar &operator () (IDX i) const;

scalar &operator () (IDX i, IDX j);

const scalar &operator () (IDX i, IDX j) const;

Matrix &operator += (scalar _);

Matrix &operator -= (scalar _);

Matrix &operator *= (scalar _);

Matrix &operator /= (scalar _);

Matrix &operator += (const Matrix &mat);

Matrix &operator -= (const Matrix &mat);

Matrix &operator *= (const Matrix &mat);

friend Matrix operator + (const Matrix &mat, scalar _);

friend Matrix operator - (const Matrix &mat, scalar _);

friend Matrix operator * (const Matrix &mat, scalar _);

friend Matrix operator / (const Matrix &mat, scalar _);

friend Matrix operator + (const Matrix &mat1, const Matrix &mat2);

friend Matrix operator - (const Matrix &mat1, const Matrix &mat2);

friend Matrix operator * (const Matrix &mat1, const Matrix &mat2);

friend Matrix identity();

friend Matrix scale(scalar _);

friend Matrix scale(const Vector &vec);

friend Matrix translate(const Vector &vec);

friend Matrix rotate(Vector axis, scalar angle);

};
#endif


matrix.cpp

#include "stdafx.h"

#include "ScalarTypes.h"

#include "vector.h"

#include "matrix.h"
inline scalar ABS(scalar x) {

return x>=0?x:-x;

}
Matrix::Matrix() {}
inline Matrix::Matrix(const scalar array1D[16]) {

set_value(array1D);

}
inline Matrix::Matrix(const scalar array2D[4][4]) {

set_value(array2D);

}
inline Matrix::Matrix(const scalar array0[4], const scalar array1[4], const scalar array2[4], const scalar array3[4]) {

set_value(array0, array1, array2, array3);

}
inline Matrix::Matrix(const Vector &vec0, const Vector &vec1, const Vector &vec2, const Vector &vec3) {

set_value(vec0, vec1, vec2, vec3);

}
Matrix::Matrix(scalar _0, scalar _1, scalar _2, scalar _3,

scalar _4, scalar _5, scalar _6, scalar _7,

scalar _8, scalar _9, scalar _A, scalar _B,

scalar _C, scalar _D, scalar _E, scalar _F) {

set_value(

_0, _1, _2, _3,

_4, _5, _6, _7,

_8, _9, _A, _B,

_C, _D, _E, _F);

}
inline Matrix &Matrix::set_value(const scalar array1D[16]) {

for (IDX i=0; i < 16; i++)

Matrix::array1D[i]=array1D[i];

return *this;

}
inline Matrix &Matrix::set_value(const scalar array2D[4][4]) {

for (IDX i=0; i < 16; i++)

Matrix::array2D[0][i]=array2D[0][i];

return *this;

}
inline Matrix &Matrix::set_value(const scalar array0[4], const scalar array1[4], const scalar array2[4], const scalar array3[4]) {

for (IDX i=0; i < 4; i++)

array2D[0][i]=array0[i];

for (i=0; i < 4; i++)

array2D[1][i]=array1[i];

for (i=0; i < 4; i++)

array2D[2][i]=array2[i];

for (i=0; i < 4; i++)

array2D[3][i]=array3[i];

return *this;

}
inline Matrix &Matrix::set_value(const Vector &vec0, const Vector &vec1, const Vector &vec2, const Vector &vec3) {

for (IDX i=0; i < 4; i++)

array2D[0][i]=vec0[i];

for (i=0; i < 4; i++)

array2D[1][i]=vec1[i];

for (i=0; i < 4; i++)

array2D[2][i]=vec2[i];

for (i=0; i < 4; i++)

array2D[3][i]=vec3[i];

return *this;

}
inline Matrix &Matrix::set_value(scalar _0, scalar _1, scalar _2, scalar _3,

scalar _4, scalar _5, scalar _6, scalar _7,

scalar _8, scalar _9, scalar _A, scalar _B,

scalar _C, scalar _D, scalar _E, scalar _F) {

Matrix::_0=_0, Matrix::_1=_1, Matrix::_2=_2, Matrix::_3=_3;

Matrix::_4=_4, Matrix::_5=_5, Matrix::_6=_6, Matrix::_7=_7;

Matrix::_8=_8, Matrix::_9=_9, Matrix::_A=_A, Matrix::_B=_B;

Matrix::_C=_C, Matrix::_D=_D, Matrix::_E=_E, Matrix::_F=_F;

return *this;

}
Matrix Matrix::inverse() const {

scalar mat[4][8]={

array2D[0][0], array2D[0][1], array2D[0][2], array2D[0][3], 1.0, 0.0, 0.0, 0.0,

array2D[1][0], array2D[1][1], array2D[1][2], array2D[1][3], 0.0, 1.0, 0.0, 0.0,

array2D[2][0], array2D[2][1], array2D[2][2], array2D[2][3], 0.0, 0.0, 1.0, 0.0,

array2D[3][0], array2D[3][1], array2D[3][2], array2D[3][3], 0.0, 0.0, 0.0, 1.0

};

scalar *rows[4]={ mat[0], mat[1], mat[2], mat[3] };

for (IDX i=0; i < 4; i++) {

IDX row_num=i;

scalar major=ABS(rows[i][i]);

for (IDX r=i+1; r < 4; r++) {

scalar cur_ABS=ABS(rows[r][i]);

if (cur_ABS > major) {

major=cur_ABS;

row_num=r;

}

}

if (row_num != i) {

(int &)rows[i]^=(int)rows[row_num];//?

(int &)rows[row_num]^=(int)rows[i];

(int &)rows[i]^=(int)rows[row_num];

}

for (r=i+1; r < 4; r++) {

scalar factor=rows[r][i]/rows[i][i];

for (IDX c=i; c < 8; c++)

rows[r][c]-=factor*rows[i][c];

}

}

for (i=3; i > 0; i--)

for (IDX r=0; r < i; r++) {

scalar factor=rows[r][i]/rows[i][i];

for (IDX c=4; c < 8; c++)

rows[r][c]-=factor*rows[i][c];

}

return Matrix(

rows[0][4]/rows[0][0], rows[0][5]/rows[0][0], rows[0][6]/rows[0][0], rows[0][7]/rows[0][0],

rows[1][4]/rows[1][1], rows[1][5]/rows[1][1], rows[1][6]/rows[1][1], rows[1][7]/rows[1][1],

rows[2][4]/rows[2][2], rows[2][5]/rows[2][2], rows[2][6]/rows[2][2], rows[2][7]/rows[2][2],

rows[3][4]/rows[3][3], rows[3][5]/rows[3][3], rows[3][6]/rows[3][3], rows[3][7]/rows[3][3]);

}
Matrix Matrix::transpose() const {

return Matrix(

array2D[0][0], array2D[1][0], array2D[2][0], array2D[3][0],

array2D[0][1], array2D[1][1], array2D[2][1], array2D[3][1],

array2D[0][2], array2D[1][2], array2D[2][2], array2D[3][2],

array2D[0][3], array2D[1][3], array2D[2][3], array2D[3][3]);

}
Matrix Matrix::operator - () const {

return Matrix(

-_0, -_1, -_2, -_3,

-_4, -_5, -_6, -_7,

-_8, -_9, -_A, -_B,

-_C, -_D, -_E, -_F);

}
Vector &Matrix::operator [] (IDX i) {

return (Vector &)array2D[i][0];

}
const Vector &Matrix::operator [] (IDX i) const {

return (Vector &)array2D[i][0];

}
scalar &Matrix::operator () (IDX i) {

return array1D[i];

}
const scalar &Matrix::operator () (IDX i) const {

return array1D[i];

}
scalar &Matrix::operator () (IDX i, IDX j) {

return array2D[i][j];

}
const scalar &Matrix::operator () (IDX i, IDX j) const {

return array2D[i][j];

}
Matrix &Matrix::operator += (scalar _) {

for (IDX i=0; i < 16; i++)

this->operator () (i) += _;

return *this;

}
Matrix &Matrix::operator -= (scalar _) {

for (IDX i=0; i < 16; i++)

this->operator () (i) -= _;

return *this;

}
Matrix &Matrix::operator *= (scalar _) {

for (IDX i=0; i < 16; i++)

this->operator () (i) *= _;

return *this;

}
Matrix &Matrix::operator /= (scalar _) {

for (IDX i=0; i < 16; i++)

this->operator () (i) /= _;

return *this;

}
Matrix &Matrix::operator += (const Matrix &mat) {

for (IDX i=0; i < 16; i++)

this->operator () (i) += mat(i);

return *this;

}
Matrix &Matrix::operator -= (const Matrix &mat) {

for (IDX i=0; i < 16; i++)

this->operator () (i) -= mat(i);

return *this;

}
Matrix &Matrix::operator *= (const Matrix &mat) {

return *this=*this*mat;//?

}
Matrix operator + (const Matrix &mat, scalar _) {

return Matrix(mat)+=_;

}
Matrix operator - (const Matrix &mat, scalar _) {

return Matrix(mat)-=_;

}
Matrix operator * (const Matrix &mat, scalar _) {

return Matrix(mat)*=_;

}
Matrix operator / (const Matrix &mat, scalar _) {

return Matrix(mat)/=_;

}
Matrix operator + (const Matrix &mat1, const Matrix &mat2) {

return Matrix(mat1)+=mat2;

}
Matrix operator - (const Matrix &mat1, const Matrix &mat2) {

return Matrix(mat1)-=mat2;

}
Matrix operator * (const Matrix &mat1, const Matrix &mat2) {

Matrix product(

0.0, 0.0, 0.0, 0.0,

0.0, 0.0, 0.0, 0.0,

0.0, 0.0, 0.0, 0.0,

0.0, 0.0, 0.0, 0.0);

for (IDX i=0; i < 4; i++)

for (IDX j=0; j < 4; j++)

for (IDX k=0; k < 4; k++)

product(i, j)+=mat1(i, k)*mat2(k, j);

return product;

}
Matrix identity() {

return scale(1.0);

}
Matrix scale(scalar _) {

return scale(Vector(_, _, _));

}
Matrix scale(const Vector &vec) {

return Matrix(

vec.X, 0.0 , 0.0 , 0.0 ,

0.0 , vec.Y, 0.0 , 0.0 ,

0.0 , 0.0 , vec.Z, 0.0 ,

0.0 , 0.0 , 0.0 , vec.W);

}
Matrix translate(const Vector &vec) {

return Matrix(

1.0 , 0.0 , 0.0 , 0.0,

0.0 , 1.0 , 0.0 , 0.0,

0.0 , 0.0 , 1.0 , 0.0,

vec.X, vec.Y, vec.Z, 1.0);

}
Matrix rotate(Vector axis, scalar angle) {

axis.normalize3();

scalar

&x=axis.X,

&y=axis.Y,

&z=axis.Z,

sin_angle=sin(angle),

cos_angle=cos(angle);

return Matrix(

(1.0-x*x)*cos_angle+x*x , z*sin_angle+x*y*(1.0-cos_angle), x*z*(1.0-cos_angle)-y*sin_angle, 0.0,

x*y*(1.0-cos_angle)-z*sin_angle, (1.0-y*y)*cos_angle+y*y , y*z*(1.0-cos_angle)+x*sin_angle, 0.0,

x*z*(1-cos_angle)+y*sin_angle , y*z*(1-cos_angle)-x*sin_angle , (1-z*z)*cos_angle+z*z , 0.0,

0.0 , 0.0 , 0.0 , 1.0);

}


raster scale.cpp

// raster scale.cpp : Defines the entry point for the application.

//
#include "stdafx.h"

#include "resource.h"
#define MAX_LOADSTRING 100
// Global Variables:

HINSTANCE hInst; // current instance

TCHAR szTitle[MAX_LOADSTRING]; // The title bar text

TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
// Foward declarations of functions included in this code module:

ATOM MyRegisterClass(HINSTANCE hInstance);

BOOL InitInstance(HINSTANCE, int);

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
FrameBuffer frame_buffer, smallBitmap, largeBitmap;

RECT fb_rt;

int large_width = 8, large_height = 16;

scalar

weight = sqrt(2)/2,

line_offset = 0.0,

curve_offset = 0.5;

bool

draw_curve = true,

color_curve = false;
void Init() {

character ch={new scalar[4*4], new scalar[1*15], 4, 1};

ch.lines[0]=0+line_offset;

ch.lines[1]=0+line_offset;

ch.lines[2]=0+line_offset;

ch.lines[3]=14+line_offset;

ch.lines[4]=1+line_offset;

ch.lines[5]=15+line_offset;

ch.lines[6]=6+line_offset;

ch.lines[7]=15+line_offset;

ch.lines[8]=7+line_offset;

ch.lines[9]=14+line_offset;

ch.lines[10]=7+line_offset;

ch.lines[11]=10+line_offset;

ch.lines[12]=6+line_offset;

ch.lines[13]=9+line_offset;

ch.lines[14]=1+line_offset;

ch.lines[15]=9+line_offset;
ch.curves[0x0]=0+line_offset; //x

ch.curves[0x1]=curve_offset; //offset

ch.curves[0x2]=14+line_offset; //y

ch.curves[0x3]=curve_offset; //offset

ch.curves[0x4]=1; //weight

ch.curves[0x5]=(0+line_offset)*weight; //x

ch.curves[0x6]=curve_offset*weight; //offset

ch.curves[0x7]=(15+line_offset)*weight; //y

ch.curves[0x8]=curve_offset*weight; //offset

ch.curves[0x9]=weight; //weight

ch.curves[0xa]=1+line_offset; //x

ch.curves[0xb]=curve_offset; //offset

ch.curves[0xc]=15+line_offset; //y

ch.curves[0xd]=curve_offset; //offset

ch.curves[0xe]=1; //weight
smallBitmap.Init(8, 16);

smallBitmap.Clear(RGBA(255, 255, 255, 255));

/* smallBitmap.Line(0, 0, 0, 14, 0);

smallBitmap.Line(1, 15, 6, 15, 0);

smallBitmap.Line(7, 14, 7, 10, 0);

smallBitmap.Line(6, 9, 1, 9, 0);*/

// largeBitmap=Up(smallBitmap, 16, 16);

// largeBitmap = new FrameBuffer;

largeBitmap.Init(large_width, large_height);

largeBitmap.Clear(RGBA(255, 255, 255, 255));

/* largeBitmap->Line(0, 0, 0, 14*scale, 0);

largeBitmap->Line(1*scale, 15*scale, 6*scale, 15*scale, 0);

largeBitmap->Line(7*scale, 14*scale, 7*scale, 10*scale, 0);

largeBitmap->Line(6*scale, 9*scale, 1*scale, 9*scale, 0);

largeBitmap->Bezier(

Vector(0, 14*scale, 0, 1)*weight,

Vector(0, 15*scale, 0, 1)*weight,

Vector(1*scale, 15*scale, 0, 1)*weight,

0);*/

smallBitmap.DrwaChar(&ch, 0, 1, 1);
1   2   3   4   5   6   7   8   9

Похожие:

Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconРеферат: Коваленко А. Е. Разработка системы научной визуализации....
Коваленко А. Е. Разработка системы научной визуализации. Квалификационная работа на степень магистра наук по направлению «Математика....
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconРеферат Флягина Т. А. Проблемы разработки многооконных интерфейсов,...
Флягина Т. А. Проблемы разработки многооконных интерфейсов, квалификационная работа на степень бакалавра наук
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconКвалификационной работы на факультете математики и компьютерных наук
В соответствии с действующими государственными образовательными стандартами выпускная квалификационная работа по специальности «Математика»...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconДиссертация на степень магистра наук по направлению «Математика, компьютерные науки»
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconДипломная работа по направлению Математика. Прикладная математика студента гр. Мт 505
Федеральное государственное автономное образовательное учреждение высшего профессионального образования
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины Современные методы принятия решений  для направления...
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 010400....
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины «Герменевтика» для направления 010400. 68 «Прикладная...
Программа предназначена для преподавателей, ведущих данную дисциплину, и студентов направления подготовки 010400. 68 "Прикладная...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» icon1 Нормативные документы для разработки ооп впо по направлению подготовки...
Общая характеристика вузовской основной образовательной программы высшего профессионального образования по направлению подготовки...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconРеферат Тычинин И. А. Разработка приложения для портативных устройств...
Тычинин И. А. Разработка приложения для портативных устройств с использованием qt framework, квалификационная работа на степень бакалавра...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconОсновная образовательная программа (ооп) бакалавриата, реализуемая...
Нормативные документы для разработки ооп бакалавриата по направлению подготовки «Прикладная математика и информатика»
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины Архитектура ЭВМ для направления 010400. 68 «Прикладная...
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направлений подготовки 010400....
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconОбразовательная программа высшего образования, реализуемая университетом...
...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconЛитература
Уросов А. П. Разработка методик визуализации для представления работы параллельных программ, квалификационная работа на степень бакалавра...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconЕН. Ф. 1 Математика и информатика: математика
Учебная дисциплина Математика и информатика: "Математика" введена в процесс обуче­ния для бакалавров по направлению подготовки "Художественное...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины «Модели корпусной лингвистики» для направления...
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления 010400. 68 "Прикладная...
Реферат: Шайдуров А. Г. Исследование и разработка некоторых графических алгоритмов. Квалификационная работа на степень магистра наук по направлению «Математика. Прикладная математика» iconПрограмма дисциплины «История» для направления 231300. 62 и 230700....
Программа предназначена для преподавателей, ведущих данную дисциплину, учебных ассистентов и студентов направления подготовки 231300....


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск