Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

01.12.2009, 22:22

Problem mit Matrixklasse

Also entweder ich hab grad voll die Tomaten auf den Augen, oder ich weiß auch nicht mehr.
Ich hab eine eigentlich ganz simple Matrix-Klasse:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#ifndef MATRIX_HPP
#define MATRIX_HPP



template<typename T>
class Matrix4
{

    public:

        union
        {
            T a [16];
            struct
            {
                T a11, a21, a31, a41,
                  a12, a22, a32, a42,
                  a13, a23, a33, a43,
                  a14, a24, a34, a44;
            };
        };

        void reset (const T& f = 0)
        {
            for (unsigned int j = 0; j < 16; ++j)
            {
                a [j] = f;
            }
        }

        void identity ()
        {
            reset ();
            a11 = 1;
            a22 = 1;
            a33 = 1;
            a44 = 1;
        }

        Matrix4 (const T& f = 0) { reset (f); }

        Matrix4 (const T& _a11, const T& _a21, const T& _a31, const T& _a41,
                 const T& _a12, const T& _a22, const T& _a32, const T& _a42,
                 const T& _a13, const T& _a23, const T& _a33, const T& _a43,
                 const T& _a14, const T& _a24, const T& _a34, const T& _a44)
        : a11 (_a11), a21 (_a21), a31 (_a31), a41 (_a41),
          a12 (_a12), a22 (_a22), a32 (_a32), a42 (_a42),
          a13 (_a13), a23 (_a23), a33 (_a33), a43 (_a43),
          a14 (_a14), a24 (_a24), a34 (_a34), a44 (_a44) { }

        Matrix4 (const Matrix4<T>& m)
        {
            Matrix4 (m.a11, m.a21, m.a31, m.a41,
                     m.a12, m.a22, m.a32, m.a42,
                     m.a13, m.a23, m.a33, m.a43,
                     m.a14, m.a24, m.a34, m.a44);
        }

};

template<typename T>
std::ostream& operator<< (std::ostream& s, const Matrix4<T> m)
{
    s << "/ " << m.a11 << " | " << m.a12 << " | " << m.a13 << " | " << m.a14 << " \\\n";
    s << "| " << m.a21 << " | " << m.a22 << " | " << m.a23 << " | " << m.a24 << " |\n";
    s << "| " << m.a31 << " | " << m.a32 << " | " << m.a33 << " | " << m.a34 << " |\n";
    s << "\\ " << m.a41 << " | " << m.a42 << " | " << m.a43 << " | " << m.a44 << " /\n";
    return s;
}



typedef Matrix4<float> Matrix4f;



#endif // MATRIX_HPP


Und dazu diesen Code:

C-/C++-Quelltext

1
2
3
4
Matrix4f m;
m.identity();
m.a44 = 1;
std::cout << m << std::endl;


Leider ist die Ausgabe vollkommener Stuss. Aber ich seh bei bestem Willen keinen Fehler!

Wer kann helfen? Danke im Voraus!
<< an dieser Stelle ist eine Signatur verstorben >>

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

01.12.2009, 23:02

Definier "vollkommener Stuss" ;)

Bist du da mal mit dem Debugger durch?

btw:

C-/C++-Quelltext

1
Matrix4 (const T& f = 0) { reset (f); } 

Wenn schon generisch, dann richtig.

C-/C++-Quelltext

1
Matrix4 (const T& f = T () ) { reset (f); } 

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

3

02.12.2009, 00:03

Der Kopierkonstruktor ist vollkommener Stuss.

C-/C++-Quelltext

1
2
3
4
5
6
7
Matrix4 (const Matrix4<T>& m)
        {
            Matrix4 (m.a11, m.a21, m.a31, m.a41,
                     m.a12, m.a22, m.a32, m.a42,
                     m.a13, m.a23, m.a33, m.a43,
                     m.a14, m.a24, m.a34, m.a44);
        } 

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

02.12.2009, 00:11

Jop, und da fehlt wohl ein &

C-/C++-Quelltext

1
std::ostream& operator<< (std::ostream& s, const Matrix4<T> m) 

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

02.12.2009, 00:15

Zitat von »"dot"«

Jop, und da fehlt wohl ein &

C-/C++-Quelltext

1
std::ostream& operator<< (std::ostream& s, const Matrix4<T> m) 


Gott sei Dank, sonst wär ihm der Fehler vielleicht nie aufgefallen! ;-)

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

6

02.12.2009, 00:19

Zitat von »"David_pb"«

Der Kopierkonstruktor ist vollkommener Stuss.

C-/C++-Quelltext

1
2
3
4
5
6
7
Matrix4 (const Matrix4<T>& m)
        {
            Matrix4 (m.a11, m.a21, m.a31, m.a41,
                     m.a12, m.a22, m.a32, m.a42,
                     m.a13, m.a23, m.a33, m.a43,
                     m.a14, m.a24, m.a34, m.a44);
        } 


Oh Gott, was hat mich denn da nur geritten O.o
<< an dieser Stelle ist eine Signatur verstorben >>

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

02.12.2009, 00:20

Zitat von »"the[V«

oid"]Oh Gott, was hat mich denn da nur geritten O.o


Das frag ich mich auch oft am nächsten Tag wenn ich so spät code :p

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

8

02.12.2009, 00:23

Obwohl. Von der Idee her, wäre es schön, wenn es gehen würde. :)

C++0x. Ja!

9

02.12.2009, 00:40

Zitat von »"drakon"«

Obwohl. Von der Idee her, wäre es schön, wenn es gehen würde. :)
Aber dann bitte auch in der Initialisierungsliste. ;)

Asmodiel

Treue Seele

Beiträge: 150

Wohnort: Schweiz

Beruf: Applikationsentwickler

  • Private Nachricht senden

10

02.12.2009, 12:47

Zitat von »"the[V«

oid"]Oh Gott, was hat mich denn da nur geritten O.o


Das kommt darauf an, wer zu dem Zeitpunkt bei dir war.

Andere Frage: Macht es bei Matrizen eigentlich Sinn, etwas anderes als Zahlen zuzulassen? Wie z.B. eine Stringmatrix?
Und wie siehts mit der Matrix-Grösse als Template-Parameter aus? Bspw. Matrix<4, 4> oder vielleicht sogar Matrix<double, 4, 4>?

So als kleine Anregungen... Ich bräucht auch grad eine, dann könnte ich deine stibitzen
Eat a beaver - Save a tree.

Werbeanzeige