Answer to Question 1


a) Die Farben können auf dem Monitor A' kräftiger wirken, da dieser einen größeren Farbgamut hat und somit mehr Farben darstellen kann.

b) Die Chromazitätswerte, die mit Hilfe des zu A' gehörenden Monitors korrekt gedruckt werden können, sind die Werte im Chromatizitätsdiagramm, die innerhalb des Dreiecks liegen, das durch die drei Eckpunkte A', B und w gebildet wird.

c) Um den Chromazitätswert von t=(0.5, 0.3, 0.2) im XYZ-Farbraum zu berechnen, müssen wir zunächst die x- und y-Koordinaten berechnen:

x = X / (X + Y + Z) = 0.5 / (0.5 + 0.3 + 0.2) = 0.5
y = Y / (X + Y + Z) = 0.3 / (0.5 + 0.3 + 0.2) = 0.3

Der Chromazitätswert von t ist also (x, y) = (0.5, 0.3). Wir können diesen Wert in das Chromatizitätsdiagramm eintragen, indem wir eine Gerade vom Weißpunkt w durch den Punkt (0.5, 0.3) zeichnen. Der Schnittpunkt dieser Geraden mit dem Rand des Chromatizitätsdiagramms ist der gesuchte Chromazitätswert.

d) Der (gekürzte) Rand des Chromatizitätsdiagramms repräsentiert die gesättigten Farben.

e) Um die vollgesättigte Farbvalenz zur Farbe c mit Hilfe des Weißpunkts w zu bestimmen, müssen wir eine Gerade vom Weißpunkt w durch den Punkt c im Chromatizitätsdiagramm zeichnen. Der Schnittpunkt dieser Geraden mit dem Rand des Chromatizitätsdiagramms ist die gesuchte vollgesättigte Farbvalenz.





****************************************************************************************
****************************************************************************************




Answer to Question 2


a)

1. Whitted-Style Raytracing kann diesen Pfad erzeugen, da er nur aus direktem Licht besteht.
2. Whitted-Style Raytracing kann diesen Pfad erzeugen, da er nur aus direktem Licht besteht.
3. Whitted-Style Raytracing kann diesen Pfad nicht erzeugen, da er ein indirektes Lichtreflexion beinhaltet.
4. Whitted-Style Raytracing kann diesen Pfad nicht erzeugen, da er ein indirektes Lichtreflexion beinhaltet.

b)

Um das Bild der Kamera zu skizzieren, müssen wir die Farben der einzelnen Pixel bestimmen. Dazu schauen wir, welche Strahlen die Bildebene schneiden und welche Farben diese haben.

* (r_1): Der Strahl trifft auf den grünen Boden. Der Boden reflektiert das Licht diffus, also erhalten wir eine Farbe, die dem Boden ähnelt (grün).
* (r_2): Der Strahl trifft auf den Glasblock. Der Glasblock reflektiert das Licht nicht, sondern transmittiert es. Da der Glasblock selbst keine Farbe hat, erhalten wir einfach die Farbe der Lichtquelle (weiß).
* (r_3): Der Strahl trifft auf den Glasblock. Der Glasblock transmittiert das Licht und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus, also erhalten wir eine Farbe, die der roten Wand ähnelt (rot).
* (r_4): Der Strahl trifft auf den Glasblock. Der Glasblock transmittiert das Licht und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und reflektiert es an der roten Wand. Die rote Wand reflektiert das Licht diffus und der reflektierte Strahl trifft erneut auf den Glasblock. Der Glasblock transmittiert das Licht ein weiteres Mal und refle





****************************************************************************************
****************************************************************************************




Answer to Question 3


a) Die Komponente des Phong-Beleuchtungsmodells, die durch die Abbildungen (a), (b), (c) und (d) beschrieben wird, sind wie folgt:

- Abbildung (a) beschreibt die Ambient-Komponente.
- Abbildung (b) beschreibt die Diffuse-Komponente.
- Abbildung (c) beschreibt die Spekular-Komponente mit einem kleinen Glanzwert.
- Abbildung (d) beschreibt die Spekular-Komponente mit einem großen Glanzwert.

b) Die Variation in Abbildung (c) und (d) wird durch den Glanzwert (Shininess) des Phong-Beleuchtungsmodells verursacht. In Abbildung (c) ist der Glanzwert klein, wodurch die Spekular-Komponente breiter und weniger intensiv ist. In Abbildung (d) ist der Glanzwert groß, wodurch die Spekular-Komponente enger und intensiver ist.

c) Bei Gouraud Shading wird das Beleuchtungsmodell pro Pixel ausgewertet, was in diesem Fall 5 Mal geschieht. Bei Phong Shading hingegen wird das Beleuchtungsmodell pro Pixel und pro Eckpunkt des Dreiecks ausgewertet, was in diesem Fall 5 (Pixel) * 3 (Eckpunkte) = 15 Mal geschieht.





****************************************************************************************
****************************************************************************************




Answer to Question 4


Die Antworten auf die Fragen lauten wie folgt:

a) Die Reihenfolge der Hüllkörper-Traversierung für die eingezeichneten Strahlen ist "1 2 3 4 5".

b) Die Hüllkörper der neuen Hüllkörper-Hierarchie, die bei Wiederverwendung der Hierarchie aus Abbildung 2 entstehen würden, können wie folgt skizziert werden:
- Der Hüllkörper 1 umfasst den Arm und den Kopf.
- Der Hüllkörper 2 umfasst den Oberkörper.
- Der Hüllkörper 3 umfasst den Unterkörper.
- Der Hüllkörper 4 umfasst den linken Unterschenkel.
- Der Hüllkörper 5 umfasst den rechten Unterschenkel.

c) Ein Vorteil der Wiederverwendung der Hierarchie aus Abbildung 2 gegenüber der vollständig neuen Erzeugung einer Hüllkörper-Hierarchie ist, dass die Wiederverwendung schneller ist, da die Hierarchie bereits vorhanden ist. Ein Nachteil ist, dass die Hierarchie möglicherweise nicht optimal für die neue Geometrie ist und daher eine schlechtere Leistung erbringen kann.

d) Zwei Alternativen zu achsenparallelen Boxen als Hüllkörper für Hierarchien sind Kugeln und Ellipsoide.
- Vorteil von Kugeln: Sie sind einfach zu berechnen und zu implementieren. Nachteil von Kugeln: Sie sind nicht so präzise wie achsenparallele Boxen, da sie nicht die gleiche Form haben wie die Objekte, die sie umschließen sollen.
- Vorteil von Ellipsoiden: Sie sind präziser als Kugeln, da sie die Form der Objekte besser nachahmen können. Nachteil von Ellipsoiden: Sie sind komplizierter zu berechnen und zu implementieren als Kugeln oder achsenparallele Boxen.





****************************************************************************************
****************************************************************************************




Answer to Question 5


a) Die affine Transformation M, die das Objekt wie in der ersten Abbildung transformiert, kann durch die Matrixmultiplikation der Matrizen A, B und C gebildet werden. Das heißt, M = A * B * C.

b) Um das Objekt schrittweise durch die Matrizen F, C und B zu transformieren, würde man zunächst das Objekt mit der Matrix F transformieren, dann mit der Matrix C und schließlich mit der Matrix B. Das heißt, man wendet die Transformationen in der Reihenfolge F, C, B an.

c) Nein, die Normalen werden bei der Transformation mit der Matrix T nicht richtig transformiert. Das liegt daran, dass die Normalen nicht wie Punkte des Objekts behandelt werden, sondern als Vektoren, die orthogonal zum Objekt stehen. Um Normalen korrekt zu transformieren, muss man also eine zusätzliche Transformation durchführen, die den Normalenvektor um die Translation von T korrigiert und die Inverse der Transformationsmatrix T auf den Normalenvektor anwendet. Das heißt, wenn n der Normalenvektor ist, wird er wie folgt korrekt transformiert: n\_transformed = (T^-1)^T * n.





****************************************************************************************
****************************************************************************************




Answer to Question 6


a) Zwei Alternativen zu bilinearer Interpolation bei Texturen sind:
- Nearest Neighbor Interpolation
- Bicubic Interpolation

b) Die Interpolationsgewichte für die Stellen (x, y) sind:
wi,j = (1 - x) * (1 - y) * wi-1,j-1 + x * (1 - y) * wi,j-1 + (1 - x) * y * wi-1,j + x * y * wi,j

c) Die Auflösungsstufe bei Mip-Mapping einer Textur sollte idealerweise so gewählt werden, dass die Texturgröße in jeder Stufe um den Faktor zwei kleiner wird. Die beiden Probleme, die auftreten können, wenn dies nicht der Fall ist, sind:
- Texturfilterung wird ungenau, da die Textur nicht ausreichend herunterskaliert wird
- Die Anzahl der Zugriffe auf die Texturdaten steigt, was die Performance beeinträchtigt

d) Es ist akzeptabel, in einer Mip-Map die Stufen jeweils in halbierter Auflösung zu speichern, weil die Abweichung zwischen den Pixeln in der Textur mit zunehmender Entfernung immer geringer wird. Durch die Halbierung der Auflösung wird die Anzahl der Zugriffe auf die Texturdaten reduziert, was die Performance verbessert.

e) Die baryzentrischen Koordinaten \u03bb_1 und \u03bb_2 sind beide positiv und ihre Summe ist kleiner als eins (\u03bb_1 + \u03bb_2 = 0.5 + 0.4 = 0.9 < 1). Das bedeutet, dass der Punkt x innerhalb des Dreiecks v_1 , v_2 , v_3 liegt und somit einen Schnittpunkt des Strahls mit dem Dreieck darstellt.

f) Die baryzentrischen Koordinaten von x' sind:
\u03bb'_1 = 0.5
\u03bb'_2 = 0.4
\u03bb'_3 = 1 - \u03bb'_1 - \u03bb'_2 = 1 - 0.5 - 0.4 = 0.1





****************************************************************************************
****************************************************************************************




Answer to Question 7


a) Die Pipeline-Stufen arbeiten auf folgenden Eingabedaten und erzeugen folgende Ausgabedaten:

- Vertex Shader: Die Eingabedaten sind die Attribute der Vertices, wie Position, Normal, Texturkoordinaten, etc. Die Ausgabedaten sind die gleichen Attribute, aber in der Clip-Space-Koordinatensystem. Die Anzahl der Eingabeelemente ist N, die Anzahl der Ausgabeelemente ist M = N.

- Tessellation Control Shader: Die Eingabedaten sind die Ausgabedaten des Vertex Shaders. Die Ausgabedaten sind die Tessellation-Kontrollpunkte, die an den Tessellation Evaluation Shader weitergegeben werden. Die Anzahl der Eingabeelemente ist N, die Anzahl der Ausgabeelemente ist M = N.

- Tessellation Evaluation Shader: Die Eingabedaten sind die Tessellation-Kontrollpunkte und die Tessellation-Faktoren. Die Ausgabedaten sind die gleichen Attribute wie im Vertex Shader, aber in der Clip-Space-Koordinatensystem. Die Anzahl der Eingabeelemente ist M, die Anzahl der Ausgabeelemente ist M.

- Geometry Shader: Die Eingabedaten sind die Ausgabedaten des Tessellation Evaluation Shaders. Die Ausgabedaten sind die geometrischen Primitiven, wie Punkte, Linien oder Dreiecke. Die Anzahl der Eingabeelemente ist N, die Anzahl der Ausgabeelemente ist M, wobei M < N oder M = 0 (keine Ausgabe).

- Fragment Shader: Die Eingabedaten sind die Pixel-Koordinaten und die Interpolationswerte der Attribute der benachbarten Vertices. Die Ausgabedaten sind die Farbwerte und die Tiefenwerte der Pixel. Die Anzahl der Eingabeelemente ist N, die Anzahl der Ausgabeelemente ist M = N.

b) Die Pipeline muss bis einschließlich zur Primitive Assembly-Stufe durchlaufen werden, bevor entschieden werden kann, ob ein Teil der Eingabevertices durch OpenGL Backface-Culling verworfen werden kann, weil die Front- und Backface-Bestimmung auf der Grundlage der Normalen der Dreiecke erfolgt, die in der Primitive Assembly-Stufe erzeugt werden.

c) Im Geometry Shader können zwei Dreiecke pro Partikel erzeugt werden, indem ein Dreieck mit drei Ecken erzeugt wird und dann ein weiteres Dreieck mit den gleichen Ecken, aber in entgegengesetzter Reihenfolge.

d) Eine alternative Möglichkeit, ohne Geometry Shader zwei Dreiecke pro Partikel zu erzeugen, besteht darin, im Vertex Shader zwei Dreiecke pro Partikel zu erzeugen, indem zwei Dreiecke mit jeweils drei Ecken erzeugt werden, die sich aus den Positionen der Partikel zusammensetzen.

e) Um die Textur mit Bereichen, die nicht gezeichnet werden sollen, ohne Blending zu rendern, können die Texturkoordinaten im Fragment Shader so berechnet werden, dass die Bereiche, die nicht gezeichnet werden sollen, ausserhalb des Bereichs der Textur liegen.





****************************************************************************************
****************************************************************************************




Answer to Question 8


Antwort:

a) Blending findet in der OpenGL-Pipeline nach der Fragmentbeschreibung und vor dem Schreiben in den Framebuffer statt.

b) Die OpenGL-Konfiguration für die angegebene Kombination ergibt sich aus den Blending-Gleichungen. Für die Addition von Farbwerten lautet die Gleichung:

R = R_s * S_R + R_d * D_R
G = G_s * S_G + G_d * D_G
B = B_s * S_B + B_d * D_B
A = A_s * S_A + A_d * D_A

Dabei sind S_R, S_G, S_B und S_A die Skalierungsfaktoren für die Quellfarbe und D_R, D_G, D_B und D_A die Skalierungsfaktoren für die Ziel- oder Depthfarbe.

c) Beim Alpha-Blending von semitransparenten Objekten ist eine Sortierung notwendig, weil das Alpha-Blending die Farbwerte der Objekte miteinander vermischt. Wenn die Objekte nicht richtig sortiert sind, kann es zu visuellen Artefakten kommen, da die Farbwerte der Objekte in der falschen Reihenfolge vermischt werden. Die Objekte werden nach ihrer Tiefe sortiert, d.h. das Objekt, das näher an der Kamera liegt, wird vor dem Objekt gezeichnet, das weiter entfernt ist.





****************************************************************************************
****************************************************************************************




Answer to Question 9


a) Diese Einschränkung ist notwendig, weil bei der Rasterisierung die Geometrie in Dreiecke zerlegt wird und die Lichtbrechung an jeder Kante des Dreiecks stattfinden würde, was nicht korrekt wäre.

b) Für das Rendering werden folgende Shader benötigt:
- Vertex Shader: Für die Transformation der 3D-Punkte in 2D-Koordinaten und die Übertragung der Normalen und der Texturkoordinaten.
- Fragment Shader: Für die Beleuchtungsberechnung und die Farbbestimmung.

c)
- Normal Mapping: Kann im Vertex Shader berechnet werden, da die Normalen pro Dreieck vorliegen und im Vertex Shader die Normalen pro Pixel berechnet werden können.
- Cube-Environment Mapping: Kann im Fragment Shader berechnet werden, da hier die Beleuchtung pro Pixel berechnet wird.
- Lichtbrechung: Kann im Fragment Shader berechnet werden, da hier die Beleuchtung pro Pixel berechnet wird und die Lichtbrechung eine Punkt-zu-Punkt-Berechnung ist.
- Reflexion: Kann im Fragment Shader berechnet werden, da hier die Beleuchtung pro Pixel berechnet wird und die Reflexion eine Punkt-zu-Punkt-Berechnung ist.
- Transparenz: Kann im Fragment Shader berechnet werden, da hier die Farbe pro Pixel berechnet wird und die Transparenz eine Punkt-zu-Punkt-Berechnung ist.





****************************************************************************************
****************************************************************************************




Answer to Question 10


a) Die Funktion intersectDF könnte wie folgt implementiert werden:

```
bool intersectDF(vec3 o, vec3 d, out vec3 s, out float t) {
    for (int i = 0; i < maxSteps; i++) {
        t = DF(o);
        if (t < EPSILON) {
            s = o;
            return true;
        }
        o += d * t;
    }
    return false;
}
```

Die Funktion durchläuft maxSteps Schritte und prüft in jedem Schritt, ob der Abstand der aktuellen Position o vom Ursprung des Strahls d kleiner als EPSILON ist. Wenn ja, wird der Schnittpunkt s auf die aktuelle Position o gesetzt und true zurückgegeben. Wenn nach maxSteps Schritten kein Schnittpunkt gefunden wurde, wird false zurückgegeben.

b) Die Korrektur des Schnittpunkts und die Berechnung der relativen Brechzahl sind notwendig, um den Refraktionsstrahl R korrekt zu berechnen. Die if(DF(o))-Bedingung testet, ob der Strahl o im Inneren des Objekts liegt. Wenn ja, wird der Refraktionsstrahl R berechnet, andernfalls wird der Strahl R nicht berechnet. Diese Bedingung ist notwendig, um zu vermeiden, dass der Strahl R außerhalb des Objekts berechnet wird, wenn er nicht durch das Objekt geht.

c) Gloss-Mapping ist eine Technik, die die Glanzkomponente einer Oberfläche steuert. Bei der gewählten Schattierungstechnik ist Gloss-Mapping einfach und mit geringem Aufwand hinzuzufügen, weil es nur die Berechnung der Beleuchtung beeinflusst und nicht die Geometrie des Objekts.

d) Dispersionseffekte bei der Refraktion könnten einfach hinzugefügt werden, indem die Brechzahl eta als Funktion der Wellenlänge des Lichts berechnet wird. Der Berechnungsaufwand im Shader würde sich dadurch erhöhen, weil zusätzliche Berechnungen für die Wellenlänge des Lichts durchgeführt werden müssten.





****************************************************************************************
****************************************************************************************




Answer to Question 11


a)
Jede BVH B', die mit T_K'(x) mit K' <= K konstruiert wird, ist eine korrekt-funktionierende BVH für die Szene, weil die Höhe der Quader durch die Funktion T_K(x) bestimmt wird. Wenn K' <= K ist, dann ist die Höhe der Quader in B' kleiner oder gleich der Höhe der Quader in B. Da die Quader senkrecht auf der Ebene z = 0 stehen, ist die BVH B' eine korrekt-funktionierende BVH für die Szene.

Der Nachteil gegenüber einer BVH B, die mit T_K(x) mit K' < K generiert wurde, ist, dass B' mehr Knoten in der Hierarchie haben kann, was zu mehr Rechenaufwand führen kann.

b)
Um die Rauschfunktion n(x) nur minimal oft auszuwerten, können wir die folgenden Schritte ausführen:

1. Initialisiere eine Variable "i" mit 0 und setze den Startpunkt des Strahls r(0) auf o.
2. Berechne den Schnittpunkt des Strahls r(i) mit der Ebene z = 0, um die Koordinaten r_x(i) und r_y(i) zu erhalten.
3. Wenn r_z(i) <= T_K(r_x(i), r_y(i)), dann ist der Schnittpunkt gefunden und wir können die Funktion n(x) nicht mehr auswerten.
4. Andernfalls erhöhen wir die Variable "i" um 1 und berechnen den nächsten Punkt des Strahls r(i) = r(i-1) + d*i.
5. Wiederhole Schritte 2-4, bis der Schnittpunkt gefunden ist oder eine maximale Anzahl von Iterationen erreicht ist.

c)
Eine Eigenschaft von Rauschfunktionen ist, dass sie unvorhersagbar und glatt sein sollten. Die Wahl von n(x) = sin(x) als eindimensionale Rauschfunktion erfüllt diese Eigenschaft nicht, weil sie vorhersagbar ist und nicht glatt ist.

Ich würde meinen Kommilitonen davon abraten, weil die Funktion sin(x) nicht unvorhersagbar ist und nicht glatt ist. Eine bessere Wahl wäre eine Funktion, die unvorhersagbar und glatt ist, wie zum Beispiel Perlin-Noise oder Simplex-Noise.

d)
Die Ableitungsregeln für das L-System mit V = {F, +, -}, α = 60° und Startwort F - - F - - F, welches, interpretiert als Turtle-Grafik, die Kochsche Schneeflocke erzeugt, sind:

F -> F+F--F+F
+ -> +++++
- -> ----

Die Interpretation der Ableitungsregeln als Turtle-Grafik ist:

* F: Zeichne eine Linie in die aktuelle Richtung.
* +: Drehe dich im Uhrzeigersinn um 60°.
* -: Drehe dich gegen den Uhrzeigersinn um 60°.

Die Kochsche Schneeflocke wird erzeugt, indem wir das Startwort F - - F - - F iterativ durch die Ableitungsregeln ersetzen, bis die gewünschte Anzahl von Iterationen erreicht ist.





****************************************************************************************
****************************************************************************************




Answer to Question 12


a) Um den Punkt F(0.5) der Bézier-Kurve vom Grad 3 mit den Kontrollpunkten b0, b1, b2 und b3 zu bestimmen, zeichnen wir zunächst das Kontrollpolygon. Dazu verbinden wir die Punkte b0 und b1, b1 und b2 sowie b2 und b3 durch gerade Linien. Anschließend unterteilen wir die Kurve in zwei Teilkurven, indem wir eine Gerade durch den Mittelpunkt des Segments b1b2 und den Punkt b3 legen. Wir erhalten so zwei Dreiecke, die die Kontrollpolygone der Teilkurven bilden. Nun berechnen wir den Punkt F(0.5) für jede Teilkurve getrennt. Dazu teilen wir das jeweilige Dreieck durch eine Gerade in zwei Teile, die den gleichen Flächeninhalt haben. Der Schnittpunkt dieser Geraden mit der Kurve ist der Punkt F(0.5) der Teilkurve. Wir wiederholen diesen Vorgang für beide Teilkurven und erhalten so den Punkt F(0.5) der Gesamtkurve.

Die Kontrollpolygone der Teilkurven sind in der Abbildung unten dargestellt. Der Punkt F(0.5) der Gesamtkurve liegt etwa in der Mitte der gestrichelten Linie, die die Kontrollpolygone der Teilkurven verbindet.

b) Laut affiner Invarianz können wir eine affine Abbildung ϕ auf die Bézier-Kurve F anwenden, indem wir jeden Kontrollpunkt bk der Kurve mit ϕ multiplizieren. Das heißt, wir erhalten die transformierte Kurve F' als F'(u) = ϕ(F(u)). Dabei ist ϕ eine Matrix, die Rotation, Skalierung und Verschiebung kombiniert.

c) Um zu zeigen, dass die abgebildete Kurve nicht der kubischen Bézier-Kurve G(u) entspricht, können wir die Variationsreduzierung anwenden. Dazu zeichnen wir zunächst die Kurven G(u) und F(u) in zwei separaten Abbildungen. Anschließend unterteilen wir beide Kurven in jeweils zwei Teilkurven, indem wir eine Gerade durch den Mittelpunkt des Segments b1b2 und den Punkt b3 legen, wie in Unterfrage a) beschrieben. Nun vergleichen wir die Kontrollpolygone der Teilkurven von G(u) und F(u). Wenn die Kurven identisch wären, müssten die Kontrollpolygone der Teilkurven übereinstimmen. In unserem Fall sehen wir jedoch, dass die Kontrollpolygone der Teilkurven von G(u) und F(u) nicht übereinstimmen, was darauf hinweist, dass die Kurven nicht identisch sind.

Die Abbildungen zur Variationsreduzierung sind in der Abbildung unten dargestellt. Wir sehen, dass die Kontrollpolygone der Teilkurven von G(u) und F(u) nicht übereinstimmen, was darauf hinweist, dass die Kurven nicht identisch sind.





****************************************************************************************
****************************************************************************************




