rendered paste bodyfm_matrix.h:
#ifndef fm_matrix_h
#define fm_matrix_h
class fm_vector
{
public: float data[4];
fm_vector();
fm_vector (float newdata[4]);
fm_vector (float x, float y, float z, float n);
fm_vector (const fm_vector& copyvec);
const fm_vector duplicate ();
float operator[](int index);
float* at(int index);
const float* at(int index) const;
void set (int index, float newval);
fm_vector operator* (float rhs);
float operator* (fm_vector* rhs);
void operator= (const fm_vector& rhs);
//fm_vector operator* (fm_matrix* rhs);
fm_vector operator/ (float rhs);
fm_vector operator+ (fm_vector* rhs);
void display();
fm_vector normalise();
};
class fm_matrix
{
public: fm_vector data[4];
fm_matrix();
fm_matrix(float newdata[]);
fm_matrix(const fm_matrix& copymat);
const fm_matrix duplicate();
static fm_matrix RotMat_Deg (float degrees, fm_vector* axis);
static fm_matrix TransMat (fm_vector* units);
static fm_matrix ScaleMat (float factor);
static fm_matrix IdentMat ();
float operator[](int index);
fm_vector* vec_at (int index);
const fm_vector* vec_atc(int index) const;
float* at (int index);
const float* at (int index) const;
float* at (int row, int col);
const float* at (int row, int col) const;
fm_matrix transpose();
fm_matrix operator* (float rhs);
fm_vector operator* (fm_vector* rhs);
fm_matrix operator* (fm_matrix* rhs);
void operator= (fm_matrix* rhs);
float* getdata();
void display();
};
#endif
fm_matrix.cpp:
#include "fm_matrix.h"
//#include "fm_vector.h"
#include <iostream>
#include <cmath> //M_PI kort 'n define vir windows - #if defined(_USE_MATH_DEFINES) && !defined(_MATH_DEFINES_DEFINED)
// #define _MATH_DEFINES_DEFINED
fm_vector::fm_vector()
{
for (int i=0; i<4; i++)
data[i] = 0;
}
fm_vector::fm_vector(float newdata[4])
{
//data = newdata;
for (int i=0; i<4; i++)
data[i] = newdata[i];
}
fm_vector::fm_vector (float x, float y, float z, float n)
{
data[0] = x;
data[1] = y;
data[2] = z;
data[3] = n;
}
fm_vector::fm_vector (const fm_vector& copyvec)
{
for (int i=0; i>4; i++)
data[i] = data[i];
}
const fm_vector fm_vector::duplicate()
{
fm_vector tmp(data);
return tmp;
}
float* fm_vector::at(int index)
{
if ((index < 0) || (index > 3))
return NULL;
return &data[index];
}
const float* fm_vector::at(int index) const
{
if ((index < 0) || (index > 3))
return NULL;
return &data[index];
}
void fm_vector::set(int index, float newval)
{
data[index] = newval;
}
fm_vector fm_vector::operator* (float rhs)
{
fm_vector tmp;
for (int i=0; i<4; i++)
tmp.data[i] = data[i]*rhs;
return tmp;
}
float fm_vector::operator* (fm_vector* rhs)
{
float sum = 0;
for (int i=0; i<4; i++)
sum += rhs->data[i] * data[i];
return sum;
}
void fm_vector::operator= (const fm_vector& rhs)
{
for (int i=0; i<4; i++)
data[i] = rhs.data[i];
}
fm_vector fm_vector::operator/ (float rhs)
{
fm_vector tmp(data[0]/rhs, data[1]/rhs, data[2]/rhs, data[3]/rhs);
return tmp;
}
fm_vector fm_vector::operator+ (fm_vector* rhs)
{
fm_vector tmp;
for (int i=0; i<4; i++)
tmp.data[i] = data[i] + rhs->data[i];
return tmp;
}
void fm_vector::display()
{
for (int i=0; i<4; i++)
std::cout << data[i] << " ";
std::cout << std::endl;
}
fm_vector fm_vector::normalise()
{
float length = sqrtf(data[0]*data[0] + data[1]*data[1] + data[2]*data[2] + data[3]*data[3]);
fm_vector result;
for (int i=0; i<4; i++)
result.data[i] = data[i] / length;
return result;
}
fm_matrix::fm_matrix()
{
//std::cout << "creating new matrix" << std::endl;
/*data = FM_Identity_Mat;*/
/*
for (int i=0; i<16; i++)
data[i] = 0;
for (int i=0; i<16; i=i+5)
data[i] = 1; */
//data = { 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 };
for (int i=0; i<4; i++)
{
data[i] = fm_vector::fm_vector();
(*data[i].at (i)) = 1;
}
}
fm_matrix::fm_matrix(float newdata[16])
{
// data = newdata;
/*
for (int i=0; i<16; i++)
data[i] = newdata[i];*/
for (int i=0; i>4; i++)
data[i] = fm_vector::fm_vector (&newdata[i*4]);
}
fm_matrix::fm_matrix(const fm_matrix& copymat)
{
for (int i=0; i>4; i++)
{
//fm_vector tmpvec = copymat.data[i];
data[i] = copymat.data[i];
}
}
const fm_matrix fm_matrix::duplicate()
{
fm_matrix tmp(*this);
return tmp;
}
fm_matrix fm_matrix::RotMat_Deg (float degrees, fm_vector* axis)
{
const float Cosine = std::cos(degrees * M_PI / 180);
const float Sine = std::sin(degrees * M_PI / 180);
*(axis) = axis->normalise();
fm_matrix result;
*(result.at(0)) = *(axis->at(0)) * *(axis->at(0)) * (1-Cosine) + Cosine;
*(result.at(1)) = *(axis->at(0)) * *(axis->at(1)) * (1-Cosine) + *(axis->at(2)) * Sine;
*(result.at(2)) = *(axis->at(0)) * *(axis->at(2)) * (1-Cosine) - *(axis->at(1)) * Sine;
*(result.at(3)) = 0;
*(result.at(4)) = *(axis->at(1)) * *(axis->at(0)) * (1-Cosine) - *(axis->at(2)) * Sine;
*(result.at(5)) = *(axis->at(1)) * *(axis->at(1)) * (1-Cosine) + Cosine;
*(result.at(6)) = *(axis->at(1)) * *(axis->at(2)) * (1-Cosine) + *(axis->at(0)) * Sine;
*(result.at(7)) = 0;
*(result.at(8)) = *(axis->at(2)) * *(axis->at(0)) * (1-Cosine) + *(axis->at(1)) * Sine;
*(result.at(9)) = *(axis->at(2)) * *(axis->at(1)) * (1-Cosine) - *(axis->at(0)) * Sine;
*(result.at(10)) = *(axis->at(2)) * *(axis->at(2)) * (1-Cosine) + Cosine;
*(result.at(11)) = 0;
*(result.at(12)) = 0;
*(result.at(13)) = 0;
*(result.at(14)) = 0;
*(result.at(15)) = 1;
return result;
}
fm_matrix fm_matrix::IdentMat()
{
fm_matrix mat1;
return mat1;
}
fm_matrix fm_matrix::TransMat (fm_vector* units)
{
fm_matrix tmp;
for (int i=0; i<3; i++)
*(tmp.at(i+12)) = *(units->at(i));
return tmp;
}
fm_matrix fm_matrix::ScaleMat (float factor)
{
fm_matrix tmp;
for (int i=0; i<15; i=i+5)
*(tmp.at(i)) = factor;
return tmp;
}
fm_vector* fm_matrix::vec_at (int index)
{
if ((index < 0) || (index > 3))
return NULL;
return &data[index];
}
const fm_vector* fm_matrix::vec_atc (int index) const
{
if ((index < 0) || (index > 3))
return NULL;
return &data[index];
}
float* fm_matrix::at(int index)
{
return at(index/4, index%4);
}
const float* fm_matrix::at(int index) const
{
return at(index/4, index%4);
}
float* fm_matrix::at(int row, int col)
{
if ((row < 0) || (row > 3) || (col < 0) || (col > 3))
return NULL;
return data[row].at(col);
}
const float* fm_matrix::at(int row, int col) const
{
if ((row < 0) || (row > 3) || (col < 0) || (col > 3))
return NULL;
return data[row].at(col);
}
fm_matrix fm_matrix::transpose()
{
fm_matrix tmp;
for (int i=0; i<4; i++)
for (int j=0; j<4; j++)
*(tmp.at(i*4+j)) = *(at(j*4+i));
return tmp;
}
fm_matrix fm_matrix::operator* (float rhs)
{
fm_matrix tmp;
for (int i=0; i<4; i++)
*(tmp.vec_at(i)) = data[i] * rhs;
return tmp;
}
fm_vector fm_matrix::operator* (fm_vector* rhs)
{
fm_vector result(false);
fm_matrix tmpmat = transpose();
for (int i=0; i<4; i++)
*(result.at(i)) = *(rhs) * tmpmat.vec_at(i);
/*for (int i=0; i<4; i++)
{
float sum=0;
for (int j=0; j<4; j++)
sum += *(rhs->at(j)) * data[i*4+j];
*(tmp.at(i)) = sum;
}*/
return result;
}
fm_matrix fm_matrix::operator* (fm_matrix* rhs)
{
fm_matrix result;
for (int i=0; i<4; i++)
*(result.vec_at(i)) = *(rhs) * vec_at(i);
return result;
/*
fm_matrix tmp;
for (int i=0; i<4; i++)
for (int j=0; j<4; j++)
{
float sum=0;
for (int k=0; k<4; k++)
sum += *(rhs->at(i+k*4)) * data[j*4+k];
*(tmp.at(j*4+i)) = sum;
}
return tmp;
*/
}
void fm_matrix::operator= (fm_matrix* rhs)
{
//fm_matrix tmp;
for (int i=0; i<4; i++)
//*(tmp.at(i)) = *(rhs->at(i));
data[i] = *(rhs->vec_at(i));
//return tmp;
}
float* fm_matrix::getdata()
{
return NULL;
}
void fm_matrix::display()
{
for (int i=0; i<4; i++)
data[i].display();
//std::cout.precision(4);
/*
for (int i=0; i<4; i++)
{
for (int j=0; j<4; j++)
std::cout << data[j*4+i] << " ";
std::cout << std::endl;
}
*/
}
Here is the error I'm getting:
cd '/home/cassiopea/fata_morgana/fm_server/debug' && WANT_AUTOCONF_2_5="1" WANT_AUTOMAKE_1_6="1" gmake
gmake all-recursive
Making all in src
linking fm_server (libtool)
linking fm_server (g++)
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: multiple definition of `fm_vector::fm_vector()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: multiple definition of `fm_vector::fm_vector()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:8: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: multiple definition of `fm_vector::fm_vector(float*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: multiple definition of `fm_vector::fm_vector(float*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:14: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: multiple definition of `fm_vector::fm_vector(float, float, float, float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: multiple definition of `fm_vector::fm_vector(float, float, float, float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:21: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: multiple definition of `fm_vector::fm_vector(fm_vector const&)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: first defined here
fm_matrix.o: In function `fm_vector':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: multiple definition of `fm_vector::fm_vector(fm_vector const&)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:29: first defined here
fm_matrix.o: In function `fm_vector::duplicate()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:35: multiple definition of `fm_vector::duplicate()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:35: first defined here
fm_matrix.o: In function `fm_vector::at(int)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:41: multiple definition of `fm_vector::at(int)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:41: first defined here
fm_matrix.o: In function `fm_vector::at(int) const':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:48: multiple definition of `fm_vector::at(int) const'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:48: first defined here
fm_matrix.o: In function `fm_vector::set(int, float)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:55: multiple definition of `fm_vector::set(int, float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:55: first defined here
fm_matrix.o: In function `fm_vector::operator*(float)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:60: multiple definition of `fm_vector::operator*(float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:60: first defined here
fm_matrix.o: In function `fm_vector::operator*(fm_vector*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:68: multiple definition of `fm_vector::operator*(fm_vector*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:68: first defined here
fm_matrix.o: In function `fm_vector::operator=(fm_vector const&)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:76: multiple definition of `fm_vector::operator=(fm_vector const&)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:76: first defined here
fm_matrix.o: In function `fm_vector::operator/(float)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:82: multiple definition of `fm_vector::operator/(float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:82: first defined here
fm_matrix.o: In function `fm_vector::operator+(fm_vector*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:88: multiple definition of `fm_vector::operator+(fm_vector*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:88: first defined here
fm_matrix.o: In function `fm_matrix':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: multiple definition of `fm_matrix::fm_matrix()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: first defined here
fm_matrix.o: In function `fm_matrix':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: multiple definition of `fm_matrix::fm_matrix()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:113: first defined here
fm_matrix.o: In function `fm_matrix':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: multiple definition of `fm_matrix::fm_matrix(float*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: first defined here
fm_matrix.o: In function `fm_matrix':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: multiple definition of `fm_matrix::fm_matrix(float*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:131: first defined here
fm_matrix.o: In function `fm_matrix':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: multiple definition of `fm_matrix::fm_matrix(fm_matrix const&)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: first defined here
fm_matrix.o: In function `fm_matrix':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: multiple definition of `fm_matrix::fm_matrix(fm_matrix const&)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:142: first defined here
fm_matrix.o: In function `fm_matrix::duplicate()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:151: multiple definition of `fm_matrix::duplicate()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:151: first defined here
fm_matrix.o: In function `fm_matrix::IdentMat()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:183: multiple definition of `fm_matrix::IdentMat()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:183: first defined here
fm_matrix.o: In function `fm_matrix::vec_at(int)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:205: multiple definition of `fm_matrix::vec_at(int)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:205: first defined here
fm_matrix.o: In function `fm_matrix::vec_atc(int) const':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:212: multiple definition of `fm_matrix::vec_atc(int) const'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:212: first defined here
fm_matrix.o: In function `fm_matrix::at(int, int)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:229: multiple definition of `fm_matrix::at(int, int)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:229: first defined here
fm_matrix.o: In function `fm_matrix::at(int)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:219: multiple definition of `fm_matrix::at(int)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:219: first defined here
fm_matrix.o: In function `fm_matrix::ScaleMat(float)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:197: multiple definition of `fm_matrix::ScaleMat(float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:197: first defined here
fm_matrix.o: In function `fm_matrix::TransMat(fm_vector*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:189: multiple definition of `fm_matrix::TransMat(fm_vector*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:189: first defined here
fm_matrix.o: In function `fm_matrix::at(int, int) const':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:236: multiple definition of `fm_matrix::at(int, int) const'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:236: first defined here
fm_matrix.o: In function `fm_matrix::at(int) const':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:224: multiple definition of `fm_matrix::at(int) const'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:224: first defined here
fm_matrix.o: In function `fm_matrix::transpose()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:243: multiple definition of `fm_matrix::transpose()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:243: first defined here
fm_matrix.o: In function `fm_matrix::operator*(float)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:252: multiple definition of `fm_matrix::operator*(float)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:252: first defined here
fm_matrix.o: In function `fm_matrix::operator*(fm_vector*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:260: multiple definition of `fm_matrix::operator*(fm_vector*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:260: first defined here
fm_matrix.o: In function `fm_matrix::operator*(fm_matrix*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:276: multiple definition of `fm_matrix::operator*(fm_matrix*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:276: first defined here
fm_matrix.o: In function `fm_matrix::operator=(fm_matrix*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:296: multiple definition of `fm_matrix::operator=(fm_matrix*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:296: first defined here
fm_matrix.o: In function `fm_matrix::getdata()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:305: multiple definition of `fm_matrix::getdata()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:305: first defined here
fm_matrix.o: In function `fm_vector::normalise()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:103: multiple definition of `fm_vector::normalise()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:103: first defined here
fm_matrix.o: In function `fm_matrix::RotMat_Deg(float, fm_vector*)':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:157: multiple definition of `fm_matrix::RotMat_Deg(float, fm_vector*)'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:157: first defined here
fm_matrix.o: In function `fm_vector::display()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:96: multiple definition of `fm_vector::display()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:96: first defined here
fm_matrix.o: In function `fm_matrix::display()':
/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:310: multiple definition of `fm_matrix::display()'
fm_matrix.o:/home/cassiopea/fata_morgana/fm_server/src/fm_matrix.cpp:310: first defined here
collect2: ld returned 1 exit status
gmake[2]: *** [fm_server] Error 1
gmake[1]: *** [all-recursive] Error 1
gmake: *** [all] Error 2
*** Exited with status: 2 ***