Answer to Question 1


Antwort:

a) Auf dem Monitor A' wirken die Farben kräftiger, weil dieser ein breiteres Farbspektrum abdeckt als Monitor A''. Der Monitor A' kann also mehr Farben anzeigen als Monitor A''.

b) In der Abbildung sind die Chromazitättswerte, die mit Hilfe des zu A' gehörenden Monitors korrekt gedruckt werden können, die innerhalb des Bereichs des Gamuts A' liegen.

c) Zur Berechnung der Chromazitättswerte X, Y und Z des Tristimuluswerts t = (0.5, 0.3, 0.2) müssen die folgenden Rechnungen durchgeführt werden:
X = t.X / (t.X + t.Y + t.Z)
Y = t.Y / (t.X + t.Y + t.Z)
Z = t.Z / (t.X + t.Y + t.Z)

Die Chromazitättswerte liegen im Bereich des Gamuts A', da der Tristimuluswert t innerhalb dieses Gamuts liegt.

d) Der (gekrümmte) Rand des Chromatizitätsdiagramms repräsentiert die Grenzen des sichtbaren Farbspektrums für den menschlichen Auge.

e) Die vollgesättigte Farbvalenz zur Farbe c kann zeichnerisch mit Hilfe des Weißen Punktes (W) wie folgt bestimmt werden:
1. Zeichnen Sie eine Gerade durch den Weißen Punkt W und die Farbe c.
2. Markieren Sie den Schnittpunkt der Gerade mit dem Rand des Chromatizitätsdiagramms.
3. Die Farbe, die an diesem Schnittpunkt liegt, ist die vollgesättigte Farbvalenz zur Farbe c.





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




Answer to Question 2


Antwort:

a) Die Lichttransportpfade (1) bis (4) lassen sich mit Whitted-Style Raytracing erzeugen, da sie direkte Lichtstrahlen darstellen, die von der Punktlichtquelle ausgehen und die Kamera erreichen.

b) In der Abbildung der Bildebene der Kamera sind die Schneidepunkte der Primärstrahlen (r_1), (r_2), (r_3) und (r_4) markiert. Das daraus resultierende Bild der Kamera kann wie folgt beschrieben werden:

- Bereich 1: Der Bereich rechts oben der Bildebene wird von den Primärstrahlen (r_1) und (r_2) getroffen und ist deshalb hell.
- Bereich 2: Der Bereich links oben der Bildebene wird nur von der Primärstrahl (r_1) getroffen und ist deshalb etwas dunkler als Bereich 1.
- Bereich 3: Der Bereich links unten der Bildebene wird von der Primärstrahl (r_3) getroffen und ist deshalb heller als der Rest der Bildebene, da der Glasblock diesen Bereich reflektiert.
- Bereich 4: Der Bereich rechts unten der Bildebene wird von der Primärstrahl (r_4) getroffen und ist deshalb etwas dunkler als Bereich 3, da der Glasblock diesen Bereich reflektiert und absorbiert.
- Bereich 5: Der Rest der Bildebene wird von keiner Primärstrahl getroffen und ist deshalb schwarz.





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




Answer to Question 3


Antwort:

a) In Abbildung (a) wird die Spekularkomponente des Phong-Beleuchtungsmodells beschrieben. Sie zeigt den Reflexionspunkt und den Spekularreflexionsbereich auf der Oberfläche.

b) Die Variation zwischen Abbildung (c) und (d) wird durch den Glanzkomponente des Phong-Beleuchtungsmodells verursacht. In Abbildung (c) ist der Glanzkomponente hoch, was zu einem glatten und glänzenden Erscheinungsbild führt. In Abbildung (d) ist der Glanzkomponente niedrig, was zu einem matt und unglänzenden Erscheinungsbild führt. Die Variation des Modellparameters in den Abbildungen ist visuell als Glanz und Mattheit der Oberfläche wahrzunehmen.

c) Wenn Gouraud Shading verwendet wird, wird das Beleuchtungsmodell ausgewertet für jedes Pixel an der Grenze zwischen zwei Triangeln. Dagegen wird das Beleuchtungsmodell bei Phong Shading ausgewertet für jedes Pixel innerhalb eines Triangels. Da das Dreieck in der Abbildung (c) rasterisiert und fünf Pixel bedeckt, bedeutet dies, dass bei Gouraud Shading fünf Mal das Beleuchtungsmodell ausgewertet wird, während bei Phong Shading nur ein Mal ausgewertet wird.





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




Answer to Question 4


Antwort:

a) Die Reihenfolge der Hüllkörpertraversierung für die in Abbildung 2 gezeigten Strahlen ist: 1-2-3-4-5-6.

b) Bei der Animation verändert sich die Geometrie leicht, sodass die Hüllkörper der neuen Hüllkörper-Hierarchie wie folgt aussehen würden:
   - Der Hüllkörper des Elternknotens umfasst die Hüllkörper der Kinderknoten 1, 2, 3 und 4.
   - Der Hüllkörper von Kind 1 umfasst die Hüllkörper von Kindern 5 und 6.
   - Der Hüllkörper von Kind 2 umfasst die Hüllkörper von Kindern 7 und 8.
   - Der Hüllkörper von Kind 3 umfasst die Hüllkörper von Kindern 9 und 10.

   Vorteil: Die Speicherplatzverbrauch reduziert sich, da nicht jedes Kind ein eigenes Hüllkörper-Objekt benötigt.
   Nachteil: Die Berechnung der Intersectionstests zwischen den Hüllkörpern kann komplexer sein, da die Hüllkörper nicht mehr achsenparallel sind.

c) Vorteil: Die Speicherplatzverbrauch reduziert sich, da nicht jedes Kind ein eigenes Hüllkörper-Objekt erstellt werden muss.
   Nachteil: Die Berechnung der Intersectionstests zwischen den Hüllkörpern kann komplexer sein, da die Hüllkörper nicht mehr achsenparallel sind.

d) Beispiel 1: Octree: Ein Octree ist ein Baum, der die 3D-Welt in kleinere Kuben unterteilt. Jeder Knoten kann bis zu 8 Kinder haben, die jeweils ein Kubus umfassen, der genau die Hälfte der Größe des Elternknotens hat.
   Vorteil: Die Intersectionstests zwischen den Kuben sind effizient, da sie auf die Kubengröße und die Kubenposition reduziert werden können.
   Nachteil: Die Baumstruktur kann unbalanciert werden, was zu ungleichmäßiger Verteilung der Knoten und unzureichender Abdeckung der 3D-Welt führen kann.

   Beispiel 2: BSP-Tree: Ein BSP-Tree (Binary Space Partition Tree) ist ein Baum, der die 3D-Welt in Planes teilt. Jeder Knoten hat zwei Kinder, die jeweils eine Seite des Planes umfassen.
   Vorteil: Die Intersectionstests zwischen den Planes sind effizient, da sie auf die Plane-Gleichung und die Position des Testobjekts reduziert werden können.
   Nachteil: Die Baumstruktur kann unbalanciert werden, was zu ungleichmäßiger Verteilung der Knoten und unzureichender Abdeckung der 3D-Welt führen kann.





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




Answer to Question 5


Antwort:

a) Die Matrix M für die angegebene Transformation kann durch die Konkatenation der Matrizen A, D und E gebildet werden: M = A \u00b7 D \u00b7 E

b) Das Objekt wird durch die Matrizen F, C und B folgendermaßen transformiert:
1. Mit Matrix F wird das Objekt um den Faktor 2 in der x-Richtung und um den Faktor 3 in der y-Richtung skaliert und um den Punkt (1, 1) verschiebt.
2. Mit Matrix C wird das Objekt um den Winkel 45 Grad um die y-Achse gedreht.
3. Mit Matrix B wird das Objekt um den Punkt (3, 2) verschiebt.

c) Die Normalen eines Objekts werden bei einer affinen Transformation im Allgemeinen nicht richtig transformiert. Dies liegt daran, dass eine affine Transformation nicht homogener ist und deshalb keine Perspektivkorrektur durchführt. Um Normalen richtig transformieren zu können, muss eine Projektion (perspektivische Transformation) durchgeführt werden, die die Normalen in Richtung der Blickrichtung projiziert. In der Praxis wird dies häufig durch die OpenGL-API oder ähnliche Tools automatisch durchgeführt.





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




Answer to Question 6


Antwort:

a) Zwei Alternativen zu bilinearer Interpolation bei Texturen sind:
1. Trilineare Interpolation: Dieses Verfahren interpoliert nicht nur in x- und y-Richtung, sondern auch in z-Richtung. Es wird häufig in 3D-Texturen verwendet.
2. Nearest-Neighbor Interpolation: Dieses Verfahren nimmt den Pixelwert aus der unmittelbaren Nachbarschaft des zu interpolierenden Punktes. Es ist einfach zu implementieren, aber es kann zu Aliasing führen.

b) Die Interpolationsgewichte wi,j für die Stelle (x, y) bei bilinearer Interpolation sind:
wi,j = (xi - x) * (yi - y) * A + (xi - x) * (yj - y) * B + (xj - x) * (yi - y) * C + (xj - x) * (yj - y) * D

c) Die Auflösung einer Mip-Map sollte idealerweise so hoch sein, dass die Texturdetails auf halber Auflösung noch erkennbar sind. Probleme, die auftreten können, wenn dies nicht der Fall ist, sind:
1. Aliasing: Die Texturdetails werden unscharf und unvollständig dargestellt.
2. Vergrößerung von Texturfehlern: Die Texturfehler werden vergrößert, wenn die Textur auf eine höhere Auflösung skaliert wird.

d) Es ist in einer Mip-Map akzeptabel, dass die Stufen jeweils in halbierter Auflösung gespeichert werden, weil:
1. Die halbierten Stufen eine gute Näherung der originalen Stufen darstellen.
2. Die Speicherplatzverbrauch durch die halbierten Stufen geringer ist.

e) Wenn ein Strahl den Punkt x der Ebene v_1 , v_2 , v_3 schneidet und die baryzentrischen Koordinaten β_1 = 0.5 und β_2 = 0.4 bezüglich der Eckpunkte des Dreiecks v_1 , v_2 , v_3 berechnet wurden, dann bedeutet das, dass der Schnittpunkt des Strahls mit dem Dreieck vorliegt.

f) Die baryzentrischen Koordinaten β'_1 und β'_2 von x' = x + 1/2 (v_2 - v_1) sind:
β'_1 = (1/2) * (1 - β_2)
β'_2 = β_1
β'_3 = β_2

Die baryzentrischen Koordinaten β'_1 und β'_2 von x' liegen auf der Mittellinie zwischen den Koordinaten von x und v_2 . Sie sind also die baryzentrischen Koordinaten des Punktes, der sich genau zwischen x und v_2 befindet.





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




Answer to Question 7


Antwort:

a) Die folgenden Pipeline-Stufen und die Art der Eingabedaten und Ausgabedaten, die sie verarbeiten und erzeugen:

1. Vertex Shader (VS): Die Eingabedaten sind die Vertex-Positionen und eventuelle zusätzliche Attribute. Die Ausgabedaten sind die transformierten Vertex-Positionen und eventuelle transformierte Attribute.
2. Hull Shader (HS): Die Eingabedaten sind die transformierten Vertex-Positionen und eventuelle transformierte Attribute aus dem VS. Die Ausgabedaten sind die Hull-Shapes, die die Gruppierung der Vertex-Positionen darstellen.
3. Domain Shader (DS): Die Eingabedaten sind die Hull-Shapes und eventuelle zusätzliche Attribute aus dem HS. Die Ausgabedaten sind die Sampling-Positionen und eventuelle zusätzliche Attribute.
4. Geometry Shader (GS): Die Eingabedaten sind die Sampling-Positionen und eventuelle zusätzliche Attribute aus dem DS. Die Ausgabedaten sind die transformierten Geometry-Positionen und eventuelle transformierte Geometry-Attributes. In unserem Fall sind dies zwei Dreiecke pro Partikel.
5. Rasterizer: Die Eingabedaten sind die transformierten Geometry-Positionen. Die Ausgabedaten sind die Fragments mit den transformierten Geometry-Positionen und eventuelle zusätzliche Attribute.
6. Fragment Shader (FS): Die Eingabedaten sind die Fragments mit eventuelle zusätzliche Attribute. Die Ausgabedaten sind die Farben und eventuelle zusätzliche Outputs.

Anzahl der Eingabeelemente einer Ausführung: N (1024 Partikel)
Anzahl der Ausgabeelemente in Bezug auf die Eingabeelemente: M = N (je Partikel zwei Dreiecke)

b) Die Pipeline muss bis einschließen zur Primitive Assembly-Stufe durchlaufen werden, bevor entschieden werden kann, ob ein Teil der Eingabevertices durch OpenGL Backface-Culling verworfen werden kann, weil erst in dieser Stufe die Front- und Back-Faces der Triangles bestimmt und zusammengefasst werden.

c) Im Geometry Shader können zwei Dreiecke pro Partikel erzeugt werden, indem man zwei Triangles aus den transformierten Geometry-Positionen erzeugt und für jedes Triangle die Textur anbindet.

d) Eine alternative Möglichkeit ohne Geometry Shader, zwei Dreiecke pro Partikel zu erzeugen, ist, zwei Partikel mit jeweils einer Position und einer Texturkoordinate zu verwenden und für jedes Partikel zwei Dreiecke mit den gleichen Texturkoordinaten zu rendern.

e) Die Texturbereiche, die nicht gezeichnet werden sollen, können ohne Blending umgesetzt werden, indem man die Textur-Koordinaten der Partikel so berechnet, dass sie die unbeabsichtigten Bereiche der Textur verfehlen. Dazu kann man die Textur-Koordinaten mit einem Offset versehen, der größer ist als der unbeabsichtigte Bereich. Alternativ kann man auch die Textur-Koordinaten so berechnen, dass sie innerhalb des berechneten Bereichs bleiben, der die beabsichtigten Bereiche der Textur enthält.





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




Answer to Question 8


Answer:

a) Blending findet in der OpenGL-Pipeline in der Blending-Phase statt.

b)
- Für Additive Blending (Summe der Farbwerte): GL_SRC_ALPHA, GL_ONE, GL_ONE
- Für Subtraktive Blending (Subtraktion der Farbwerte): GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE_MINUS_DST_ALPHA
- Für Multiplikative Blending (Multiplikation der Farbwerte): GL_SRC_ALPHA, GL_DST_ALPHA
- Für Alpha-Test-Blending (Alpha-Wert des Fragments mit dem des Pixels im Framebuffer vergleichen): GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_LEQUAL

b.1) Figure "figures/blending.png" zeigt die OpenGL-Pipeline mit den verschiedenen Phasen. Die Blending-Phase befindet sich nach der Color-Attachments-Phase.

c) Alpha-Blending von semitransparenten Objekten erfordert eine Sortierung, da das Objekt mit dem niedrigeren Alpha-Wert im Tiefenbereich des Framebuffers schreiben muss, damit das Objekt mit dem höheren Alpha-Wert nicht überdeckt wird. Die Objekte werden sortiert, indem ihr Alpha-Wert verwendet wird. Das heißt, das Objekt mit dem niedrigeren Alpha-Wert wird zuerst gezeichnet und das Objekt mit dem höheren Alpha-Wert wird später gezeichnet.





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




Answer to Question 9


Antwort:

a) Die Einschränkung der Lichtbrechung auf den ersten Schnittpunkt eines Kamerastrahls mit dem Glasobjekt ist notwendig, weil sonst bei der Rasterisierung jedem Pixel des Glasobjekts ein eigenes Reflexionsvektor zugewiesen und berechnet werden müsste. Dies würde den Rechenaufwand erheblich steigern und die Performance der Anwendung beeinträchtigen.

b) Für das Rendering des Glasobjekts sind folgende Shader notwendig:
- Fragment Shader (Für die Berechnung der Reflexionsvektoren und des Transparenzwertes)
- Vertex Shader (Für die Berechnung der Normale und des Transformationsvektors)
- Geometry Shader (Optional, für die Verarbeitung von Dreiecksnetzen)

c)
- In der Fragment Shader müssen die Reflexionsvektoren berechnet und die Farbe des Pixels anhand des Reflexionsvektors und der Cube-Environment Map bestimmt werden.
- In der Vertex Shader müssen die Normale und der Transformationsvektor berechnet werden, um die Verformung des Dreiecksnetzes bei der Transformation zu berücksichtigen.

(Figures: In der angegebenen Shader_first.png sind keine speziellen Funktionsaufrufe zu erkennen, daher keine Angabe notwendig.)





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




Answer to Question 10


Antwort:

a) In der Funktion intersectDF sollte man nach dem Finden eines Schnittpunktes mit der Sphere die Brechung und den Schnittpunkt korrigieren, um die Refraktion richtig zu berechnen. Dazu muss man den Schnittpunkt in den Inneren des Objekts setzen und die Brechung berechnen, indem man die Brechzahl des Inneren Mediums (eta=1.3) mit der Brechzahl des Außenmediums (eta=1.0) multipliziert. Der Gradient der Distanzfunktion G(x) kann ebenfalls berechnet und benutzt werden, um das Normal Mapping anzuwenden.

b) In der Refraktionsberechnung muss der Schnittpunkt korrigiert und die relativen Brechwerte berechnet werden, damit der Refraktionsstrahl mit dem Sphere-Tracing weiterverfolgt werden kann. Die if(DF(o))-Bedingung testet, ob der Punkt au\sseren des Objekts liegt, also ob eine Refraktion stattfinden kann. Sie wird benötigt, damit der Refraktionsstrahl nicht durch das Objekt weitergeführt wird, wenn kein Schnittpunkt gefunden wurde.

c) Gloss-Mapping ist eine Technik, die die Spekularreflexion von Oberflächen mit hohem Glanz verfeinert. Es ist bei der gewählten Schattierungstechnik einfach und mit geringem Aufwand hinzuzufügen, weil man die Spekularkomponente der Light Vector und die Halbierungsvektor bereits berechnet hat.

d) Um Dispersionseffekte bei der Refraktion hinzuzufügen, muss man die Brechung nicht mehr durch eine einzelne Brechzahl, sondern durch ein Brechungsdiagramm beschreiben. Dies bedeutet, dass man mehrere Brechwerte für verschiedene Wellenlängen bereitstellen muss. Der Berechnungsaufwand im Shader wird dadurch erhöht, da man mehr Berechnungen durchführen muss.





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




Answer to Question 11


In dieser Teilaufgabe wird eine Szene aus Quadern modelliert. Die Quadern stehen senkrecht auf der Ebene z = 0 und ihre Höhe wird durch die Funktion T_K(x), x := (x, y), am Mittelpunkt ihrer Grundflächen bestimmt. Die Funktion T_K(x) verwendet dazu die Rauschfunktion n(x). Für die Szene wird eine Hierarchie (BVH) für Raytracing mit achsenparallelen Hüllkörpern (AABB) berechnet.

a) Jede BVH B', die mit T_K'(x) mit K' ≤ K konstruiert wird, ist eine korrekt funktionierende BVH für die Szene. Grund dafür ist, dass die Höhe der Quadern durch T_K'(x) mit der gleichen Funktion T_K'(x) bestimmt wird, wie sie für die ursprüngliche BVH mit T_K(x) und K verwendet wurde. Somit sind die AABBs der neuen BVH mit den gleichen Eigenschaften ausgestattet, wie die der ursprünglichen BVH.

Der Nachteil gegenüber einer BVH B, die mit T_K(x) mit K' < K generiert wurde, ist, dass die neue BVH mehr Nodes enthält, da die Quadern kleiner werden und somit mehr Nodes benötigt werden, um die gesamte Szene effizient zu veranschaulichen.

b) Um die Rauschfunktion n(x) nur minimal oft ausgewertet zu werden, kann man die Funktion T_K(x) so definieren, dass sie nur an bestimmten Punkten ausgewertet wird. Dazu kann man die Funktion T_K(x) so definieren, dass sie nur an den Punkten ausgewertet wird, an denen der Strahl den Quader schneidet. Dies kann durch die Bedingung r_z(i) ≤ T_K(r_x(i), r_y(i)) realisiert werden.

c) Eigenschaften von Rauschfunktionen, die die Wahl von n(x) = sin(x) erfordern, sind:
- Periodizität: Die Funktion sin(x) ist periodisch mit einer Periode von 2π.
- Glättlichkeit: Die Funktion sin(x) ist glatt und hat keine lokalen Extrema oder Inflection Points.

Aber trotz dieser Eigenschaften empfehlen wir davon abzuraten, weil die Funktion sin(x) nicht sehr gute Lokalisierungseigenschaften hat. Das bedeutet, dass die Funktion sin(x) bei kleinen Werten von x nicht sehr genau die Höhe der Quadern bestimmt. Deshalb ist es besser, eine Rauschfunktion zu wählen, die bessere Lokalisierungseigenschaften hat, wie z.B. Perlin- oder Simplex-Noise.

d) Ableitungsregeln für ein L-System mit V = {F, +, -}, α = 60° und Startwort F - - F - - F:
- F -> F + F
- F + F -> F - F
- F -> F - F

Diese Ableitungsregeln erzeugen, interpretiert als Turtle-Grafik, die Kochsche Schneeflocke.





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




Answer to Question 12


Antwort:

a) Zur Bestimmung des Punktes F(0.5) auf der Bézier-Kurve F(u) mit den Kontrollpunkten b0 = (0, 0), b1 = (12, 0), b2 = (0, 6), b3 = (8, 10) für u = 0.5, können Sie die Kurve wie folgt unterteilen:

1. Berechne die Mittelpunkte p1 und p2 der beiden Seitenbögen der ersten Teilkurve zwischen b0 und b1.
2. Berechne die Mittelpunkte q1 und q2 der beiden Seitenbögen der zweiten Teilkurve zwischen b1 und b2.
3. Berechne den Mittelpunkt p3 der beiden Seitenbögen der dritten Teilkurve zwischen b2 und b3.
4. Die Punkte F(0.5) und p1 liegen auf der ersten Teilkurve, die Punkte F(0.5) und p2 liegen auf der zweiten Teilkurve.
5. Die Gerade durch p1 und p2 schneidet die Kurve in F(0.5).

Die Kanten und Punkte der Kontrollpolygone der Teilkurven sind in der Abbildung "figures/bezier_second.png" markiert.

b) Zur Rotation, Skalierung und Verschiebung einer Bézier-Kurve F(u) mit den Kontrollpunkten b0, b1, b2, b3 durch eine affine Abbildung φ(x, y) = (ax + by + c, dx + ey + f), können Sie die folgenden Eigenschaften der affinen Abbildungen nutzen:

1. Die Gerade durch zwei Punkte A(x1, y1) und B(x2, y2) wird durch die affine Abbildung auf die Gerade Ax + By + C = 0 abgebildet, wobei A und B die Punkte (1, 0) und (0, 1) sind.
2. Die Skalierung um den Faktor s in x-Richtung und um den Faktor t in y-Richtung wird durch die Abbildung φ(x, y) = (sx, ty) beschrieben.
3. Die Verschiebung um den Vektor (h, k) wird durch die Abbildung φ(x, y) = (x + h, y + k) beschrieben.

Die Transformation der Bézier-Kurve F(u) erfolgt durch die Anwendung der affinen Abbildung φ(x, y) = (ax + by + c, dx + ey + f) an die Kontrollpunkte b0, b1, b2, b3.

c) Zur zeichnerischen Beweisung, dass die abgebildete Kurve nicht der kubischen Bézier-Kurve G(u) entspricht, können Sie die Variationsreduzierung anwenden.

Die Variationsreduzierung ist eine Methode zur Bestimmung der Ordnung einer Bézier-Kurve. Sie ergibt, dass die kubische Bézier-Kurve durch die vier Kontrollpunkte und drei Berührpunkte mit den Nachbarn definiert wird.

Die Abbildung "figures/bezier_third.png" zeigt die kubische Bézier-Kurve G(u) mit den Kontrollpunkten b0, b1, b2, b3 und den Berührpunkten h1, h2.

Die Abbildung "figures/bezier_fourth.png" zeigt die abgebildete Kurve mit den Kontrollpunkten b0, b1, b2, b3 und den Berührpunkten h1', h2'.

Die Berührpunkte h1 und h2 der kubischen Bézier-Kurve G(u) liegen innerhalb der Kurve, während die Berührpunkte h1' und h2' der abgebildeten Kurve außerhalb der Kurve liegen.

Diese Tatsache zeigt, dass die abgebildete Kurve nicht der kubischen Bézier-Kurve G(u) entspricht.





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




