PDA

View Full Version : [LÖSUNG] - CG1 Prüfung vom 15.10.07


Zapster
26-01-2008, 19:38
meine lösungen vom CG1 test vom 15.10.07:
(http://www.cg.tuwien.ac.at/courses/CG/Angaben/Angabe_CG1VO_071015.pdf)

Aufgabe 1 – Back Face Culling
Gegeben sind die fünf Punkte:
A = (1, 0, 0) B = (1, 1, 1) C = (2, 3, 1) D = (2, 3, 1) E = (2, 1,1)

(komisch dass punkt C == D. wird wohl ein typo sein?!?)
wir haben 3 dreiecke:

\Delta ABE
\Delta BCE
\Delta CDE wobei das hier nur eine linie ist (weil C==D) und somit auch keinen normalvektor hat

zuerst rechnet man sich die normalvektoren von den flächen aus:

\overline{BA} \times \overline{BE} = \left( \begin{array}{c}0 \\ -1 \\- 1 \\ \end{array} \right) \times \left( \begin{array}{c}1 \\ 0 \\ 0 \\ \end{array} \right) = \left( \begin{array}{c}0 \\ -1 \\ -1 \\ \end{array} \right)

\overline{CB} \times \overline{CE} = \left( \begin{array}{c}-1 \\ -2 \\ 0 \\ \end{array} \right) \times \left( \begin{array}{c}0 \\ -2 \\ 0 \\ \end{array} \right) = \left( \begin{array}{c}2 \\ 4 \\ 0 \\ \end{array} \right)

und jetzt die normalvektoren mit dem viewvektor multiplizieren:

\left( \begin{array}{c}0 \\ -1 \\ -1 \\ \end{array} \right) \cdot \left( \begin{array}{c}0 \\ -1 \\ 1 \\ \end{array} \right) = 0

\left( \begin{array}{c}2 \\ 4 \\ 0 \\ \end{array} \right) \cdot \left( \begin{array}{c}0 \\ -1 \\ 1 \\ \end{array} \right) = -4

backface ist wenn (Buch 3rd Edt S530 9-2):

V_{view} \cdot N > 0

\Delta ABE ist sichtbar als linie
\Delta BCE ist sichtbar


Aufgabe 2 – Hermite Splines

Siehe: http://www.informatik-forum.at/showthread.php?t=61908
Lösung:
P_1(u)=(-1,5) u^3+(1,-9) u^2+(1,5) u+(-1,1)
P_2(u)=(-1,2) u^3+(2,-4) u^2+(0,2) u+(0,2)

Aufgabe 3 – Transformationen

EDIT: siehe rep.:
http://www.cg.tuwien.ac.at/courses/CG/Angaben/CG1repetitorium2008.pdf

EDIT2: so dass müsst jetzt richtig sein (danke freeye!)

verschieben in den ursprung:

\left(\begin{array}{cccc} 1 & 0 & 0 & -3 \\ 0 & 1 & 0 & -4 \\ 0 & 0 & 1 & -5 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

dann drehn um die x achse um den winkel -\frac{\pi}{2}

\left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

und zuletzt drehn um die z achse um den winkel \frac{\pi}{2}

\left(\begin{array}{cccc} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

und alle matrizen ausmultiplizieren:

\left(\begin{array}{cccc} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right) \left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right) \left(\begin{array}{cccc} 1 & 0 & 0 & -3 \\ 0 & 1 & 0 & -4 \\ 0 & 0 & 1 & -5 \\ 0 & 0 & 0 & 1 \\ \end{array}\right) = \left(\begin{array}{cccc} 0 & 0 & -1 & 5 \\ 1 & 0 & 0 & -3 \\ 0 & -1 & 0 & 4 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

der punkt P ist natürlich im ursprung

lg,
zap

freeye
26-01-2008, 20:31
EDIT: passt =)

Zapster
26-01-2008, 22:36
EDIT: erster post ausgebessert

Neocron
27-01-2008, 13:07
@ Zapster:
Bist du dir sicher das dein BFC stimmt? Wenn ich mir beim Dreieck ABE den Vektor AB bzw. BE ausrechne rechne ich mir doch B-A bzw. E-B aus!? Wieso hast du A-B und B-E gerechnet?

Aufklärung bitte :)

Zapster
27-01-2008, 16:39
@ Zapster:
Bist du dir sicher das dein BFC stimmt? Wenn ich mir beim Dreieck ABE den Vektor AB bzw. BE ausrechne rechne ich mir doch B-A bzw. E-B aus!? Wieso hast du A-B und B-E gerechnet?

Aufklärung bitte :)

EDIT: Neocron hat natürlich recht, erster post (wieder mal) geändert.

lg und danke für die hinweise,
zap

Neocron
27-01-2008, 16:46
Meiner Meinung nach musst du beim BFC dir einen Punkt des Dreiecks nehmen, z.B. wenn ich mir ABE anschaue nehm ich mir B her. Jetzt rechne ich mir BA (A-B) sowie BE aus (E-B), stell mir dann mittels Kreuzprodukt BA x BE den Normalvektor drauf auf und multipliziere das Ergebnis dann mit V.
Ist es negativ, ist es sichtbar; ist es positiv, dann backface...

Ist so ähnlich in diesem (http://www.informatik-forum.at/showthread.php?t=58045) thread erklärt,
Lg ;)

Zapster
27-01-2008, 17:35
Ist es negativ, ist es sichtbar; ist es positiv, dann backface...


ah ja, es soll ja sichtbar sein wenn das skalar dings negativ ist... damn

also das ergebnis an sich stimmt ja wieder weil mein normalvektor "anders" ist und ich die bedienung umgedreht hab...
werds aber ausbesser... sollte so sein wie im buch...
vielen dank, wieder was gelernt an dem wochende...

lg,
zap

arthemiss
27-01-2008, 18:29
@zapster:

wenn du die Kanten des ersten Dreiecks berechnest, kommt bei dir für Kante BA der Vektor (0, -1, -1) und für Kante BE der vektor (1,0,0) raus.

BA hab ich genauso, aber:
ich bekomme für BE (1,0,-2)
ich rechne so: E-B, also BE=(2-1, 1-1, (-1)-1)= (1, 0, -2)

mach ich irgendwas falsch??

danke und lg

arthemiss
27-01-2008, 18:32
ok, ich seh grad, dass du die angabe falsch abgetiptt hast. Punkt E ist lt Angabe =(2,1,-1) du hast das Minuszeichen übersehen, denke ich :-)

lg

arthemiss
27-01-2008, 18:50
also, hier mal mein ganzes ergebnis für dieses bsp:

I. Dreieck:
BA=(0,-1,-1)
BE=(1,0,-2)
BAXBE=(2,-1,1)

II. Dreieck:
CB=(-1,-2,0)
CE=(0,-2,-2)
CBXCE=(4,2,2)

III. Dreieck:
DC=Nullvektor
DE=(0,-2,-2)
DCXDE= Nullvektor

Skalarprodukte:

I. Dreieck:
(2,-1,1)o(0,-1,1) = 2 --> Dreieck nicht sichtbar

II. Dreieck:
(4,-2,2)o(0,-1,1) = 4 --> Dreieck nicht sichtbar

kann das jemand bestätigen? oder ist das falsch?

lg

Daaave
27-01-2008, 19:05
kann ich bestättigen, habs genauso.

interessant wär jetzt die 3. Fläche, denn die müsste ein negatives ergebnis liefern, sonst hats was ;)

MyAcc
27-01-2008, 19:28
kann mir vielleicht jemand erklären, welche vektoren man aufstellen muss um auf das richtige ergebnis zu kommen?

signalout
27-01-2008, 21:21
also, hier mal mein ganzes ergebnis für dieses bsp:

I. Dreieck:
BA=(0,-1,-1)
BE=(1,0,-2)
BAXBE=(2,-1,1)

II. Dreieck:
CB=(-1,-2,0)
CE=(0,-2,-2)
CBXCE=(4,2,2)

III. Dreieck:
DC=Nullvektor
DE=(0,-2,-2)
DCXDE= Nullvektor

Skalarprodukte:

I. Dreieck:
(2,-1,1)o(0,-1,1) = 2 --> Dreieck nicht sichtbar

II. Dreieck:
(4,-2,2)o(0,-1,1) = 4 --> Dreieck nicht sichtbar

kann das jemand bestätigen? oder ist das falsch?

lg

das skalarprodukt von (2,-1,1) und (0,-1,1) ist doch 2*0+(-1)+(-1)+1 = 0
wie kommst du dann auf 2?
genauso beim zweiten dreieck...

arthemiss
27-01-2008, 21:28
das skalarprodukt von (2,-1,1) und (0,-1,1) ist doch 2*0+(-1)+(-1)+1 = 0
wie kommst du dann auf 2?
genauso beim zweiten dreieck...

ich rechne so:
I. Dreieck:
(2,-1,1)o(0,-1,1) = 2*0 + (-1)*(-1) + 1*1 = 0 + 1 + 1 = 2

II. Dreieck:
(4,-2,2)o(0,-1,1) = 4*0 + (-2)*(-1) + 2*1 = 0 + 2 + 2 = 4

gegenfrage:
wie kommst du auf diese rechnung : (2,-1,1) und (0,-1,1) ist doch 2*0+(-1)+(-1)+1 = 0
wieso multiplizierst du nur die ersten beiden elemente der beiden vektoren und alles andere addierst du irgendwie dazu? versteh ich nicht so ganz.


lg

signalout
27-01-2008, 22:41
hatte einen tippfehler drinnen (2,-1,1) und (0,-1,1) ist doch 2*0+(-1)*(-1)+1 = 2
-1*-1 ist ja +1.

andere frage: wie kommt man bei der transformation auf die letzte spalte? sprich, diese in der der gegebene punkt steht?

hatti
27-01-2008, 23:18
meine lösungen vom CG1 test vom 15.10.07:
Aufgabe 3 – Transformationen



verschieben in den ursprung:

\left(\begin{array}{cccc} 1 & 0 & 0 & -3 \\ 0 & 1 & 0 & -4 \\ 0 & 0 & 1 & -5 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

dann drehn um die x achse um den winkel -\frac{\pi}{2}

\left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

und zuletzt drehn um die z achse um den winkel \frac{\pi}{2}

\left(\begin{array}{cccc} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

der punkt P ist natürlich im ursprung

lg,
zap
am, entweder steh ich da auf der leitung oder da ist ein kleiner fehler: ich muss doch bei der ersten roation um die x achse um 180° rotieren, also um Pi, und nicht Pi/2!
der V vector ist ja quasi parallel zur z achse (gegeben), muss aber noch "umgedreht" werden, also müssten es hier 180° sein. dir zweite rotation mit 90° seh ich genau so....

Zapster
28-01-2008, 00:04
am, entweder steh ich da auf der leitung oder da ist ein kleiner fehler: ich muss doch bei der ersten roation um die x achse um 180° rotieren, also um Pi, und nicht Pi/2!
der V vector ist ja quasi parallel zur z achse (gegeben), muss aber noch "umgedreht" werden, also müssten es hier 180° sein. dir zweite rotation mit 90° seh ich genau so....
das beispiel wurde im rep. vorgerechnet:
http://www.cg.tuwien.ac.at/courses/CG/Angaben/CG1repetitorium2008.pdf
auf den folien sind auch zeichungen mit denen man das ganze recht schön sieht;)

lg, zap

slash
28-01-2008, 01:31
ich verstehe das transformationsbeispiel nicht, konnte am DI auch nicht in die VO gehen. warum muss ich das KKS rotieren? kann mir das wer schritt für schritt erklären??

freeye
28-01-2008, 02:06
slash - schau mal im buch seite 355 transformation from world to viewing coordinates, da wirds gut erklärt (3rd)

hatti
28-01-2008, 10:46
das beispiel wurde im rep. vorgerechnet:
http://www.cg.tuwien.ac.at/courses/CG/Angaben/CG1repetitorium2008.pdf
auf den folien sind auch zeichungen mit denen man das ganze recht schön sieht;)

lg, zap
hmm, danke, stimmt, da hab ich einen denkfehler gehabt bzw. bei der skizze einen fehler gemacht (hab die -3 vom V vecot auf der z achse gezeichnet, nicht auf der x :-)

Core_Z
28-01-2008, 11:02
Bei eurom Backface Culling ist noch ein Fehler drin. Ihr macht das Kreuzprodukt in die falsche Richtung, denn es muesste BE x BA und CE x CB heissen weil die Vorderseite ja genau dann sichtbar werden soll, wenn die Punkte gegen den Uhrzeigersinn angeordnet werden sollen.

Man kann das ganze auch ausprobieren, indem man die Dreiecke in ein .atoff schreibt und das ganze mit der CG1LU Applikation anschaut (auch wenn der View Vektor nicht ganz passt).

evilHitman
28-01-2008, 11:19
also, hier mal mein ganzes ergebnis für dieses bsp:

I. Dreieck:
BA=(0,-1,-1)
BE=(1,0,-2)
BAXBE=(2,-1,1)

lg

hallo. warum kommst du da bei BAxBE auf (2,-1,1)?

ich komm da auf (2, 1, 1)

-1*-2 - -1*0 = 2
0*-2 - -1*1 = 1
0*0 - -1*1 = 1

hab ich jetzt was übersehen oder rechne ich einfach nur falsch?

hatti
28-01-2008, 12:56
Aufgabe 2 – Hermite Splines

Siehe: http://www.informatik-forum.at/showthread.php?t=61908
Lösung:
P_1(u)=(-1,5) u^3+(1,-9) u^2+(1,5) u+(-1,1)
P_2(u)=(-1,2) u^3+(2,-4) u^2+(0,2) u+(0,2)

was mir noch nicht klar ist ist folgender satz in der angabe: "zusätzlich soll der übergang vom ersten auf das zweite segment C1 stetig sein"....

auf dies haben wir doch sowieso keinen einfluss, oder? sollen wir da etwas zeigen/beweisen?

HotBlackDesiato
28-01-2008, 13:36
Das bedeutet, dass P1(u) im Punkt p2 dieselbe erste Ableitung besitzt wie P2(u) im Punkt p2

...also DP1(p2_x) = DP2(p2_x)

Raiden
28-01-2008, 14:04
also, hier mal mein ganzes ergebnis für dieses bsp:

I. Dreieck:
BA=(0,-1,-1)
BE=(1,0,-2)
BAXBE=(2,-1,1)

II. Dreieck:
CB=(-1,-2,0)
CE=(0,-2,-2)
CBXCE=(4,2,2)

III. Dreieck:
DC=Nullvektor
DE=(0,-2,-2)
DCXDE= Nullvektor

Skalarprodukte:

I. Dreieck:
(2,-1,1)o(0,-1,1) = 2 --> Dreieck nicht sichtbar

II. Dreieck:
(4,-2,2)o(0,-1,1) = 4 --> Dreieck nicht sichtbar

kann das jemand bestätigen? oder ist das falsch?

lg

Ich glaub du hast es verdreht.

A--a--B
| /
b /
| /
E
Punkte sind im Uhrzeigersinn -> Dreieck nicht sichtbar -> Normalvektor muss nach unten schauen -> N = a x b

Damit ich das Dreieck sehe muss der Winkel zwischen Normalvektor und Viewvektor > 90 Grad sein -> cos(N . V) < 0



|
|
| Viewvektor Dreieck sichtbar
V
A
/ Normalvektor
/
/
Winkel:

A
/ Normalvektor
/
/ |
|_ / phi
|
| Viewvektor Dreieck sichtbar
V

mtintel
09-12-2008, 15:55
Aufgabe 3 – Transformationen

EDIT: siehe rep.:
http://www.cg.tuwien.ac.at/courses/CG/Angaben/CG1repetitorium2008.pdf

EDIT2: so dass müsst jetzt richtig sein (danke freeye!)

verschieben in den ursprung:

\left(\begin{array}{cccc} 1 & 0 & 0 & -3 \\ 0 & 1 & 0 & -4 \\ 0 & 0 & 1 & -5 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

dann drehn um die x achse um den winkel -\frac{\pi}{2}

\left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

und zuletzt drehn um die z achse um den winkel \frac{\pi}{2}

\left(\begin{array}{cccc} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

und alle matrizen ausmultiplizieren:

\left(\begin{array}{cccc} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right) \left(\begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end{array}\right) \left(\begin{array}{cccc} 1 & 0 & 0 & -3 \\ 0 & 1 & 0 & -4 \\ 0 & 0 & 1 & -5 \\ 0 & 0 & 0 & 1 \\ \end{array}\right) = \left(\begin{array}{cccc} 0 & 0 & -1 & 5 \\ 1 & 0 & 0 & -3 \\ 0 & -1 & 0 & 4 \\ 0 & 0 & 0 & 1 \\ \end{array}\right)

der punkt P ist natürlich im ursprung

lg,
zapWo verwendet man bei dem Beispiel den Up-Vektor bzw. die Blickrichtung? Die lässt man ja total außer acht, was ja nicht sitmmen kann, oder?