Hozzászólások
-
SzerzőBejegyzés
-
Szerintem nem fog lefordulni a program. Nekem ugy tunik, neked a c es c++ alapok ujboli attekintese nem artana.
peldaul: // ez itt egy megjegyes
Az en (nevetseges) megjegyzeseimet egy az egyben beomlesztetted a programba.A Matrix::init ketszer van ertelmezve, mas parameterekkel, raadasul egyszer a main fuggveny kozepen.
Egyszer egy ‘tar’ nevu tombod van (vektor tar[10]), maskor ‘m’ a tomb neve. Annak ugyanaz kellene legyen a neve.
A tobbi hibarol majd szol a fordito 🙂
A kiiratast pedig egy uj metodussal a legegyszerubb elintezni a Matrix osztalyban.
3×3-as matrixhoz mukodik a „paraszt” modszer is:
Code:void Matrix::init(vektor &a, vektor &b){
tomb[0][0] = a.x*b.x;
tomb[1][0] = a.x*b.y;
tomb[2][0] = a.x*b.z;
tomb[0][1] = a.y*b.x;
tomb[1][1] = a.y*b.y;
tomb[2][1] = a.y*b.z;
tomb[0][2] = a.z*b.x;
tomb[1][2] = a.z*b.y;
tomb[2][2] = a.z*b.z;
}Es ezzel meg is van.
*mindenfele elgepeles es hibas indexeles joga fenntartva 😀
3×3-as matrixhoz mukodik a „paraszt” modszer is:
Code:void Matrix::init(vektor &a, vektor &b){
tomb[0][0] = a.x*b.x;
tomb[1][0] = a.x*b.y;
tomb[2][0] = a.x*b.z;
tomb[0][1] = a.y*b.x;
tomb[1][1] = a.y*b.y;
tomb[2][1] = a.y*b.z;
tomb[0][2] = a.z*b.x;
tomb[1][2] = a.z*b.y;
tomb[2][2] = a.z*b.z;
}Es ezzel meg is van.
*mindenfele elgepeles es hibas indexeles joga fenntartva 😀
Ahogy elnezem, minimum 2 vektor kell hozza. Hogy 3×3-ast kapj, kell egy 3×1-es es egy 1×3-as matrix.
Ha jol latom errol van szo:
http://en.wikipedia.org/wiki/Tensor_product
http://en.wikipedia.org/wiki/Kronecker_productA masodik link alapjan konnyu rajonni a logikajara 😉
Ahogy elnezem, minimum 2 vektor kell hozza. Hogy 3×3-ast kapj, kell egy 3×1-es es egy 1×3-as matrix.
Ha jol latom errol van szo:
http://en.wikipedia.org/wiki/Tensor_product
http://en.wikipedia.org/wiki/Kronecker_productA masodik link alapjan konnyu rajonni a logikajara 😉
Amiket irtal szerintem egyszeru dolgok. A Matrix osztalyodat szerintem tulaltalanositottad (avagy agyuval a verebre).
Amire szukseged lenne (szerintem):
– a fuggveny, amivel a vektorokbol matrixot allit elo: ez lehetne a matrix metodusa
– osszeadasi mulvelet 2 matrix kozott
– matrix osztasa skalarralVazolom kodban:
Code:struct vektor {
float x,y,z;
};class Matrix3x3 {
private:
float tomb[3][3]; // minek vacakolni?public:
void init(vektor a, vektor b){
// itt feltoltod a ‘tomb’-ot
}
Matrix3x3 &operator +=(Matrix3x3 b){ // osszeadas
int x,y;
for(x=0; x<3; x++)
for(y=0; y<3; y++)
tomb[x][y] += b.tomb[x][y];
return *this;
}
Matrix3x3 &operator/=(float c){ // osztas skalarral
int x,y;
for(x=0; x<3; x++)
for(y=0; y<3; y++)
tomb[x][y] /= c;
return *this;
}
};A hasznalat valami ilyesmi lehetne:
Code:vektor valami[10]; // ott vannak a vektoraink, feltoltve
Matrix m[10]; // matrixok
for(i=0; i<n; i++)
m[I].init(valami[I]; // minden vektor atalakitva
Matrix osszeg = m[0];
for(i=1; i<n; i++)
osszeg += m[I];
m /= egy_szam;
// most m-ben megvan ami kell nekedAmiket irtal szerintem egyszeru dolgok. A Matrix osztalyodat szerintem tulaltalanositottad (avagy agyuval a verebre).
Amire szukseged lenne (szerintem):
– a fuggveny, amivel a vektorokbol matrixot allit elo: ez lehetne a matrix metodusa
– osszeadasi mulvelet 2 matrix kozott
– matrix osztasa skalarralVazolom kodban:
Code:struct vektor {
float x,y,z;
};class Matrix3x3 {
private:
float tomb[3][3]; // minek vacakolni?public:
void init(vektor a, vektor b){
// itt feltoltod a ‘tomb’-ot
}
Matrix3x3 &operator +=(Matrix3x3 b){ // osszeadas
int x,y;
for(x=0; x<3; x++)
for(y=0; y<3; y++)
tomb[x][y] += b.tomb[x][y];
return *this;
}
Matrix3x3 &operator/=(float c){ // osztas skalarral
int x,y;
for(x=0; x<3; x++)
for(y=0; y<3; y++)
tomb[x][y] /= c;
return *this;
}
};A hasznalat valami ilyesmi lehetne:
Code:vektor valami[10]; // ott vannak a vektoraink, feltoltve
Matrix m[10]; // matrixok
for(i=0; i<n; i++)
m[I].init(valami[I]; // minden vektor atalakitva
Matrix osszeg = m[0];
for(i=1; i<n; i++)
osszeg += m[I];
m /= egy_szam;
// most m-ben megvan ami kell nekedLatom megeloztetek, de most mar elkuldom a valaszomat en is 🙂
1. engedelyezed az „universe” tarolot ( rendszer -> adminisztracio -> szoftverforrasok, ubuntu szoftverek lap: kozossegi karbantartasu szoftverek (universe) bepipal
2. telepited a stellarium-ot csomagbol
pl.
apt-get update
apt-get install stellariumvizsla wrote:Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.Nem a matrix implementalasara gondoltam, hanem tobb matrix tarolasara. 🙂
Code:#includetemplate
class Matrix {
// …..
};int main(void){
std::vector < Matrix > c; // c-ben tarthatunk tobb matrixot
}
vizsla wrote:Ez az std::vector is pl. egy rand. iterátorral felszerelt tároló, inkább, mint műveletvégző. Ilyen 10-es, esetleg 100-as nagyságrendű elemszámnál, még elmegy, de afölött már kínlódás használni. Ráadásul nem több dimenziós műveletekhez készült, így eleve „át” kell írni.
Szóval egyszerűbb írni egyet, ami lineárisan (egy mutatóval – nem iterátorral – elérhetően) tárolja (mint, ahogy vázoltam). Annál is inkább, mert elemek közbeszúrására itt nem igazán van szükség.Nem a matrix implementalasara gondoltam, hanem tobb matrix tarolasara. 🙂
Code:#includetemplate
class Matrix {
// …..
};int main(void){
std::vector < Matrix > c; // c-ben tarthatunk tobb matrixot
}
-
SzerzőBejegyzés

legutóbbi hsz