• Keine Ergebnisse gefunden

Aufgabe1(C++-Programmierung, 7+5+2+6Punkte ) Abgabeam24.11.2010 ¨UbungenzuComputergraphikI-Blatt3

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe1(C++-Programmierung, 7+5+2+6Punkte ) Abgabeam24.11.2010 ¨UbungenzuComputergraphikI-Blatt3"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. G. Zachmann R. Weller

TU Clausthal Institut f¨ur Informatik

11. November 2010

Wintersemester 2010/2011

Ubungen zu Computergraphik I - Blatt 3 ¨

Abgabe am 24. 11. 2010

Aufgabe 1 (C++-Programmierung, 7+5+2+6 Punkte)

a) Implementieren Sie eine Klasse f¨ur n×m-Matrizen mit Floating-Point-Zahlen als Werten. Die Klasse sollte folgende Funktionalit¨at bieten:

class Matrix {

public:

Matrix( unsigned int n, unsigned int m );

Matrix( const Matrix& m );

~Matrix();

float *operator [] ( unsigned int i );

const float *operator [] const ( unsigned int i );

const Matrix& operator = ( const Matrix& m );

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

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

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

const Matrix& operator *= ( float s );

void print();

protected:

... // Ueberlegen Sie sich die interne Instanzvariable };

Matrix operator + ( const Matrix& lhs, const Matrix& rhs );

Matrix operator - ( const Matrix& lhs, const Matrix& rhs );

Matrix operator * ( const Matrix& lhs, const Matrix& rhs );

Matrix operator * ( const Matrix& m, float s );

Die Wirkung der Funktionen sei wie folgt definiert:

• Matrix( unsigned int n, unsigned int m );Der Konstruktor bekommt die Anzahl der Zeilen und Spalten der Matrix ¨ubergeben.

• Matrix( const Matrix& m );Kopierkonstruktor

• ~Matrix(); Destruktor (Hinweis: Denken Sie daran, daß Sie im Konstruktor dynamisch Speicher alloziiert haben!)

• float *operator [] ( unsigned int i );Zugriffsoperator, der den Zugriff mittelsa[i][j]

auf die Matrix erlaubt. Analog f¨urconst float *operator [] const ( unsigned int i );.

1

(2)

• const Matrix& operator = ( const Matrix& m ); Zuordnungsoperator, der es erlaubt, Ordnung und Inhalt einer Matrixmzu kopieren.

• const Matrix& operator *= ( float s );bzw

Matrix operator * ( const Matrix& m, float s ); Multiplikation jedes Eintrags der Matrix mit dem skalaren Faktors.

• void print();Gibt die Matrix auf stdout aus.

Die restlichen Funktionen entsprechen der bekannten Matrizen-Multiplikation, -Addition bzw -Subtraktion. Bei all diesen Operationen soll die Dimension der Matrizen ¨uberpr¨uft werden und eine Fehlermeldung ausgeben, wenn die Matrizen nicht kompatibel sind.

Achtung: Vermeiden Sie bei der ¨Uberladung der Operatoren mit fast gleicher Funktionalit¨at redundanten Code (siehe C++ Wiederholung, Folie 41)

b) Leiten Sie von der Matrix-Basisklasse eine KlasseVec3 zur Repr¨asentation von 3D-Vektoren ab.

Der Header sollte folgendermassen aussehen:

class Vec3 : public Matrix {

public:

Vec3();

Vec3( const Vec3& v );

float operator [] ( unsigned int i );

float normalize( );

};

float operator * ( const Vec3& lhs, const Vec3& rhs );

Vec3 cross( const Vec3& lhs, const Vec3& rhs );

float norm2( const Vec3& v ) ; Die Wirkung der Funktionen sei wie folgt:

• float operator [] ( unsigned int i ); Zugriffsoperator, der den Zugriff mittels a[i]

auf den Vektor erlaubt.

• float operator * ( const Vec3& lhs, const Vec3& rhs ); Liefert das Skalarprodukt zweier Vektoren.

• Vec3 cross( const Vec3& lhs, const Vec3& rhs );Berechnet das Kreuzprodukt/Vek- torprodukt zweier Vektoren.

• float norm2( const Vec3& v ) ;Gibt die euklidische Norm des Vektors zur¨uck.

• float normalize( );Normalisiert einen Vektor und gibt zus¨atzlich die Norm zur¨uck.

Bemerkung: In sogenanntem

”production code“ w¨urde man die Klasse Vec3 nicht direkt von Matrix ableiten.

2

(3)

c) Leiten Sie aus der Matrix-Basisklasse eine Klasse Mat3 f¨ur 3×3 Matrizen ab. Die Klasse soll folgende Funktionen enthalten:

class Mat3 : public Matrix {

public:

Mat3();

Mat3( const Mat3& m );

};

Vec3 operator * ( const Mat3& m, const Vec3& v );

float det( const Mat3& m );

Die Wirkung der Funktionen sei wie folgt:

• Vec3 operator * ( const Mat3& m, const Vec3& m );Eine normale Matrix-Vektor-Multiplikation wird durchgef¨uhrt.

• float det( const Mat3& m ); Berechnet die Determinante der Matrix.

d) Schreiben Sie ein kleines Programm zum Testen Ihrer Klassen.

3

Referenzen

ÄHNLICHE DOKUMENTE

Eine n-reihige, quadratische Matrix heißt regulär, wenn ihre Deter- minante einen von Null verschiedenen Wert besitzt.. Dann ist die Matrix A nicht

Bestimmt man, z.B., die inverse Matrix mit Hilfe des Gaußschen Algorithmus, so wird jede Zeile der Matrix (A | E) durch das entsprechende Diagonalele- ment

Spaltenvektoren der Matrix A können als lineare Kombination der ersten 3 linear unabhängigen Spaltenvektoren dargestellt werden. Oder einfacher: man bemerkt die

Platz- und Materialeffektiv Weiterentwicklung eines Multiplexers Ansteuerung mit Transistoren Aufteilung eines seriellen Signales in. parallele Informationen Durchläuft Zyklen

From the third picture onwards we observe the formation of a circle of finite precision Ritz values located somewhere in the region where complex minimizers occur most frequently..

Karlsruher Institut f¨ ur Technologie Institut f¨ ur Theorie der Kondensierten Materie Ubungen zur Theoretischen Physik F ¨ SS

Geben Sie eine obere Schranke für die Konvergenzgeschwindigkeit an und zeigen Sie so, dass diese Reihe auf jeder beschränkten Teilmenge von M N (C) gleichmäßig konvergiert.. Aufgabe

[r]