View Full Version : [FRAGE] - Beispiel 3A
- TeMET_noSCE -
23-10-2004, 18:55
es gibts zwar einen haufen alter threads zu diesem bsp, aber ich will mich trotzdem vergewissern, ob ich alles richtig verstanden habe:
1) in CG1Matrix4x4 bzw 3x3 und CG1Vector implementiert man die gesuchten rechenvorgänge (add, multLeft, multRight, ...) das sollte ja kein problem sein. außerdem gibts ja test() zum überprüfen...
2) wenden wir uns CG1Object zu:
translate(): mit einem switch checkt man den transformationMode und macht dann das entsprechende multLeft/Right mit modelMatrixPoint und einer neuen Matrix, die man mit setTranslate(xyz) füllt
mit modelMatrixVector ist hier nichts zu tun, der ändert sich ja nicht, oder?
rotateXYZ(): genau wie translate() nur statt dem setTranslate(xyz) nimmt man eben setRotateXYZ(winkel). das selbe muss man hier aber auch für den modelMatrixVector durchführen.
setScale(): auch hier geht man genauso vor wie bei der vorigen methode: modelMatrixPoint und -Vector je nach case multLeft/Right mit einer temporären Matrix, die per setScale() mit sx,sx,sz bzw dreimal demselben s gefüttert wird.
stimmt das so oder hab ich was falsch/vergessen/bin ich komplett am holzweg... ???
entschuldigt das miserable deutsch, aber wenn man seit 13 stunden nix anderes als emacs und zur abwechslung technische informatik sieht gehts nimmer besser
Matthias
23-10-2004, 19:14
ich würde sagen, dass du alles richtig verstanden hast ;)
Wings-of-Glory
23-10-2004, 19:17
entschuldigt das miserable deutsch, aber wenn man seit 13 stunden nix anderes als emacs und zur abwechslung technische informatik sieht gehts nimmer besser
*lol* solang du deine fragen nicht in pseudocode oder in microcode formulierst, macht es ja nix :D
ich habe auch vor kurzem mit dem bsp. angefangen, dürfte ich noch eine frage dranhängen?
bei der methode multleft in matrix4x4.java ..
ich hab die berechnungen mit einer geschachtelten for-schleife gelöst.
ist das eh ok, oder... ich hab nämlich von anderen kollegen gehört, sie hätten die indizes der matrizen händisch erhöht.
hat meine methode erheblichen einfluß auf die perfomance des programms ?... ich meine im negativen sinne.
Matthias
23-10-2004, 19:22
bei der methode multleft in matrix4x4.java ..
ich hab die berechnungen mit einer geschachtelten for-schleife gelöst.
ist das eh ok, oder... ich hab nämlich von anderen kollegen gehört, sie hätten die indizes der matrizen händisch erhöht.
hat meine methode erheblichen einfluß auf die perfomance des programms ?... ich meine im negativen sinne.
schleife passt schon, jeder moderne compiler optimiert schleifen mit fester durchlaufszahl sowieso weg und da es bei der übung wie in dem anderen thread angemerkt eh nicht um die performance sondern um das verständnis geht, ist das sicher in ordnung. kannst beim abgabegespräch ja erwähnen, dass es anders ev. schneller wäre.
- TeMET_noSCE -
23-10-2004, 19:39
ich würde sagen, dass du alles richtig verstanden hast ;)cool, danke!
dann kann ich mich ja jetzt voller freude auf 3B konzentrieren!
(Anmerkung: Sarkamus! :rolleyes: )
@wings of glory: ich habs ohne schleife
NightHaG
23-10-2004, 20:31
Dito... ist zwar verdammt viel code, erfüllt aber seinen Zweck.
btw. geh ich richtig in der anname dass beispiel 3B nicht mehr so einfach sein wird?
ChrisChiu
23-10-2004, 23:03
Dito... ist zwar verdammt viel code, erfüllt aber seinen Zweck.
btw. geh ich richtig in der anname dass beispiel 3B nicht mehr so einfach sein wird?
Das ist richtig. Aber zur Beruhigung: früher war Beispiel 3A und 3B einfach nur ein Beispiel, und die Leute haben's (großteils) auch bewältigt. Dieses Jahr haben wir's halt ausbalanciert, indem wir's aufgeteilt haben.
Das "Schwierigkeits-" bzw. "Aufwandsverhältnis" zwischen 3A und 3B würd ich ca. als 35 zu 65 einschätzen (oder schätzungsweise 15 zu 85 wenn man sich die Unterlagen und Bemerkungen zur Viewing Pipeline nicht durchliest :eek2: ). Anders ging ein sinnvolles Aufteilen der Aufgaben leider nicht, da 3A und 3B doch ziemlich zusammengehören.
stimmt, 3A ist ohne 3B ziemlich schwer zu debuggen, zumindest die Sachen die in CG1Object zu implementieren sind.
Habt ihr da einfach auf gut Glück abgegeben oder mal schnell noch 3B vorm 3A-Abgabetermin gemacht, damit man sieht ob man bei den ganzen Transformationen nicht wo einen Fehler eingebaut hat?
Wings-of-Glory
26-10-2004, 16:54
ich hab nur d. test-methode aufgerufen.
er gab ein ok.. und ich hab dann abgegeben.
- TeMET_noSCE -
26-10-2004, 20:04
bei 3B steh ich momentan noch ziemlich an:
zwar alle methoden implementiert, aber ich seh nur einen wilden haufen wirrer linien, bei cross wirft er gleich ne nullpointerexception ....:(
zum testen kannst du die transform ja nur halb implementieren ... nur modelMatrixPoint.transformPoints(...) .. dass wenigsten irgendwas dargestellt wird ...
Hallo,
man könnte auch zB "nur" mal weiterhin mit den 2d objekten arbeiten
(Häkchen/bool DoOnlyWorldTransform) um zu sehen ob die Transformationen überhaupt richtig auf die Objekte angewendet werden (wie schon fscan vorhin erwähnt hat), wenn das klappt dann weiter mit der Projektion. So kann man sich etwas vorhanteln und muss nicht drauf hoffen das sofort die gesamte Pipeline funktioniert.
lg,
Roland
irgendwie krieg ich die 4x4matrix multiplikation nicht hin. bei 3x3 funktionierts schon einwandfrei und ich kopier einfach den algorithmus und lass ihn statt von 0-2 von 0-3 laufen aba es funktioniert trotzdem nicht. im vorgeschlagenen kapitel des redbooks find ich nix zur matrizenmultiplikation. kann mir jemand vielleicht einen tipp geben?
Matthias
27-10-2004, 20:19
einfach statt 0-2 bis 0-3 laufen wird nicht funktionieren, du musst auch in der schleife den code so anpassen, dass die zusätzliche reihe und spalte berücksichtigt wird.
aber zur matrixmultiplikation allgemein sollten sich ja wirklich genügend informationen finden lassen.
ja das wird sie ja. ich hab 3 ineinander veschachtelte schleifen und bei 3x3 laufen die eben von 0-2 und bei 4x4 sollte das eigentlich auch funktionieren wenn sie von 0-3 laufen, weil es wird ja ganz genau analog wie bei einer 3x3 multiplikation vorgegeangen halt dass 1 zeile/spalte dazukommt oder irre ich mich da?
Matthias
27-10-2004, 20:38
ok, ich bin von 2 schleifen ausgegangen ... ja, eigentlich sollte es, wenn richtig programmiert, einfach von 3x3 auf 4x4 erweitert werden können.
matrix multiplikation:
http://www.itp.tu-graz.ac.at/LV/kernbich/AppSoft-1/appsoft1/node35.html
ChrisChiu
27-10-2004, 20:39
irgendwie krieg ich die 4x4matrix multiplikation nicht hin. bei 3x3 funktionierts schon einwandfrei und ich kopier einfach den algorithmus und lass ihn statt von 0-2 von 0-3 laufen aba es funktioniert trotzdem nicht. im vorgeschlagenen kapitel des redbooks find ich nix zur matrizenmultiplikation. kann mir jemand vielleicht einen tipp geben?
Gängige Mathematikbücher, speziell der Linearen Algebra, sollten was zur Matrizenmultiplikation haben.
Generell würde ich allerdings keine Schleife laufen lassen (falls du das so gemacht hast), sondern die Elemente der Ergebnismatrix selber zusammensetzen in der Art:
element bei i, j = Zeilenvektor i der matrix 1 * Spaltenvektor j der matrix 2
Wobei ich die multiplikation ausschreiben würde also in der form a * b + c * d + e * f usw.
Entschuldige die "Schwammigkeit" dieser Erklärung, aber es sollte schon ausreichend sein - immerhin müsste das Wissen aus Mathematik 1 die Matrizenmultiplikation abdecken. Matrizenmultiplikation zähle ich jedenfalls zum wirklich grundlegenden Basisrepertoire eines Informatikers (wir wollen ja nicht, dass die Mathematiker uns auslachen)...
Matthias
27-10-2004, 20:41
Generell würde ich allerdings keine Schleife laufen lassen (falls du das so gemacht hast), sondern die Elemente der Ergebnismatrix selber zusammensetzen in der Art
aus welchem grund wird das eigentlich empfohlen?
ChrisChiu
27-10-2004, 20:44
aus welchem grund wird das eigentlich empfohlen?
Ich find's nur übersichtlicher dann, ist wohl Geschmackssache.
Performance-technisch wird's keinen Unterschied machen da der Compiler gescheit genug sein sollte, eine Schleife mit konstanter Durchlaufzahl zu "unrollen".
Ach, noch was: ich glaub im Hearn Baker ist ein extensives Kapitel über die mathematischen Grundlagen (hauptsächlich Lineare Algebra), zumindest in der Second Edition (da ich ja die Third Edition nicht hab). Da wird wohl was über die Matrizenmultiplikation auch drinstehen. Alternativ steht's wohl in den Mathematik 1 Unterlagen (Skriptum, Buch?). Google ist auch ein guter Tipp.
ja WIE zwei matrizen multipliziert werden is ja nicht das problem :D ich dachte vielleicht gibts bei dieser CG4x4 matrize irgendeinen spezialfall.
naja ich hab die multiplikation eben nicht ausgeschrieben sondern ganz allgemein als schleife implementiert. es funktioniert eh alles wunderbar in der 3x3 aba in der 4x4 :confused:
ChrisChiu
27-10-2004, 20:50
ja WIE zwei matrizen multipliziert werden is ja nicht das problem :D ich dachte vielleicht gibts bei dieser CG4x4 matrize irgendeinen spezialfall.
naja ich hab die multiplikation eben nicht ausgeschrieben sondern ganz allgemein als schleife implementiert. es funktioniert eh alles wunderbar in der 3x3 aba in der 4x4 :confused:
Überprüf nochmal die Schleife... es sollte ja eigentlich analog gehen, nur dass bei der 4x4 jeweils eine Spalte wie eine Zeile zusätzlich berücksichtig werden muß.
Das ist auch ein weiterer Grund warum ich eher keine Schleife empfehle, die können leicht unübersichtlich werden (wobei auch das ausgeschriebene nicht unbedingt übersichtlich ist, aber man sieht dann oft gleich, wenn wo was nicht stimmt).
black_sheep
28-10-2004, 14:28
ja WIE zwei matrizen multipliziert werden is ja nicht das problem :D ich dachte vielleicht gibts bei dieser CG4x4 matrize irgendeinen spezialfall.
naja ich hab die multiplikation eben nicht ausgeschrieben sondern ganz allgemein als schleife implementiert. es funktioniert eh alles wunderbar in der 3x3 aba in der 4x4 :confused:
ich glaub ich hab dein problem .. habs naemlich gerade selber gehabt :)
bei mir war nur die 4. spalte falsch
das problem is dass wir die matrizen verkehrt herum multipliziert haben
bei multLeft gilt also:
-> m[i][j] = left.m[i][0] * copy.m[0][j] ...
und bei multRight kervehrt
hoffe das loest dein problem
vBulletin® v3.7.1, Copyright ©2000-2009, Jelsoft Enterprises Ltd.