• Keine Ergebnisse gefunden

Aufgabe1(C++-Programmierung, 7+5+4+2Punkte ) Abgabeam16.11.2011 ¨UbungenzuComputergraphikI-Blatt2

N/A
N/A
Protected

Academic year: 2021

Aktie "Aufgabe1(C++-Programmierung, 7+5+4+2Punkte ) Abgabeam16.11.2011 ¨UbungenzuComputergraphikI-Blatt2"

Copied!
3
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Prof. G. Zachmann D. Mohr

TU Clausthal Institut f¨ur Informatik

9. November 2011

Wintersemester 2011/12

Ubungen zu Computergraphik I - Blatt 2 ¨

Abgabe am 16. 11. 2011

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

Die folgenden Aufgabenteile sollen in das Framework (siehe Webpage) integriert werden. Die Datei- namen sind gleich benannt wie die jeweilige Klasse. Wie in der C++-Wiederholung erkl¨art, sollen die Deklarationen in *.h und die Definition in *.cpp Dateien geschrieben werden.

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 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

1

(2)

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

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

auf die Matrix erlaubt.

• const Matrix& operator = ( const Matrix& m );Zuordnungsoperator, der es erlaubt, Ord- nung und Inhalt einer Matrix mzu kopieren.

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

Matrix operator * ( const Matrix& m, float s );Multiplikation jedes Eintrags der Ma- trix 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 und eine Fehlermeldung ausgeben werden, 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 mittelsa[i]auf den Vektor erlaubt.

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

• Vec3 cross( const Vec3& lhs, const Vec3& rhs );Berechnet das Kreuzprodukt/Vektorprodukt 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.

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

2

(3)

d) Angenommen, Sie w¨urden aus der Matrix-Basisklasse eine KlasseMat3f¨ur 3×3 Matrizen ableiten.

Die Klasse enthielte folgende Funktionen:

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.

W¨are Ihre Implementierung der KlasseMat3 effizient? Begr¨unden Sie ihre Antwort.

3

Referenzen

ÄHNLICHE DOKUMENTE

F¨ ur reelle Matrizen

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]

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

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