Matrizen und 3D-Programmierung
-
XDVD schrieb:
Wird doch alles in deinem Buch erklärt, TomasRiker, oder liege ich da völlig daneben? Aber wie gesagt, das *warum* fehlt mir da ein bisschen...
stelle dir mal vor, du hast eine Firma. Du hast drei Rohstoffe und erzeugst daraus vier Zwischenprodukte.
das kann man schön in eine Rohstoff- und Zwischenproduktmatrix aufschreiben.
ergibt eine 3x4 Matrix.So jetzt hast du auch aus diesen vier Zwischenprodukten zwei Endprodukte gemacht. Das lässt sich auch in eine Matrix schreiben. Wäre eine 4x2 Matrix.
So jetzt möchtest du aber wissen wieviel Rohstoffe denn die Endprodukte verbrauchen. Also Multiplizierst du die Matrix mit den Rohsotffen und Zwischenprodukten mit der der Zwischenprodukten und Endprodukten.
3x4 Matrix * 4x2 Matrix = 3x2 Matrix
als Ergebniss bekommst du eine Matrix in der du ablesen kannst wieviel Rohstoffe du für die Endprodukte verbrauchst.
-
ich versuche dir das warum an einem etwas komplexeren beispiel zu erklären,an dem aber auch ich das problem gelernt hab: die vektordrehung.
nehmen wir mal an, du hast einen gegenstand mit 4 eckpunkten(jeweils x/y/z wert)(mach dir am besten ein koordinatensystem,dann kannste die schritte verfolgen)
nun multiplizierst du jeden punkt mit dieser matrix:(alpha=40)
(cos alpha sin alpha 0 )
(-sin alpha cos alpha 0 )
(0 0 1 )
(0 0 0 )die ergebnisse notierst du dir wieder in dein koordinatensystem, und schreibst es dir auf
so, nun beobachtest du etwas,und fragst dich bestimmt wieso
die matrix mit der du grad gerechnet hast, ist eigentlich nur eine optische vereinfachung zu dieser rechnung:
x'=x*cos alpha+y*(-sin alpha)
y'=x*sin alpha+y*-sin alphaes gibt insgesamt 4 matrizen, die für die 3dprogramierung intressant sind: rotationsmatrix(also das oben genannte) skalierungsmatrix(vergrößern eines gegenstandes),und translationsmatrix(verschieben eines gegenstandes).
die translationsmatrix ist die einfachste matrix.
sie ist jediglich eine vektoradditiondie skalierungsmatrix.
sie entsteht durch einfache multiplikation der koordinaten mit einer zahl.
die wirkungen sind auch ziemlich nice. wenn du einen punkt 0/0 und 0/3 hast, und die y koordinate mit 3 multiplizierst, erreichst du eine verdreifachung des abstands zwischen den beiden punkten,du vergrößerst den gegenstanddie kameramatrix(ich verzichte mal auf ihre erklärung, da ich die dahinterliegenden berechnungen noch nich ganz kapiert hab, die kameramatrix lässt dich den gegenstand nur aus einer betrachterperspektive sehen)
achja, was zu beachten ist, wenn du in nem 3dprogramm gegenstände mit matritzen bearbeitest:erst rotieren, dann skalieren, und zum schluss translatieren, sonst erhälst du verfälschte rotationswerte.
-
Danke@Otze... hast mir ne Menge Schreibarbeit erspart Die Rotationsmatrix wollte ich auch aufführen, gg...
-
THX, jetzt habe ich es verstanden Es ist richtig cool, die Sachen, die sonst OpenGL verschleiert, richtig selbst zu rechnen und auf dem Papier auszuprobieren Vielen Dank an alle!
@Jester (SORRY! ) Wenn das Aufgaben waren Die Einheitsmatrix macht nichts (mal 1), die zweite (wer hätts gedacht) skaliert einen Vektor um einen zweiten Vektor s und die Dritte versetzt einen Vektor um die Vektor t... richtig?
Jetzt habe ich aber noch ein zweites Problem... ich habe keine Ahnung was Cosinus und Sinus sind?! Bitte helft mir nochmal
Bye, Michi
-
ohne zeichnung wirds schwer...
ok, versuchen wirs mal so:zeichnen einen kreis mit dem radius 5.
in diesen kreis zeichnest du vom mittelpunkt des kreises aus 2 geraden(bitte mach einen winkel<90°)nun nimmst du dir den schnittpunkt der einen geraden mit dem kreis"rand" und zeichnest von dieser stelle aus im 90°winkel von der schneidenden geraden in richtung der 2. gerade eine weitere linie.
diese 3 geraden bilden nun ein rechtwinkliges dreieck.
die letzte linie die du grad gezeichnet hast ist der cosinus.
der sinus ist der abschnitt der 2. geraden vom mittelpunkt bis zum schnittpunkt mit dem cosinus.aber mal ne andre frage, was ist eine koordinatensystemmatrix(kameramatrix zb)
und wie rechnet man mit ihr?
-
XDVD schrieb:
...
Jetzt habe ich aber noch ein zweites Problem... ich habe keine Ahnung was Cosinus und Sinus sind?! Bitte helft mir nochmal
Bye, Michi
Pisa???
Wie alt bist du?
Geh einfach mal auf Wikipedia und suche nach Winkelfunktion.Die tatsache das man matrizen nutzt ist einfach die, dass man eine hintereinanderausführung von transformation, rotation, scalierung ect. in einen schlag ausführen kann ( man multipliziert die matrizen "einfach" auf, in der Java OpenGL Api ist das schön zu sehen). Außerdem braucht man für die transformation von 3D nach 2d ( Bildschirm) matrizen, also warum zwischen verschiedenen berechnungsmodellen hin und her springen.
-
XDVD schrieb:
@Jansen ...
Äh, ich glaube Du verwechselst mich da
Deine Antworten sind natürlich richtig.So, und jetzt solltest Du Dir vielleicht noch anschauen, wie man die Matrizen miteinander kompiniert:
Zum Beispiel: Erst skalieren und dann verschieben... ist also S eine Skalierungsmatrix, T eine Translationsmatrix dann können wir jeden Vektor v erst skalieren und dann verschieben, indem wir folgendes Berechnen:
T*(S*v), da wir aber umklammern dürfen ist das das gleiche wie (T*S)*v, wir können also auch erst das Matrixprodukt berechnen. Der Vorteil ist jetzt der: Egal welche Transformationen wir durchführen wollen, wir brauchen nur einmal die Matrix zu berechnen und können anschließend beliebig komplizierte Operationen mit immer gleichem Aufwand auf Vektoren ausführen.
Das Assoziativgesetz spart also Rechenleistung
Versuch ruhig mal ein paar Matrizen zu multiplizieren um zu sehen, was passiert. Berechne vielleicht für eine Translationsmatrix und eine Skalierungsmatrix einmal T*S und einmal S*T und beachte die Unterschiede.
MfG Jester
MfG Jester
-
xroads42 schrieb:
XDVD schrieb:
...
Jetzt habe ich aber noch ein zweites Problem... ich habe keine Ahnung was Cosinus und Sinus sind?! Bitte helft mir nochmal
Bye, Michi
Pisa???
Wie alt bist du?es soll leute geben, die noch vor ende der 10. klasse anfangen mit 3d zu programmieren, ich persönlich hab mir sinus/cosinus vor weniger als 14 tagen beigebracht,als ich mir die rotationsmatrix erschlossen hab.
-
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
-
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
ja, ich dachte das wäre klar.. sollte ich mal dazuschreiben
-
xroads42 schrieb:
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
ja, ich dachte das wäre klar.. sollte ich mal dazuschreiben
Klar, hat ja auch jeder Mephistopheles aus Goethes Faust 1 gelesen
-
Online schrieb:
xroads42 schrieb:
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
@xroads stammt der Spruch in deiner Signatur von Mephistopheles aus Goethes Faust 1?
ja, ich dachte das wäre klar.. sollte ich mal dazuschreiben
Klar, hat ja auch jeder Mephistopheles aus Goethes Faust 1 gelesen
Und an den satz merkt man das du es nicht gelesen hast *gg*
-
ne, muss ich zugeben, hab ich nicht...
es ist ja auch noch niemand dadurch berühmt geworden weil er tote Menschen zitiert(Ich glaub, jetzt wirds langsam off-topic )
-
lustig schrieb:
so vom Gefühl her würde ich sagen, dass die Frage "Was sind SIN / COS / TAN" relativ häufig gestellt wird. Wäre das nicht ein Eintrag in die FAQ Wert?
Jau, da hast Du wohl recht, kann sicher nicht schaden. Sammeln wir erstmal was da alles rein soll:
- Definition(über Dreieck und über Potenzreihe)
- allgemeine Eigenschaften (z.B. periodisch, Wertebereich [-1,1])
- Additionstheoreme
- Ableitungen
- Grad vs. Bogenmaß (beliebtes Problem beim Programmieren)Was fehlt noch?
MfG Jester
-
Ich würd noch die Definition über den Einheitskreis hinzu legen, dann wird
auch die Unterscheidung Grad / Bogenmaß klarer.
-
Das meinte ich mit dem Dreieck... das legt man ja in den Einheitskreis rein.
-
ich fände die Umkehrfunktionen noch wichtig. Nicht ausführlich, aber einfach damit man z.B. weiss, wie man den Winkel berechnen kann, wenn zwei Seiten eines Rechtwinkligen Dreiecks gegeben sind. Bzw. was asin(x) oder sin-1(x) ist.
-
Jester schrieb:
Das meinte ich mit dem Dreieck... das legt man ja in den Einheitskreis rein.
Ahso. Ich dachte, du meintest was anderes.
-
Weil ich lange nichts in LaTeX gemacht habe...
Potenzreihenentwicklung des Sinus/Kosinus:
sin(z) = \sum_{k=0}^{\infty}\frac{(-1)^k z^{2k + 1}}{(2k + 1)!}
cos(z) = \sum_{k=0}^{\infty}\frac{(-1)^k z^{2k}}{(2k)!}