Предыдущий пост -
Следующий пост -

Класс Mat4.

Рубрика: C++, Дата: 25 March, 2013, Автор:
Tags:

Определите класс Mat4 как вектор четырех элементов типа Vec4. Определите операцию [] для типа Mat4 так, чтобы она возвращала Vec4. Определите обычные матричные операции для Mat4. Определите функцию реализующую метод исключений Гауса.

Да как же нам чо делать? хз. Для начала как бы первую часть сделаем определим класс Mat4, затем перегрузим операцию [] для типа Mat4, ну а затем попытаемся сделать матричные операции для Mat4. Я их честно не помню чо это за операции. Метод Гаусса тож забыл ну фиг с ним делаем пока, что первую часть. Там не так уж и мало делать в первой части задачи. Lets go!

Все господа я первую часть доделал, теперь определим обычные матричные операции, я так посмотрел это те же операции, что и для Vec4 они идентичны. Это я  в википедии читал, но там деление матриц не было щас еще поищу мб, что и найду.

Нашол но там головняк полный поэтому пока сделаем сложение, вычитание и умножение на число, то есть пока перегрузим +, -, ну и * ток для числа, для целого допустим.

И на этом пожалуй и все. Метод Гаусса мы не будем брать потому, что для того чтобы написать программку нужно в ручную хорошо решать уравнения методом Гаусса, а я это все призабыл да я глянул в инете там целая статья есть по решению уравнений методом Гаусса, но ну его нафиг хотите сами можете решить, но я на данном этапе обучения не вижу смысла их решать, потому, что просто время зря потрачу, хотя бы потому, что мне придется вспоминать час а может и два или день, потом решать вручную, затем ошибки исправлять.

Вообщем скажу вам так если вы знаете, помните метод Гаусса и можете спокойно решить уравнения, то делайте эту функцию, а если не знаете, то смысла нету. Я так присмотрел на этот метод и вижу, что наша матрица из 4 на 4, поэтому функция для решения методом Гаусса должна принимать 4 линейных уравнения. по 4 члена. Например таких 2x-4y+5z=8. короче с тремя неизвестными.

А сейчас я вам приведу код того, что я сделал. (ссылка на класс Vec4 http://www.kselax.ru/2013/03/tip-vec4/  )

Файл Mat4.h:

//ob69vlenie Mat4
#ifndef MAT4_H
#define MAT4_H

#include <vector>
using std::vector;

#include "Vec4.cpp"

class Mat4
{
public:
	vector<Vec4> mVec;//predctavlenie

	//konctryktor po ymolchaniyu
	Mat4();

	//konctryktor kopii
	Mat4(const Mat4& a);

	//pechat6
	void print();

	//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vec4;
	Vec4& operator[](int i);

	//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vec4;
	Vec4 operator[](int i)const;

};

Mat4 operator+(const Mat4 a, const Mat4 b);
Mat4 operator-(const Mat4 a, const Mat4 b);
Mat4 operator*(const Mat4 a, const float b);

#endif

файл Mat4.cpp:

//opredelenie Mat4

#include "Mat4.h"

//konctryktor po ymolchaniyu
Mat4::Mat4()
{
	Vec4 a;
	cout <<a[1]<<endl;
	for(int i=0;i<4;i++)
	{
		mVec.push_back(a);
	}
}

//konctryktor kopii
Mat4::Mat4(const Mat4& a)
{
	for(int i=0;i<4;i++)
	{
		mVec.push_back(a.mVec[i]);
	}
}

//pechat6
void Mat4::print()
{
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			cout <<mVec[i][j]<<' ';
		}
		cout <<endl;
	}
}

//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vec4;
Vec4& Mat4::operator[](int i)
{
	return mVec[i];
}

//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vec4;
Vec4 Mat4::operator[](int i)const
{
	return mVec[i];
}



Mat4 operator+(const Mat4 a, const Mat4 b)
{
	Mat4 c;
	for(int i=0;i<4;i++)
	{
		c[i]=a[i]+b[i];
	}
	
	return c;
}

Mat4 operator-(const Mat4 a, const Mat4 b)
{
	Mat4 c;
	for(int i=0;i<4;i++)
	{
		c[i]=a[i]-b[i];
	}
	
	return c;
}

Mat4 operator*(const Mat4 a, const float b)
{
	Mat4 c;
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			c[i][j]=a[i][j]*b;
		}
	}
	
	return c;
}

файл main.cpp:

//klacc Mat4
#include <iostream>
using std::cout;
using std::endl;

#include "Mat4.cpp"

int main()
{
	Mat4 a;
	a.mVec[1][2]=4;
	a.print(); cout <<endl;
	Mat4 b(a);
	b.print();
	
	b[1][2]=3333;
	b[3][3]=2;
	cout <<"b[1][2]= "<<b[1][2]<<endl;
	b.print();
	for(int i=0;i<4;i++)
	{
		for(int j=0;j<4;j++)
		{
			b[i][j]=10;
		}
	}
	cout <<endl;
	b.print();
	
	Mat4 c;
	cout <<endl;
	c.print();
	cout <<endl;
	a.print();
	c=a+b;
	cout <<endl;
	c.print();
	cout <<endl;
	
	c=c*10;
	c.print();
	cout <<endl;
	
	return 0;
}

Хотите больше делайте сами я просто нихо время тратить  мне например метод Гаусса и нафиг не нужен. Решаем следующую.

rss