Upload
trancong
View
216
Download
0
Embed Size (px)
Citation preview
Vorlesung
Computergrafik/Visualisierung II
Hochschule für Technik und Wirtschaft DresdenUniversity of Applied Sciences
Prof. Dr. Marco Block-BerlitzSommersemester 2014
Studiengang Medieninformatik
Vorlesung Computergrafik II
Prof. Dr. Marco Block-Berlitz
Vorlesungsteil
Physikalische Spielereien
Wer die Geometrie begreift, vermag in dieser Welt alles zu verstehen.Galileo Galilei
.+ .
.+
reelle Achse
imaginäre Achse
1
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 3
Ohne Lineare Algebra geht es nicht.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 4
Hinweise zum Selbststudium
Die Lineare Algebra ist eines des wichtigsten, mathematischen Handwerkzeuge der Computer-grafik. Für das Studium der Grundlagen empfehle ich das hervorragende Buch von GilbertStrang:
Strang G.: „Introduction to Linear Algebra“, 4.Auflage, Wellesley-Cambridge Press, 2009
Wer dabei Lust hat, sich mal in eineVorlesung von Prof. Strang (MIT)zu setzen, hat hier die Möglichkeitdazu:
http://www.academicearth.org/courses/linear-algebra/
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 5
Schauen wir uns noch einmal die Trigonometrie (trigon, griechisch für Dreieck) etwas genauer an.
Daraus resultierende trigonometrische Funktionen:
Um sich diese drei Regeln zu merken, erinnern wir uns immer an den trigonometrischen Gott der Winkel „SohCahToa“...
Trigonometrie und Vektoren
Ankathete
Gegenkath
ete
.b
a
immer rechter Winkel!
opposite adjazent hypotenuse
Isch großa
Sohcahtoa!
c
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 6
Winkel können in rad (Radiant, radians) oder ° (Grad, degree) angegeben werden.
Radiant Grad
Die jeweiligen Umrechnungen sind sehr einfach:
Winkelangaben und -umrechnungen
0°
90°
180°
270°
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 7
u=(cos ,sin )
Ein Einheitsvektor u ist ein Vektor mit der Länge Eins. Es gilt u∙u=1. Um einen Vektor in einen Einheitsvektor zu transformieren, teilen wir ihn einfach durch seine Länge:
Für =0 wird der Vektor u gerade zu i. Für jeden Winkel ergeben dieKomponenten cos und sin gerade u u=1, weil cos + sin =1.
Einheitsvektoren und Einheitskreis
1
1
j=(0,1)
i=(1,0)cos
sin
Einheitskreis
1
-i=(-1,0)
-j=(0,-1)
2 2
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 8
Um einen Vektor v (der ungleich dem Nullvektor ist) zu normieren, also in einen Einheits-vektor der Länge Eins zu transformieren, teilen wir ihn einfach durch seine Länge.
Dann ist u= ein Einheitsvektor in dieselbe Richtung wie v.
Normierung von Vektoren
1
1
1
v
u =
w
normierte Vektorenhaben die Länge Eins
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 9
Behauptung: Das Skalarprodukt v∙w ist Null, falls v rechtwinklig zu w steht.
Beweis: Wenn v und w rechtwinklig zueinander stehen, bilden sie zwei Seiten eines rechtwinkligen Dreiecks. Die dritte Seite ist dann v-w (Hypothenuse).
Damit wird aus für die Seitenlängen (für senkrechte Vektoren!):
daraus leiten wir ab
Winkel zwischen Vektoren und Skalarprodukt I
und wir erhalten wiedergerade das Skalarprodukt
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 10
Wenn das Skalarprodukt v∙w ungleich Null ist, kann es positiv oder negativ sein.
Winkel zwischen Vektoren und Skalarprodukt II
v
.v
v‘
w
w
ist es positiv, so ist der Winkelzwischen ihnen <90°
ist es negativ, so ist der Winkelzwischen ihnen >90°
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 11
Konkrete Winkelbestimmung I
u=
Additionstheorem
i=
u=
v=
Wenn u und v Einheitsvektoren sind, so gilt u∙v=cos und es gilt der absolute Betrag|u∙v|≤1. Das Skalarprodukt zweier Einheitsvektoren liegt zwischen -1 und 1.
u∙i = cos ∙1+sin ∙0=cos u∙v = cos ∙cos +sin ∙sin =cos( - )
Diese Winkelbestimmung gilt für beliebige Dimensionen.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 12
Für Vektoren, die keine Einheitsvektoren und ungleich dem Nullvektor sind, gilt dann die Kosinusformel:
Korrekterweise begegnet man dem Skalarprodukt v∙w nicht so ∙ , sondernso:
Später, nach Einführung der Matrizen, werden wir den Unterschied besser verstehen. Den Winkel erhalten wir schließlich mit:
Konkrete Winkelbestimmung II
Alternativ können wir auch rechnen:
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 13
Lineare Algebra in der Praxis.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 14
Seien die m Vektoren der Dimension n in Menge V gegeben
Zentrieren einer Menge von Vektoren
Zentrum (Schwerpunkt) der Vektorenmenge
Verschiebung aufUrsprung
D.h. wir ziehen von allen Vektoren der Menge ab, um diese zu
zentrieren:
, mit
Anschließend liegen die Vektoren mit zentriert vor.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 15
Als praktische Anwendung wollen wir ein Clustering-Verfahren kennenlernen.
10 Klassen werden dabei unter-schieden. Für die entsprechende Klasse wird eine 1.0 vermerkt, alle anderen mit 0.0 (Etikette oder Label).
1000 Ziffernbilder wurden von Menschen klassifiziert und liegen als Trainingsmenge TMin einer Datenbank zur Verfügung.
Ziel ist es, einen Klassifikator zu entwerfen, der mit Hilfe der klassifizierten Daten, unbekannte korrekt klassifiziert. Zunächst bringen wir die Bilddaten in eine Vektorform, das geht sehr einfach:
wir konstruieren einen 192-dim Vektor
0.0 0.0 ... 1.0 ...
3
Praktische Anwendung (Mustererkennung)
12
16
0.0 0.0 ...
0.0 0.5 1.0 ...
i
Bildwerte für i liegen im Intervall [0.0, 0.1, ..., 1.0]
Zeile 1
Zeile 2
Zeile 16
... ...Zeile 1 Zeile 2 Zeile 16
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 16
x
Um für einen unbekannten Vektor u zu entscheiden, welcher Klasse er amwahrscheinlichsten angehört, wird der Abstand dist(u, ) für alle berechnet. Diek nächsten entscheiden demokratisch über u.
Beispiel:
3 Klassen liegen im 2-dim Raum vor, das rote xist ein unbekannter Vektor und k ist 3 (ungeradeund klein).
Auf Grund der Tatsache, dass 2 mal Kreis und 1 mal Viereck vertreten sind, schlußfolgernwir, dass es sich bei dem x um einen Kreis handelt. Falls keine Klärung an dieser Stellemöglich ist, können wir k variieren, per Zufall entscheiden oder die Zentren der Klassenmit einbeziehen.
Verfahren: k-nächste Nachbarn
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 17
In der Computergrafik „dreht sich alles“ um Lineare Algebra
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 18
Das Kreuzprodukt (oder Vektorprodukt) von zwei Vektoren erzeugt einen neuen Vektor,der senkrecht zu den beiden steht.
Das Vektoren-Kreuzprodukt
Für zwei 3-dimensionale Vektoren ist es gerade definiert als:
(für ein rechtshändiges
Koordinatensystem)
wir können das aber auch wie folgt ausdrücken:
Ob der Ergebnisvektor senkrecht zu v und w ist, lässt sich über das Skalarprodukt leichtermitteln:
w analog
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 19
Die Richtung des Vektors kann mit der rechten Hand angegeben werden:
Kreuzprodukt im rechtsh. Koordinatensystem
linkshändig rechtshändig
Wenn wir die Vektoren vertauschen, wird der Ergebnisvektor negiert.
Es gilt , denn das Kreuzprodukt ist nicht kommutativ! Es ist auch nichtassoziativ.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 20
Beim Kreuzprodukt zweier Einheitsvektoren ergibt sich der entsprechende dritte:
Wenn wir die Vektoren im Kreuzprodukt vertauschen, erhalten wir selbstverständlich dienegierten Einheitsvektoren:
Für zwei gleiche Einheitsvektoren liefert das Kreuzprodukt immer den Nullvektor
Kreuzprodukt und Einheitsvektoren
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 21
Aus Sicht einer 3D-Engine gibt es in Wahrheit noch viel mehr Koordinatensysteme. Die wichtigsten fünf sind:
world space
Spielumgebung
model space (object space, local space)
Kreierte Objekte
view space (camera space, eye space)
Sicht des Betrachters
clip space (projection space, homogeneous space)
Projektion in und Repräsentation im 2D-Raum
window space
Bildschirmkoordinaten für Ausgabe
Koordinatensysteme und Transformationen II
alles kartesische Koordinatensysteme
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 22
Wir haben es in der Computergrafik/Spieleentwicklung ständig mit verschiedenenKoordinatensystemen zu tun. Es gibt beispielsweise ein System, das die Weltrepräsentiert (world space) und alle vorhandenen Objekte kennt.
Koordinatensysteme und Transformationen I
world space local space
Jedes Objekt für sich hat aber meistens ein eigenes, lokales Koordinatensystem (localspace).
Wir können jetzt die Welt so transformieren, dass wir sie aus der Sicht des Objektessehen. Anschließend können wir lokale Betrachtungen/Berechnungen sehr viel einfachervornehmen.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 23
Transformationen Objekt vs. Koordinatensystem
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 24
SimpleSoccer – Eine einfache Fußballsimulation
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 25
Hallenfußball - 5 gegen 5
Bande
Torlinie
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 26
Feldaufteilung für Positionierung
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 27
Die drei Zustände der Mannschaften
Anstoss Verteidigung
Angriff
Startpositionen der Spieler
Angriffsformation
Verteidungsformation
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 28
Bewegungen des Torhüters
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 29
Torhüter im Zustand TendBall
Zwischen Ball und Tor positionieren
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 30
Grobe Bewertung der Mitspieler
B
A
CD
gut
schlecht riskant
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 31
Ermittlung des Best Support Spot (BSS)
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 32
BSS – Potential für weitere Pässe
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 33
BSS – Potential für Torschuss
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 34
BSS – Entfernung zu Gegenspieler
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 35
SimpleSoccer – Visualisierung des BSS
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 36
Schlüsselmethode: Sicherheit eines Passes
A
B
X
Y
W
Z
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 37
Schlüsselmethode: Sicherheit eines Passes
A
B
X
Y
W
Z
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 38
Schlüsselmethode: Sicherheit eines Passes
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 39
Angenommen, wir haben zwei Koordinatensysteme. A mit x, y und z und B mit x‘, y‘und z‘. Jetzt wollen wir v aus A nach B transformieren:
Koordinatentransformationen im 3D I
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 40
Wir konstruieren den neuen Vektor v‘ also über:
Koordinatentransformationen im 3D II
In Koordinatensystem A gilt und nach der Transformation gilt:
Für die Rücktransformation nutzen wir die Eigenschaft von orthogonalen Matrizen aus,denn es gilt .
Daher gilt die Vorschrift:
Das macht uns die Hin- und Rücktransformationen sehr einfach.
So macht uns Mathematik Spaß!
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 41
Ein Beispiel dazu aus dem 2-dimensionalen Raum. Wir wollen Vektoren aus demKoordinatensystem A in das um 45° gedrehte System B transformieren:
Beispiel im 2D-Raum I
21
1
2
1
-1
sin x cos x
Transformieren wir den Vektor v=(2,1) aus A nach B:
Warum ist dieser Schritt sinnvoll?
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 42
Transformieren wir den Vektor v=(2,1) von A nach B komplett (links) und zeigenanschließend mit Hilfe der transponierten Matrix, dass der ursprüngliche Vektor verfolgreich reproduziert werden kann:
Beispiel im 2D-Raum II
wir wissen (vielleicht noch) aus der Schule, dass
... und wir erhalten .
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 43
Das vorhergehende Beispiel hat uns nicht nur gezeigt, dass für orthogonale Matrizen dieInverse gerade die Transponierte ist, sondern darüber hinaus eine allgemeineTransformationsvorschrift für die Rotation im 2-dimensionalen Raum geliefert.
Transformationsvorschrift für Rotation
Die allgemeine Rotationsvorschrift lautet:
, mit
Wir können damit zwar die Achsen in verschiedene Richtungen rotieren, aber derUrsprung bleibt jeweils der gleiche. Die Objekte sollen sich aber nicht alle im Ursprungbefinden.
Dazu benötigen wir noch einen Translationsvektor:
das führt uns zu:
Zwei Dinge machen diese Form der Transformation nicht besonders schön:
1) Eine Transformation benötigt zwei Verarbeitungsstufen und 2) die Transformation unterscheidet nicht zwischen Vektoren die Punkte repräsentieren
und Vektoren die Richtungen repräsentieren.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 44
Dafür gibt es mit den homogenen Koordinaten eine elegante Lösung. Es wird eine weitereKomponente hinzugefügt. Wenn Vektoren Richtungen repräsentieren, dann wird die w-Koordinate auf Null gesetzt. Ein Positionsvektor wird mit w=1 entsprechend markiert.
Homogene Koordinaten
world space
local space
Positionsvektoren
RichtungsvektorDie 3x3-Matrix mit Translationsvektor:
wird zu den homogenen Koordinaten wie folgt transformiert:
Es ist auch möglich, dass die w-Komponente weder 0 noch 1 ist, dann gilt:
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 45
Physikalische Spielereien sind so einfach mit Linearer Algebra.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 46
Ein autonomer Agent, bestimmt seine Bewegung innerhalb einer gegebenen Welt durchfolgende drei Faktoren:
� Auswahl eines abstrakten Ziels/Plans (Action selection)
� Steuerung durch Einfluss unterschiedlicher Kräfte, die physikalischer oder spieltech-nischer Natur sind (Steering)
� Physikalisches Verhalten und Fähigkeiten der Fortbewegung (Locomotion)
� Modell unseres Agenten in der Umwelt:
Verhalten autonomer Agenten
Agent1
Hinderniss
Agent3
Agent2
Ziel (Plan)
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 47
Eigenschaften und Aufbau eines Agenten
Position
GeschwindigkeitGeschwindigkeit
Fahrtrichtung(normalisierter Ge-schwindigkeitsvektor)
Senkrechte zur Fahrtrichtung(normalisiert)
Massemax. Geschwindigkeitmax. Kraftmax. Drehrate
Position
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 48
Wenn wir einen Zielpunkt Ziel gegeben haben, dann gibt es eine Steuerungskraft, die direktin die Richtung des Ziels zeigt.
Steuerungskraft: Ziel folgen
norm (Zielkraft) maxGeschwindigkeit.
AgentPos
ZielPos
Zielrichtung ZielPos - AgentPos=
Geschwindigkeit
Zielkraft Zielrichtung - Geschwindigkeit=
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 49
Wir haben gesehen, dass unser Agent um das Ziel manövriert und nicht zur Ruhe kommt.Damit wir die Geschwindigkeit drosseln können, müssen wir den Agenten in Abhängigkeitzum Objektabstand abbremsen.
Steuerungskraft: Ziel erreichen
Ziel folgen in Abhaengigkeit des Abstands
Geschwindigkeit
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 50
Von einem Zielpunkt (kann sich bewegen) zu fliehen entspricht einfach nur dem negiertenFolgen.
Steuerungskraft: fliehen
Ziel folgen
Geschwindigkeit
fliehen - (Ziel folgen)=
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 51
Wie lassen sich diese Kraftvektoren verwenden?Ein Beispiel kennen wir aus der Vergangenheit …
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 52
Bisher waren die beiden Funktionen update() und render() noch abhängig von t:
Funktionen update und render
...public void renderLoop() {
while (!Display.isCloseRequested()) {loescheBildschirm();
for (int i=1; i<=flummies.getFlummiSize(); i++) {Flummi aktFlummi = flummies.getFlummi(i);aktFlummi.update();aktFlummi.render();
}
Display.update();}
}...
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 53
Ein Blick in die update-Funktion zeigt die Anpassung der Position in Abhängigkeit zurGeschwindigkeit:
Funktionen update und render
public class VerhaltenPerfekterFlummi implements Verhalten {private Flummi flummi;
public VerhaltenPerfekterFlummi(Flummi flummi) {this.flummi = flummi;
}
@Overridepublic void update() {
flummi.yPos += flummi.ySpeed;
if (flummi.yPos>480 || flummi.yPos<0)flummi.ySpeed *= -1;
}}
Die Geschwindigkeit direkt auf die Position zu addieren klingt zunächst nicht unplausibel, aberwie müssten wir das jetzt mit den Kräften in Einklang bringen?
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 54
Vektoren erleichtern uns die Handhabung der Parameter.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 55
Wir führen drei nützliche Klassen zur Verwendung von Linearer Algebra ein:
Vektor2D, Vektor3D und LineareAlgebra
package math;
public class Vektor2D {public float x, y;
public Vektor2D() {this(0, 0);
}
public Vektor2D(float x, float y) {setX(x);setY(y);
}
public Vektor2D(Vektor2D vec) {this(vec.x, vec.y);
}
public Vektor2D(float x, float y, float x2, float y2) {this(x2 - x, y2 - y);
}
public Vektor2D(Vektor2D a, Vektor2D b) {this(b.getX() - a.getX(), b.getY() - a.getY());
}
public void setPosition(Vektor2D vec) {setX(vec.getX());setY(vec.getY());
}
public boolean isNullvector() {return (x == 0 && y == 0);
}
public void add(Vektor2D vec) {x += vec.x;y += vec.y;
}...
}
package math;
public class Vektor3D {public float x, y, z;
public Vektor3D() {this(0, 0, 0);
}
public Vektor3D(float x, float y, float z) {setX(x);setY(y);setZ(z);
}
public Vektor3D(Vektor3D vec) {this(vec.getX(), vec.getY(), vec.getZ());
}
public Vektor3D(float x, float y, float z, float x2, float y2, float z2) {
this(x2 - x, y2 - y, z2 - z);}
public Vektor3D(Vektor3D a, Vektor3D b) {this(b.getX() - a.getX(), b.getY() - a.getY(),
b.getZ() - a.getZ());}
public void setX(float x) {this.x = x;
}
public float getX() {return x;
}...
}
package math;
public class LineareAlgebra {private LineareAlgebra() {};
public static Vektor2D add(Vektor2D vec1, Vektor2D vec2) {
return new Vektor2D(vec1.getX()+vec2.getX(), vec1.getY()+vec2.getY());
}
public static Vektor3D add(Vektor3D vec1, Vektor3D vec2){
return new Vektor3D(vec1.getX()+vec2.getX(), vec1.getY()+vec2.getY(), vec1.getZ()+vec2.getZ());
}
public static Vektor2D sub(Vektor2D vec1, Vektor2D vec2) {
return new Vektor2D(vec1.getX()-vec2.getX(), vec1.getY()-vec2.getY());
}
public static Vektor3D sub(Vektor3D vec1, Vektor3D vec2){
return new Vektor3D(vec1.getX()-vec2.getX(), vec1.getY()-vec2.getY(),vec1.getZ()-vec2.getZ());
}
public static Vektor2D mult(Vektor2D vec, float s) {return new Vektor2D(vec.getX()*s, vec.getY()*s);
}
...}
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 56
Die Klassen werden entsprechend angepasst. Hier das Resultat der Anpassung von derKlasse VerhaltenPerfekterFlummi:
Anpassung an Vektoren
public class VerhaltenPerfekterFlummi implements Verhalten {private Flummi flummi;
public VerhaltenPerfekterFlummi(Flummi flummi) {this.flummi = flummi;
}
@Overridepublic void update() {
flummi.position.add(flummi.velocity);
if (flummi.position.y>480 || flummi.position.y<0)flummi.velocity.y *= -1;
}}
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 57
Allerdings wirken Objekte mit konstanten Geschwindigkeiten nicht sehr realisitisch.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 58
Wir erweitern das Objektmodell mit position/velocity umacceleration
Vektor3D
Vektor3D
Vektor3D
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 59
Die Funktion update wird um die Beschleunigung (acceleration) erweitert:
Erweiterung um acceleration
public void update() {velocity.add(acceleration);velocity.truncate(maxSpeed);position.add(velocity);
}
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 60
1) Erzeugen Sie viele Flummies und verwenden zufällige Beschleunigungsvektoren zurÄnderung der Geschwindigkeiten.
2) Erzeugen Sie eine Beschleunigung in Richtung eines Mausklicks und sehen was passiert.Kennen Sie eine Möglichkeit, genau bei dem Mausklick zu landen?
Übungsvorschläge
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 61
„A force is a vector that causes an object with mass to accelerate.“ (Newton)
Ein Blick ins Physikbuch
Newton hat noch mehr schlaue Sachen gesagt:
I) Newtons first law of motion:
„An object at rest stays at rest and an object in motion stays in motion.“
„… at a constant speed and direction unless acted upon by an unbalanced force.“
„An objects velocity (Vektor3D) will remain constant if it is in a state of equilibrium.“
III) Newtons third law of motion:
„For every action there is an equal and opposite reaction.“
„Forces always occur in pairs. The two forces are of equal strength, but opposite
direction.“
II) Newtons second law of motion:
„Force equals mass times acceleration.“�� � � ∙ ��
�� � ���
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 62
Hier der kleine aber feine Unterschied (bzw. Zusammenhang) von Masse und Gewicht:
Masse [kg]
Gewicht = Masse • g [N = newton]
Ein Objekt mit der Masse von 1 kg auf der Erde hat auch 1 kg Masse auf dem Mond. DasObjekt wiegt allerdings nur ein Sechstel auf dem Mond!
Gewicht versus Masse
Gravitationsbeschleunigung
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 63
Dann wollen wir unser Konzept verfeinern
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 64
Wenn wir die Masse für einen Moment mal ausser Acht lassen und nur die Kraft betrachten:
Erweiterung um acceleration
applyForce(Vektor3D force) {acceleration = force;
}
Wenn wir später aber mehrere Kräfte hinzufügen wollen
applyForce(wind);applyForce(gravitation);...
benötigen wir hier die Akumulation von Kräften:
object.applyForce(wind);object.applyForce(gravitation);object.update();object.render();...
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 65
Ein Blick ins Physikbuch
Die gute Nachricht: „Net Force equals mass times acceleration.“
����
Dann müssen wir bei der Funktion update allerdings darauf achten, die Beschleunigungimmer zu initialisieren, bzw. am Ende zu löschen:
public void update() {velocity.add(acceleration);velocity.truncate(maxSpeed);position.add(velocity);acceleration.mult(0);
}
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 66
Jetzt führen wir die Masse ein.
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 67
Wir erweitern das Objektmodell mit den Eigenschaften position/velocity/acceleration um mass
Vektor3D float
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 68
Wir könnten die Masse in applyForce direkt mit dem Kraftvektor verrechnen:
Einführung von mass (Versuch 1)
applyForce(Vektor3D force) {force.div(mass);acceleration = force;
}
�� � � ∙ ��
�� � ���
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 69
Was könnte schief gehen?
Prof. Dr. Marco Block-Berlitz Vorlesung Computergrafik II SoSe 2014 Folie 70
Mit dieser Version der applyForce-Methode ändern wir den Kraftvektor, was Auswirkungenauf weitere Funktionsaufrufe hätte:
Einführung von mass (Versuch 2)
Wir könnten aber einmal eine Kraft berechnen und diese auf mehrere Akteure anwenden:
wind = ...obj1.applyForce(wind);obj2.applyForce(wind);...
applyForce(Vektor3D force) {force.div(mass);acceleration.add(force);
}
Eine einfache Lösung lautet:
applyForce(Vektor3D force) {Vektor3D forceCopy = new Vektor3D(force);forceCopy.div(mass);acceleration.add(forceCopy);
}