Ja, guten Tag zusammen. Nachdem wir heute ein wenig
ins Sexil gehen mussten und die meisten von Ihnen auch eingetrudelt sind,
können wir nun beginnen mit unserer Vorlesung.
Wir hatten in der vergangenen Woche das Kapitel geometrisches Modellieren weitestgehend abgeschlossen.
Wir waren am Ende zur Euler-Porn-KW-Formel gekommen,
die es uns gestattet,
zu überprüfen
Ein Modell, das wir entwickelt haben mit einem Geometriemodellierer,
tatsächlich valide ist. Und wir können also durch Einfaches abzählen,
der topologischen Elemente, Punkte, Kanten,
Flächen und im erweiterten Konzept der Umrandungen, Schalen und des Genus
leicht herausfinden, ob ein Modell tatsächlich valide ist.
Und ich hatte ihnen da ein paar Beispiele gezeigt,
die wir zum Teil Die ersten fünf davon hatten wir
uns genauer angesehen und überprüft und anhand dieser Beispiele geprüft,
ob die Oiler-Porn-KW-Farmel auch tatsächlich das Ergebnis liefert, dass sie liefern soll.
Und dann hatte ich ihnen noch drei weitere Beispiele hier gegeben,
den Würfel noch ein bisschen weiter unterteilt, durch mehr Aussparungen.
Filigraner gemacht und ihre Hausaufgabe war,
sich einmal anzusehen
Ob sie darauf die Euler von KW-Formel anwenden können.
Und wenn ja, was die Formel liefert.
Und ich nehme an, sie haben das alle gemacht.
Ich habe Ihnen die Ergebnisse hier nochmal in eine Tabelle geschrieben.
Sagen Sie noch an was erinnern,
was wir das letzte Ende der Vorlesung an irgendeinem,
ich habe es leider nicht wieder vergessen.
Aber wir haben den heute herausgefunden auf der anderen Folie.
Die haben irgendwie einen besseren Weg gefunden, das Kino zu bestimmen.
Und zwar ging es, glaube ich, darum,
wie oft kann man dieses Objekt zerteilen, bis man es wirklich durchschneiden muss.
Also man kann zum Beispiel beim Torus einmal den aufschneiden,
hat man immer noch ein ganzes Objekt. Aber dann,
wenn man dann nochmal schneidet, muss man ihn zertrennen.
Also wird er nicht mehr. Dann ist es nicht mehr ein Zusammenhängendes Objekt.
Genau. Ja, das ist auch ein sehr guter Ansatz.
Vielen Dank. Noch einmal für alle anderen. Wir hatten
ja gesagt, die Bestimmung des Gendos ist relativ einfach.
Wir zählen einfach die Anzahl der durchgehenden Öffnungen im Objekt.
Und das hatte bei einigen Objekten, zum Beispiel bei diesem hier,
dann doch zu unterschiedlichen Anschauungen geführt. Und sie hatten da
ein sehr schöne andere Lösung, wie man das überprüfen kann.
Wie oft muss ich einen Griff in dem Objekt durchschneiden oder Griffe durchschneiden,
bis ich das Objekt einfach zusammenhängend habe.
Und bis ich an die Stelle komme,
wo jeder weitere Schnittschnitt dazu führt, dass das Objekt auseinanderfällt.
Und wenn wir uns das ansehen, können wir hier sagen,
wir schneiden einmal hier durch und zum Beispiel einmal dadurch,
dann ist das Objekt einfach zusammenhängend, dann haben wir nur noch ein Stück, ohne weitere Löcher darin.
Wohingegen bei diesem hier wir dreimal schneiden müssen, bis wir ein Griff Also das war ein guter Ansatz. So. Sie hatten sich also die letzten drei dann noch einmal genauer angesehen und zur Überprüfung der Ergebnisse,
die Sie herausgefunden haben, dürfen Sie sich dann diese Tabelle,
die in den Folien Ansehen,
wir haben hier die unterschiedlichen Quadern mit den Aussparungen in den letzten vier Zeilen der Tabelle und wir sehen da,
wie die Anzahl der Punkte, Kantenflächen und des Genuss ist,
hier mussten wir zur Durchführung oder zur Anwendung der Euler Point KW-Farmel noch Hilfskanten einführen,
damit Flächen einfach zusammenhängend wurden,
so wie ich ihnen das auf der Skizze davor dargestellt habe und mit diesen einfach zusammenhängenden Flächen erhalten wir genau diese Anzahlen von Punkten,
Kanten und Flächen,
auf die wir die Euler Pong KW-Farmel anwenden und ich hatte es mal überprüft,
mit diesen Zahlen da kommt es richtig hin und sie können das mal mit ihren Ergebnissen vergleichen.
Ich habe das Ganze noch einmal,
in einer zweiten Tabelle dargestellt,
die sich von der ersten ein ganz kleines bisschen unterscheidet,
da habe ich nämlich das erweiterte Konzept angewandt und habe noch Umrandungen und Schalen eingeführt und dadurch konnten wir uns die Hilfskanten sparen,
weil wir mit dem Konzept der Umrandung natürlich auch mehrfach zusammenhängende Flächen bearbeiten können und das führt dann eben zu diesen Anzahlen,
das sehen wir in Anzahl erkannten wird,
kleiner als im vorherigen Fall,
in der Tabelle davor
Sind die zusätzlichen Größen dazu. Und da wenden sie dann
die letzte Form der Euler von KW-Formel an.
Und die sollte dann auch zu den richtigen Ergebnissen kommen.
So. Last but not least wollen wir uns noch kurz überlegen,
wie kann man eigentlich die Topologie auch in eine passende Datenstruktur abbilden.
Und eine Datenstruktur, die in der Praxis
sehr weit verbreitet ist und schon sehr lange verwendet wird,
ist die sogenannte Wing-Itch-Structure
Also die Struktur mit den geflügelten Kanten. Und wenn wir uns
diese quasi Grafik da ansehen, dann können wir uns vorstellen,
warum die Erfinder vor einigen Jahrzehnten dieser Datenstruktur genau diese Bezeichnung gegeben haben.
Das sieht praktisch so aus, ein bisschen abstrakt, wie ein aufgeklappter Schmetterling.
Und diese Datenstruktur hat also die Kante als Bezugselement.
Und in Bezug auf diese Kante werden dann die anderen topologischen Elemente referenziert.
Und zwar flächenweise. Wir haben also von der Kante ausgehend
einen Pointer auf die erste Fläche und einen ähnlichen Pointer auf die zweite Fläche.
Dann wird von der Kanke ein Pointer in Bezug auf die erste Fläche im Uhrzeigersinn
der sogenannte Vorwärtspointer auf die Nachfolgekante gerichtet und analog ein Rückwärtspointer auf die Vorgängerkante.
Das Gleiche für die zweite Fläche. Wir haben da einen Pointer,
auf die Nachfolgekante und einen Rückwärtspointer auf die Vorgängerkante.
Und schließlich haben wir noch jeweils einen Pointer auf den Anfangspunkt
und auf den Endpunkt dieser Kante.
Und diese Datenstruktur ist also hervorragend geeignet für die Repräsentation,
zweidimensional, mannigfaltiger Körpermodelle und wird da in der Praxis eben schon seit Jahrzehnten eingesetzt.
So, zum Schluss noch ein paar Überlegungen zur grafischen Darstellung der modellierten Gegenstände.
Sie erinnern sich, wir haben unterschiedliche Verfahren der Modellierung kennengelernt.
Wir haben die Volumenbasierten Verfahren kennengelernt. Hoctry,
vergleichbar auch mit dem Voxelcluster, dann die Constructive Solidy Amitry
und schließlich die begrenzungsbasierte Repräsentation, die Boundray Representation.
Beim Optry-Verfahren haben wir das Problem in Bezug auf die grafische Darstellung,
dass es im Grunde genommen keinerlei Information über die darzustellende geschlossene Oberfläche unseres Gegenstandes gibt.
Ja, wir haben unseren Gegenstand ja im Grunde genommen durch
stetige Unterteilung des Raumes in immer kleinere Quader angenähert und damit
die Form des Gegenstandes sehr gut angenähert,
aber dabei ist keine wirkliche Information über die kontinuierliche Oberfläche dieses Gegenstandes entstanden.
Das heißt, wir haben also im Prinzip nur für die Raumelemente,
die an der Oberfläche des Gegenstandes liegen, eine Information.
Und wenn wir sie grafisch darstellen wollten,
zunächst einmal so wie es ist,
würden wir an der Stelle jeweils ein kleines Würfelchen darstellen oder
einen kleinen Krader darstellen
Gut aus und darum wurden da Verfahren entwickelt,
wie man diese kantige Struktur dann ein wenig nachglätten kann,
um auch da eine schöne, kontinuierlich gekrümmte Oberfläche zu erzeugen in der grafischen Darstellung zu erzeugen.
Denn wir hatten ja gesehen,
ein Anwendungsgebiet hierfür ist in der Medizin gegeben,
wenn wir Daten aus Tomografien übernehmen und diese hinterher grafisch darstellen wollen,
damit die Mediziner, die damit arbeiten müssen,
dann zum Beispiel das innere Organ oder ein Gefäß oder was auch immer,
sie da aufgenommen haben, dann betrachten können,
dann sieht das sehr unnatürlich aus,
wenn wir das so kantig darstellen, so pixelig darstellen.
Und darum wird es also nachgeglättet,
damit es auch eine natürlichere, ein natürlicheres Aussehen hat.
Bei der Constructive Sonicial Enitry müssen die Teile der primitiven Grundobjekte,
aus denen wir unsere Gegenstände zusammensetzen, zunächst einmal ermittelt werden,
die Teile oder die Oberflächenteile, die tatsächlich verwendet werden.
Wir setzen ja unsere relativ komplex gestalteten Gesamtoberflächen oder Gesamtobjekte
zusammen aus vielen primitiven Grundobjekten, Kugeln, Quadern, Zylindern,
Kegeln und den größten Teil von diesen Objekten werfen wir weg.
Die brauchen wir gar nicht. Diese weggeworfenen Teile beziehungsweise das,
was dann übrig blitz bleibt,
müssen wir also in irgendeiner Form identifizieren,
damit wir es dann auch grafisch darstellen können.
Und nicht praktisch alles,
alle Oberflächenteile
Das hat das Ganze unübersichtlich und es repräsentiert grafisch ja auch nicht das Objekt,
das wir gebastelt haben. Bei der begrenzungsbasierten Repräsentation,
da enthält unsere geometrische Beschreibung genau die Flächenelemente, die wir benötigen,
die wir einsetzen und die dann auch dargestellt werden.
Das heißt also, unsere Flächenelemente bis an ihre Begrenzungen,
an ihre Umrandungen werden in der Geometrie beschrieben und können dann gleich so,
wie sie sind, dargestellt werden. Das Einzige,
worauf man dann noch achten muss bei der grafischen Darstellung,
ist eben Dass man Verdeckungen von Objektteilen berücksichtigt,
die zum Beispiel hinter anderen Objektteilen liegen oder ganz hinter anderen Objekten liegen oder Objektteile oder Oberflächenteile,
die von der Betrachtungsseite abgewandt sind,
dass wir die identifizieren und natürlich nicht grafisch darstellen.
Aber das ist also ein relativ einfache, eine relativ einfache Übung,
mit der wir uns dann im übernächsten Kapitel beschäftigen wollen.
Und insgesamt ist es also bei der begrenzungsbasierten Repräsentation Einfachsten,
eine grafische Darstellung zu finden.
So, damit möchte ich dieses Kapitel abschließen.
Und wir wollen uns im nächsten Kapitel mit grafisch-geometrischen Algorithmen beschäftigen.
In diesem Kapitel werden wir häufig mit dem Begriff Polygon
zu tun haben,
unter einem Polygon
Im zweidimensionalen athletischen Raum waren wir einen geschlossenen Polygonzug verstehen,
das heißt also eine Folge von Punkten in der Ebene,
die durch Kanten, durch gerichtete Kanten miteinander verbunden sind,
damit also in einer bestimmten Ordnung Umlaufordnung gebracht werden.
Und das Ganze ist also geschlossen, das heißt also
der erste Punkt und der letzte Punkt sind immer identisch.
Und die Algorithmen, mit denen wir uns ein wenig näher beschäftigen wollen, sind.
Wir wollen den Abstand zwischen zwei Punkten entwickeln. Ich denke,
das ist etwas, das ihn noch irgendwo so aus dem Handgelenk fließt.
Das kennen Sie noch. Dann den Abstand zwischen einem Punkt
und einer Geraden, dem kürzesten Abstand. Das heißt,
im senkrechten Abstand zwischen einem Punkt und einer Geraden,
dann den Flächeninhalt eines Polygons.
Wie groß ist die Fläche, die von diesem Polygon umrandet wird?
Wie können wir die bestimmen? Dann die konvexe Hülle
eines Polygons
Was eine komplexe Hülle ist, hatten wir schon herausgefunden.
Dann so interessante Aufgaben, wie gegeben sei ein Polygon, beliebiger Form.
Und gegeben sei in derselben Ebene irgendein Punkt. Und es gilt,
herauszufinden, ob dieser Punkt in dem Polygon liegt oder außerhalb.
Auch das ist eine Aufgabe, die also in der Computergrafik
immer wieder ansteht und die immer wieder schnell gelöst werden muss.
Dann ist natürlich ganz interessant und wichtig,
wenn wir zwei Polygone haben, die irgendwo in der Ebene liegen,
dann müssen wir herausfinden, ob Polygonkanten einander schneiden.
Das heißt also, ob die Polygone sich überdecken und wenn ja,
an welchen Kanten diese Polygone einander schneiden und wie die Schnittpunkte aussehen.
Dazu muss zunächst überprüft werden,
ob überhaupt eine Überlappung zwischen den Polygonen stattfindet oder nicht.
Eine andere Aufgabe für die grafische Darstellung, mit der
man sich beschäftigen kann, ist das Graffieren von Polygonen.
Gegeben sei eine Polygonenfläche und wir wollen irgendein Muster darauf legen.
In der Regel sind das parallele Linien,
in beliebigem Abstand und unter beliebiger, unter beliebigem Winkel,
also in beliebiger Neigung zur X-Achse unseres Koordinatensystems.
Auf die Weise kann man also sehr einfach in einer Liniengrafik
sehr einfach flächen, unterschiedlich schraffieren und damit voneinander unterscheiden.
Und schließlich wollen wir noch Algorithmen kennenlernen,
die der Ausschnittsbildung und dem Kappen dienen oder wie es auf
Neuhochdeutsch heißt,
Windowing und Clipping
Der Ihnen sicherlich geläufig ist, wir gegeben seien zwei Punkte,
P1 und P2 und wir suchen den Abstand zwischen diesen beiden Punkten und da wissen wir,
vielen, vielen Jahrhunderten, ein Herr namens Pythagoras im alten Griechenland,
schon herausgefunden, wir können diesen Abstand berechnen,
in denen wir das Quadrat der Kantensängen, dieses Dreieckes,
das sich aus der Differenz zwischen den beiden Absissen unsere beiden Punkte und der Differenz zwischen den beiden Ordinaten ergibt,
ermitteln, also die Differenz von X, 2 minus X,
1, quadriert plus Y 2 minus Y,
1 quadriert und aus der Summe daraus die Wurzel gezogen,
ergibt den Abstand.
So. Interessant ist dann, wenn wir einen weiteren Punkt gegeben haben,
den ich hier mit PS bezeichne, dann interessiert uns häufig
der Abstand kommt diesem Punkt zu einer gegebenen Kante zwischen zwei anderen Punkten.
Der senkrechte Abstand, also der kürzeste Abstand, zwischen diesen Punkten und dieser Kante.
Und diesen Abstand können wir sehr leicht ermitteln aus der hessischen Normalform.
Der ist nämlich gegeben, wenn unsere Gerade beschrieben ist,
in der Form AX plus BY plus C gleich 0,
also in einer impliziten Form,
dann können wir den Abstand errechnen als A gleich Kleinart durch
Wurzeln aus A-Quadrat clus B-Quadrat plus kleinen B-Auswurzeln aus A-Quadrat plus B-Quadrat plus kleinen C aus Wurzeln aus A-Quadrat plus B-Quadrat
3. Interessant dabei ist jetzt, dieser Abstand wird positiv,
wenn der Koordinatenursprung unseres Koordinatensystems und der Punkt PS
auf unterschiedlichen Seiten unserer Geraden liegen.
Das heißt, wir können also bei der Gelegenheit auch gleichzeitig überprüfen,
wo dieser Punkt in Bezug auf die Gerade und auch
den Koordinatenursprung liegt
So, der nächste Algorithmus, mit dem
wir uns beschäftigen wollen, ermittelt die Fläche eines Polygons.
Und ich will das hier einmal anhand eines ganz,
ganz einfachen Beispieles machen.
Das Polygon darf aber beliebig komplex sein und beliebig viele Kanten haben.
Ich will es mal zeigen,
anhand eines einfachen Quadrates
Wir gehen davon aus, dass unsere Polygonkanten orientiert sind und die Orientierung sei,
die mathematisch positiven Umlauf sind, um das Polygon herumgegeben.
Es sei weiterhin PN gleich P1, das heißt also unser
Polygon ist ein geschlossenes Polygon. Dann ermittelt sich die Fläche,
die von diesen Kanten umschlossen ist, egal wie die Kanten verlaufen,
die dürfen also ein beliebig bizarres Polygon umrannten.
Die Fläche ermittelt sich zu einem Halbmal Summe,
die gleich 1 bis 1, mal xi-y i plus 1
minus hicks i plus 1 mal Y die.
Wenn Sie genau hinsehen, werden mit dieser Formel Dreiecksflächen berechnet.
Und zwar in der folgenden Art. Für jedes Dreieck
wird die Differenz die Fläche berechnet Zwischen der gegebenen Polygonenkante und
dem Ursprung unseres Koordinatensystems. Das heißt also,
das Dreieck wird bestimmt aus einer Polygonkante, genau einer Polygonkante,
die werden also individuell betrachtet und die Enden dieser Polygonkante werden verbunden mit dem Ursprung des Koordinatensystems.
Wenn wir jetzt die Fläche dieses Dreiecks berechnen,
dann ergibt sich bei Dreiecken deren Kanten auf diese Weise
Das stimmt durch die Richtung der betrachteten Polygonenkante,
ein mathematisch positiven Umlaufsinn haben, eine positive Fläche.
Bei unserem Quadrat wären das also diese beiden Kanten,
diese und diese, die jeweils verbunden,
wie der Ursprung des Koordinatensystems, eine positive Dreiecksfläche ergeben,
die sich ganz einfach hier raus ermittelt.
Okay? Dieser positive Umlauf entsteht dadurch, dass er am imnächst Was ist los?
Das ist am Ende gesagt, im Plus 1 steht die Plus 1. Dadurch,
dass ich dadurch, dass sich die kannten, praktisch sortiert habe,
das heißt, die Eckpunkte des Dreiecks sortiert habe,
sodass die Kanten von einem Punkt zum Folgepunkt so verlaufen,
dass wir die Gesamtfläche im mathematisch positiven Sinne umrunden.
Also hier haben wir die beiden Punkte PI und PI
plus 1. Bekannt ist also so gerichtet von PI nach PI
So, wenn wir jetzt die beiden anderen Kanten betrachten,
also diese beiden Kanten, unseres Dreiecks,
dann haben wir die Situation, das heißt also,
diese Kante ist so rum gerichtet und damit hat das Dreieck,
das wir hier umrunden, eine Orientierung oder die Kanten,
die das Dreieck umgeben, haben eine Orientierung im mathematisch negativen Sinn.
Und damit ergibt sich hier aus derselben Formel eine Fläche, die negativ ist.
Ja, und das Gleiche gilt natürlich dann auch für diese Kante,
haben wir hier auch eine Fläche, die negativ ist.
Wenn wir diese beiden jetzt betrachten, dieses,
dann haben wir also eine Fläche berechnet,
die sieht aus wie so ein schöner Drachen,
zwischen dem Ursprung unseres Koordinatensystems und diesen beiden praktisch entfernt gelegenen Kanten unseres Polygons und davon ziehen wir ab.
Diese Fläche und es bleibt übrig, diese Fläche.
Auf die Weise haben wir also die Gesamtfläche unseres Polygons berechnet
und das funktioniert also bei ganz beliebigen Polygonen,
nicht nur bei so einem einfachen Quadrat,
das habe ich nur gewählt, um es ein wenig leichter zu veranschaulichen.
Das Polygon kann also beliebige Formen haben,
das kann so aussehen, wie dieses oder noch extremer.
Das Polygon kann auch eine Mehrfachzusammenhängende Fläche umgrenzen. In dem Fall
müssen wir dann allerdings wieder Hilfskanten einführen. Das heißt,
Ja, Fläche umrunden und hier meinetwegen Punkt PI beginnen,
dann gehen wir zu PI plus 1, dann zu der Aussparung,
rumfahren die Aussparung.
Und das sieht jetzt aus, als umführen wir die im mathematisch negativen Sinne.
Das ist auch richtig. Wir wollen die Aussparung der Subtrahieren von der Fläche.
Und dann wandern wir wieder hier raus, wandern hier weiter,
führen eine neue Hilfskante ein zu den anderen Aussparungen,
umfahren diese Aussparung,
gehen wieder hier raus und laufen auf der äußeren Perisserrie der Fläche weiter,
bis wir schließlich im Punkt, im Anfangspunkt wieder ankommen.
Das heißt also, wir können Kleinen Algorithmus, Flächen,
polygonale Flächen, beliebig bizarrer Form, berechnen und auch solche Flächen berechnen,
die irgendwo in ihrem inneren Aussparungen haben.
Das heißt, die nicht einfach zusammenhängend sind. So,
jetzt wollen wir als nächstes einmal die konvexe Hülle eines Polygons bestimmen.
Wir hatten ja den Begriff der konvexen Hülle schon geklärt.
Wir wollen also ein beliebig gestaltetes Polygon betrachten und wir suchen
das kleinste Polygon, das unser gegebenes Polygon komplett beinhaltet,
das also keine Beulen nach innen hat.
Jede beliebige Grade, die wir durch dieses Polygon legen,
darf dieses Polygon nur zweimal schneiden.
Ein Polygon, das diese Kriterien erfüllt,
wäre die konvexe Hülle für dieses oder für ein beliebiges Polygon.
Ja, wir hatten uns da vorgestellt,
wir nehmen ein solches Polygon, das in Ebenen lief.
Wir schlagen an jedem Eckpunkt dieses Polygons ein Nageling,
die Projektionsfläche. Dann haben wir also alle Eckpunkte markiert,
dann nehmen wir ein Gummiband und legen es außen herum,
lassen es also von außen auf das Polygon schrumpfen und dann
wird es einige der Eckpunkte treffen und umschließen und andere der Eckpunkte Licht umschließen.
Das heißt also, solche Eckpunkte,
die in unserem gegebenen Polygon Beulen nach innen repräsentieren,
liegen dann nicht auf der komplexen Hülle unseres Polygons.
So, die Frage ist jetzt, wie können wir
eine solche Konvexelhülle bestimmen? Gehen wir davon aus,
dass wir in der Ebene zunächst einmal eine beliebige Anzahl von
Punkten belieben
Und wir suchen für diese Punktmängel, die konvexe Hülle.
Das heißt, wir gehen noch einen Schritt zurück. Wir suchen zunächst einmal,
dass Polygon, dass dieses äußere Polygon für die Punktmenge und
dann die Konvexerhülle, die die gesamte Punktmenge einschließt.
Ein kleiner Algorithmus dafür wäre, dass wir zunächst einen Referenzpunkt auswählen,
und zwar den Punkt mit der kleinsten Ordinate,
Und wenn es davon mehrere geben sollte, mit der gleichen kleinsten Ordinate,
dann nehmen wir davon den Punkt mit der kleinsten Absässe.
Dann sortieren wir die Punkte nach dem Winkel,
den sie mit unserem Referenzpunkt Q und der positiven Absissenrichtung einschließen.
Und wenn wir mehrere Punkte haben,
die unter dem gleichen Winkel zu finden sind,
interessiert uns von denen, nur derjenige,
der von Bonku am weitesten entfernt ist,
der den größten Abstand von Kuhat.
Dann verbinden wir die auf diese Weise sortierten Punkte zu einem
geschlossenen Polygon und am Ende sortieren wir alle nicht konvexen Eckpunkte aus.
Und wenn bereits eingeschlossenes Polygon vorgegegeben ist,
dann brauchen wir nur noch die nicht konvexen Eckpunkte aussuchen.
Also in diesem Fall hatte ich ja ein geschlossenes Polygon vorgegeben,
da müssen wir nur noch
die Punkte aussortieren und dann sind wir fertig
Aber wenn wir eine beliebige Punktmenge vorgeben, dann interessiert uns
natürlich zunächst einmal das. Ja, wie finden wir das?
Und dann im letzten Schritt, wie finden wir das?
So, das, was ich Ihnen also zunächst verbal beschrieben habe,
das sieht dann so aus. Gehen wir davon aus,
dass wir diese Punkte hier in beliebiger Reihenfolge vorgegeben haben.
Ich habe mal nur eine kleine Menge von Punkten hier dargestellt.
Das können auch wieder beliebig viele sein.
Dann suchen wir zunächst einmal
unseren Referenzpunkt
Das ist der Punkt mit der kleinsten Ordinate.
Und in unserem Fall habe ich das gutmütig gestaltet.
Es gibt nur einen Punkt mit einer kleinsten Ordinate.
Theoretisch könnten mehrere da sein, dann nehmen wir eben den,
der auch noch die kleinste Absicher hat.
So, und dann verbinden wir alle anderen Punkte mit diesem Punkt.
Zunächst einmal. Und dann sortieren wir die Punkte nach diesem Winkel,
der zwischen der Verbindungsgraden zwischen Q und dem jeweiligen Punkt und
der positiven X-Richtung gegeben ist.
Damit Verbinden wir die halt damit. Sortieren wir
die Punkte und kommen dann zu dieser Folge.
Hier in diesem Fall haben wir also zum Beispiel zwei Punkte,
die auf einer geraten, auf der gemeinsamen Graden von Kuh liegen.
Und da verwenden wir nur den, der am weitesten von Kuh entfernt ist.
Den Punkt, der näher bei Kuh liegt, den ignorieren wir.
Und auf die Weise entsteht zunächst einmal dieses Polygon,
der äußersten Punkte der Punkte, die von Kuh am weitesten entfernt sind.
Und wir haben praktisch das,
was analog hierzu ist
Und der nächste Schritt ist dann, wie sieht die Konflikte?
Und da können wir uns einen relativ einfachen, anschaulichen Algorithmus vorstellen.
Wir nehmen unser Polygon und wir teilen unser Polygon an den
beiden Eckpunkten mit der kleinsten und der größten Absitze
und teilen das also dann in zwei Hälften, in Anführungsstrichen,
dann definieren wir zunächst mal unseren Punkt mit der kleinsten Absüsse zum Hausgangspunkt für uns Algorithmus.
Und speichern ihn als ersten Punkt unseres Öl-Polygons.
Okay. Jetzt verbinden wir diesen Punkt mit seinem Nachfolger.
Wenn dieser Nachfolgerbeweis unser größter Punkt ist,
der Punkt mit der größten Absüsse, dann sind wir fertig.
Wenn es noch irgendein Punkt auf dem Wege ist,
dann prüfen wir, ob alle nachfolgenden Punkte dieser Polygonhälfte auf
der linken Seite dieser Verbindungsgeraden liegt zwischen unserem Referenzpunkt und seinem Nachfolger.
Wenn Sie alle auf der linken Seite liegen,
dann ist der Nachfolgende Punkt ein Punkt und sowas umhüllenden Polygons.
Wenn einer der nachfolgenden Punkte rechts davon liegt, dann müssen wir
diesen Punkt verwerfen und gehen einfach zum übernächsten Punkt über.
Verbinden also unseren Ausgangspunkt mit dem übernächsten Punkt und prüfen das wieder nach.
Und das machen wir, bis wir einen Punkt,
unseren Ausgangspunkt mit einem Punkt verbunden haben, der so liegt,
dass die Verbindungsgrade zwischen Ausgangspunkt und diesem Punkt alle anderen Punkte,
Links von sich liegen hat.
Und das Ganze machen wir dann also bis an dieser Stelle
das terminiert. Wir laufen also diese kleine Schleife immer durch,
bis wir also dann fertig sind,
bis das terminiert und dann haben wir alle die Punkte gefunden,
die auf unserem Volligonen außerliegen.
Auf unserer kontexten Hülle liegen. Und dann machen wir das
Ganze ganz analog für die andere Hälfte und sind fertig.
Kurze Woche gleichzeitig. Was wir sehen, oder?
Das ist nicht möglich. Wenn wir eine Hälfte,
wenn du quasi eine Verbindungshülle anguckst,
wirst du links immer so lang, hast du nur die Hälfte.
Wenn wir dann über den Extrempunkt,
über diesen Punkt hinauskommen und dann weitermachen, dann entstehen ja automatisch Punkte,
die auf der rechten Seite unserer Graben liegen.
Also wenn wir, ja klar,
wenn man relativ gut ist, sind wir links.
Ja. Ich habe mir jetzt vorgestellt,
ich laufe gar nicht so rum,
dann bleibt es ja nichts
Ein weiterer netter,
kleiner Algorithmus ist die Ermittlung des Schnittpunktes von zwei Polygonkanten,
wenn wir zwei Graden gegeben haben in der impliziten Form A16 plus B1 Y plus C1 gleich 0 und A2X plus B2 Y plus C2 gleich 0,
dann erhalten wir die Koordinaten des Schnittpunktes durch diese beiden Quotienten und Wichtig ist,
dann zu unterscheiden, ob sich die beiden bekannten,
die wir damit betrachten, auch tatsächlich schneiden.
Ja, es kann also durchaus zwischen den beiden Geraden,
die durch diese geraden Gleichungen bestimmt sind, einen Schnittpunkt geben,
dass die der Schnippung aber nicht unbedingt auf den Polygonkanten liegt.
Das heißt also, wir müssen dann noch überprüfen,
liegt er da und da können wir sagen, dass eine Punktüberschneidung immer dann vorliegt,
wenn bezüglich beider Kanten die Endpunkte der jeweils anderen kannte auf verschiedenen Seiten liegen.
Beispiele? Hier haben wir eine gerade von P1 nach P2
und eine von Q1 zu Q2. Diese beiden kannten schneiden sich,
weil in Bezug auf die Kante P, die beiden Endpunkte,
der Kante Q auf unterschiedlichen Seiten liegen und umgekehrt in Bezug auf die Kante Q,
die beiden Endpunkte der Kante P,
auch auf unterschiedlichen Seiten liegen.
Hier haben wir ein Beispiel, wo wir zwar einen Schnittpunkt ermitteln können,
bei denen wir aber sehen, dass in Bezug auf die Kante P
die Endpunkte der Kante Kuh beide auf derselben Seite liegen.
Und das Gleiche gilt auch in Bezug auf die Kante Kuh
, für die Endpunkte der Kante P.
Hier haben wir in Bezug auf die Kante T
beide Endpunkte der Kante Kuh auf derselben Seite liegen,
aber in Bezug auf die Kante Kuh,
die Endpunkte der Kante P auf unterschiedlichen Seiten liegen.
Das heißt also, wir müssen tatsächlich Beide Fälle überprüfen.
Es muss also, wie wir hier gesehen haben, bezüglich beider Kanten,
die Endpunkte der jeweils anderen kannte auf unterschiedlichen Seiten liegen.
So, dann haben wir noch Sonderfälle, die wir beachten müssen.
Es kann sein, dass ein Endpunkt einer kannte,
auf der anderen Kante liegt. Und es kann sein,
dass die beiden Kanten kolonial sind und sich dabei überlappen.
Es kann aber auch sein,
dass die beiden Kanten kolonial sind und einander nicht überlappen
Diese Sonderfälle müssen wir dann also auch noch gesondert betrachten.
So. Die andere schöne Aufgabe ist, herauszufinden,
ob bei einem gegebenen Polygon und einem gegebenen Punkt
der Punkt innerhalb des Polygons liegt oder außerhalb des Polygons.
Wenn wir so relativ einfache Polygone haben,
ist das ja auch anschaulich noch relativ leicht zu sehen.
Aber sie können sich vorstellen, dass sie zum Beispiel
so etwas haben
Und so weiter. Ja, wir können das ja als
eine Polygonfläche betrachten und wenn ich das jetzt raffieren würde,
die eigentliche Polygonfläche, dann sählen wir auch wieder wo Polygonfläche ist und wo nicht.
Wenn ich es nicht raffiere und wir nur die Kanten auf diese Weise sehen,
Und ich sage, dieser Punkt liegt ja eigentlich innerhalb der Polygonfläche oder außerhalb.
Da wird es schon schwieriger. So, Algorithmus, ja
? Wie kann man das jetzt überhaupt sagen,
ob das in der Polygonfläche liegt oder nicht?
Also es könnte ja beides das Polygon sein, oder?
Wenn du doch alles drumherum, kommt dieser Hohlraum bei der Ernst.
Bei den Quellen der Polygonsendung auch der Kreise selbst,
weil er ist ja nicht beschlossen.
Doch, das ist geschlossen. Also dieses ist ja
eine Spirale, Sie können sich das vorstellen.
Ich habe also meinetwegen so einen dicken Draht genommen zu einer Spirale
gebogen und dann projiziere ich das Ding an eine Wand.
Das heißt also, ja? Okay. So,
algorithmisch lässt sich das relativ leicht lösen. Auf diese Weise
mit der sogenannten Winkelsummenmethode. Ich verbinde den gesuchten Punkt.
Ich gehe zunächst einmal wieder davon aus, dass natürlich meine Polygonkanten orientiert sind.
Ja, das heißt also, ich habe meine Polygonkanten entweder
mathematisch positiven oder im mathematisch negativen Sinn, um mein Polygon herumgelegt.
Sie sind sortiert, aufsteigend sortiert. Jetzt verbinde ich meinen Punkt,
dessen Position nicht analysieren möchte, mit den Eckpunkten meines Polygons. Und gehe jetzt die Kanten,
die sich dadurch ergeben,
die Verbindungskanten zwischen bei einem Referenzpunkt und den Eckpunkten des Polygons,
durch und messe immer den Winkel oder berechne den Winkel,
zwischen dem Peckpunkt PI,
meinem einem Referenzpunkt und dem Eckpunkt Pi plus 1. den Winkel bestimme ich,
ich,
danke ich,
ich zum wannkel,
... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ...
Serie Winkel, die summiere ich auf. Und wenn
die Summe dieser Winkel, ungefähr gleich zwei P ist,
dann weiß ich, dass der Punkt innerhalb der Polygonfläche liegt.
Egal wie bizarr mein Polygon aussieht. Also auch so bizarre Polygone
funktionieren damit. Wenn die Summe ungefähr gleich null ist,
dann weiß ich, dass der Punkt außerhalb der Polygonfläche liegt.
So, und hier habe ich Ihnen also so ein einfaches
Beispiel dargefällt, in dem beide Situationen zu sehen sind.
Hier haben wir den Punkt innerhalb der Polygonfläche liegen.
Hier haben wir ihn außerhalb der Polygonfläche liegen,
wenn wir hier nacheinander Die Kanten sind ja orientiert und aufsteigend so addiert,
dann haben wir zunächst diesen Winkel, plus diesen Winkel,
plus den, plus den, plus den, plus den.
Und die Summe aller Winkel macht also ziemlich genau 360 Grad.
Das heißt, rein theoretisch exakt 360 Grad,
warum habe ich hier eigentlich gesagt, ungefähr 2P?
Das sind die Informatikerinnen und Informatiker unter ihnen wieder gefragt.
Und uns Fehler werden auf Titzel genau das ganze Jahr haben
Zum Beispiel, ja. Rundungsfehler, wenn wir die Prixe,
Ungenauigkeit mit berücksichtigen, aber auch rund ums Fehler,
wenn wir bald der Winkel... Entschuldigung.
Bei der Winkelberechnung. Nutzen wir ja die Triggermormetrischen Funktionen.
Und die Auswertung der Triggenometrischen Funktionen führt natürlich bei vielen Winkeln,
die wir da berücksichtigen, auch zu einem Rundungsfehler,
der sich da aufsummiert,
sodass wir also auf exakt 2P in der Regel so gut wie in die kommen.
So, betrachten wir noch den anderen Fall,
wenn der Punkt außerhalb unserer Polygonfläche liegt.
Dann haben wir wieder bei der Orientierung unserer Kanten hier
einen Winkel, der negativ ist. Hier einen Winkel,
der negativ ist und dann von da nach da einen Winkel,
der positiv ist und danach da einen Winkel,
der positiv ist,
von da nach da einen Winkel,
der positiv ist
Und von da nach da ein Winkel sehr positiv ist.
Und wenn wir diese Winkel betrachten,
dann haben wir hier also einen relativ großen Winkel.
Zweimal, die negativ sind und dann eine Folge von kleineren,
positiven Winkeln und die Summe dieser Winkel wird dann gleich null.
So, das ist ein Algorithmus, recht stabil,
mit dessen Hilfe wir bestimmen können,
ob ein Punkt innerhalb einer Polygonfläche liegt oder nicht.
Das macht ein Punkt auf der Kante
oder auch ein Punkt am Rand
Wir können das natürlich zunächst mal abfangen und prüfen noch
einen Punkt mit einem der gegebenen Eckpunkte übereint.
Stimmt. Wie sieht es denn aus, wenn er auf einem Eckpunkt liegt?
Man will sich nicht zu selbst der Linie ziehen kann.
Also wir hätten dann auf jeden Fall irgendwo Kanten der Länge
Null, wenn er auch einen Eckpunkt lege.
Das Problem müssten wir also da auf jeden Fall abfangen
Das ist also der kleine Nachteil an dem Algorithmus,
wir müssen so etwas überprüfen,
aber für die Mehrheit der Fälle ist es also wirklich stabil.
Wie sieht es mit der Kante aus,
wenn auf der Kante ist? Wie sieht es dann aus
? Gib die Frage zurück. Wir müssen das dann
genau hier geben
Der wird also dann praktisch als ein Punkt im Polygon betrachtet.
So, dieses Verfahren hat den gleichen Nachteil,
das ist natürlich für alle Eckpunkte unseres Polygons
jeweils die Winkelberechnung durchführen muss
Trigonometrische Funktionen auswerten muss und so weiter, ist damit also relativ aufwendig.
Es gibt ein anderes Verfahren, mit dessen Hilfe wir herausfinden können,
ob ein Punkt innerhalb einer Polygonfläche liegt,
dass dieses Problem nicht hat und das ist,
dass die sogenannte Schnittpunktmethode.
Wir betrachten einfach, wir definieren von unserem betrachteten Punkt aus
eine Halbgrade in irgendeine Richtung und bringen diese Halbgrade mit
unserem Polygon zum Schnitt
Und dann können wir sehen, wenn unsere Halbgrade,
unser Polygon einmal schneidet, dann legt unser Punkt innerhalb der Polygonfläche.
Und wenn es zweimal, nein, wenn die Anzahl der Schnittpunkte,
jetzt muss ich es nochmal machen,
wenn die Anzahl der Schnittpunkte ungrade ist,
dann liegt unser Punkt innerhalb der Polygonfläche.
Und wenn die Anzahl der Schnittpunkte gerade ist,
dann legt unser Punkt außerhalb der volle Grundfläche.
Ja, hier in diesem schönen, einfachen Beispiel können wir wieder sehen.
Hier legt unser Punkt A. Ich habe hier einfach vertikale Halbgraden angenommen.
Und diese vertikale Halbgarade schneidet unsere Polygonenkanten genau einmal.
Das heißt, der Punkt liegt mir nachher.
Hier bei unserem Punkt B haben wir, sehen wir zunächst
einmal ja auf den ersten Blick, er legt außerhalb.
Und das können wir auch verifizieren. Wir finden zwei Schnittpunkte,
unsere halbgeraden mit den Polygonkanten. Wir könnten uns jetzt vorstellen,
dass unser Punkt C jetzt zum Beispiel hier drin lägen und wir
eine halbgerade definierten in derselben Richtung wie hier bei B,
dann hätten wir drei Schnittpunkte und damit wieder eine ungerade Anzahl.
Das heißt, unser Punkt liegt innerhalb der Fläche.
Okay. Nun habe ich hier schon bei den Beispielen etwas Besonderes gemacht.
Ich habe gesagt, rein theoretisch darf die Halbgrade in jede beliebige Richtung gehen.
Der Algorithmus stimmt dann vom Prinzip her immer. Wir gehen einfach von unserem gegebenen Punkt aus,
definieren eine halbgerade in irgendeine Richtung, schneiden diese halbgerade mit unserem Polygonkanten,
wenn die Anzahl der Schnittpunkte ungerade ist,
liegt unser Punkt innerhalb des Polygons,
wenn die Anzahl der Schnittpunkte gerade ist, liegt er außerhalb.
Dass wenn man ihn halt gerade gebürt und kommt,
von der Kunden geht, weil dann ist es ja auch von 1000,
sagen, dann ist es sofort im Runden,
wo ich dann auch sagt, so.
Ja, da muss ich dann, so.
Ja, da müssen wir liegen. Ist das ist
ein mitt. Das ist ja auch ein mitt,
Hier entscheiden können, dass das nur ein Schnittpunkt ist.
Zu dem Problem kommen wir dann gleich. Ja? Okay,
aber zunächst mal dieses Problem. Warum habe ich hier ausgewählte Halbgraden verwendet?
Nämlich halt gerade die Vertikalverlaufen. Da arbeiten nicht Paris zu
einer Außenkanne sind. Mein Polygon könnte zum Beispiel das sein,
was ich hier ganz zu Anfang mal hatte.
Dieses. Ich hatte ja gesagt, mein Polygon kann
beliebige Fragen Kann beliebig bizarr, aber... Sorralzeit.
Ein Quadrat, das... Wachsen unserer Scorvinaten-Systems.
Was könnte der Grund dafür sein, dass ich... vertikale,
halbgeraden gewählt habe? Zumindest ist ja egal,
ob welche Halbwahl wann wählt und vielleicht sind die besonders simpel.
Ja. Ist ja nicht unbedingt so quer mit Steigung und so weiter,
sondern man kann einfach sagen, das sollen gleich zwei oder so.
Mhm. Mhm. Wozu führt das? Dieses besonders simple
, wie wir genannt haben. Was macht das dann?
So einfach? Bei diesen Geraden, die ich so gewählt habe.
Ich könnte die auch horizontal, exakt horizontal wählen. Ja,
früher in zweiten Liga-Punkte, wenn man es in Demos entwickelt.
Ich möchte ja, dass es jetzt überhaupt Schnittpunkte haben,
damit ich eben so weiter drüber führen kann.
Und dann kann ich den zweiten Liebe-Punkte nehmen und dann weiß ich,
jeder wert dazwischen, den kann ich als Halbgrade ins Nutztag geben.
Also wenn ich mir zwei Punkte habe,
dann haben die beide einen X-Wert und dann kann ich irgendeinen X-Wert dazwischen nehmen und weiß,
dass das auf jeden Fall neu wird, die Schnittpunkte haben wird.
Also ich muss keinen höchsten Stichpunktberechnung. Ich muss noch keine
Schnittpunktberechnung in dem Sinne durchführen, genau. Also zumindest für,
so wie sie es gerade so mit ihren Ahnen gezeigt haben,
in Richtung der Apsismus sich nichts berechnen
Öffentliche Punkte, auf die ich da geraten habe, dieselbe Absisse. Das heißt also,
die Absisse hier kenne ich und ich kann durch reine Vergleiche herausfinden,
dass die Absisse dieses Schnittpumpes zwischen diesen beiden Endpunkten der Kante liegt.
Ja, da muss ich also noch gar nicht berechnen.
Den Schnittpunkt gar nicht berechnen, sondern ich kann ihn direkt
durch reine Vergleiche herausfinden, dass er da ist.
Und es ist also ein ganz großer Vorteil gegenüber einer Geraden,
die in eine beliebige Richtung geht,
da muss ich die Schnittpunkte dann tatsächlich berechnen.
Bei den Vertikalen oder horizontalen Graden weiß ich dann immer automatisch,
wie die Absisse beziehungsweise die Ordinate des Schnittpunktes ist.
Und ich kann durch reine Vergleiche sehen, welche Kanten geschnitten werden und welche möchte.
So, aber jetzt hier Problem. Es kann ja passieren,
gemeinerweise, dass diese Halbgerade, die ich gewählt habe,
Und meines Pollygons trifft. Und wenn die Halbgerade genau den Eckpunkt trifft,
dann bekommen wir ja im Prinzip zwei Schnittpunkte.
Denn die Halbgerade schneidet, wenn wir zum Beispiel eine Halbgerade hier durchlegen,
dann schneidet die sowohl diese Kante, als auch diese Kante,
in dem gegebenen Eckpunkt.
Das heißt, wir erhalten also rein formal zwei Schnittpunkte.
Wir erhalten also eine gerade Anzahl von Schnittpunkten. Und dann
ist es ziemlich gleichgültig, ob der Punkt innerhalb oder außerhalb
der Fläche liegt. Wenn ich also einen Punkt habe,
der hier liegt, mein Halbgrade hier rauf schicke,
erhalte ich zwei Schnittpunkte und könnte daraus schließen,
was ja hier in dem Fall richtig ist.
Der Punkt liegt außerhalb. Wenn der Punkt aber hier liegt,
und ich gehe hier durch, erhalte ich hier auch zwei Schnittpunkte.
Wenn der Punkt hier liegt, ich betrachte diese Halbgrade,
dann erhalte ich hier zwei Schnittpunkte und hier einen Schnittpunkt,
insgesamt also drei,
nach meinem Kriterium würde das bedeuten,
der Punkt liegt innerhalb der Fläche
Er liegt aber hier. Was machen wir jetzt?
Den Algorithmus zweimal durchlaufen lassen, mit eineinhalb Graden nach oben
und einer nach rechts.
Die Ergebnisse vergleichen
Wenn Sie übereinstimmen,
dann könnte es mit relativ großer Wahrscheinlichkeit richtig sein,
wenn Sie nicht übereinstimmen, müssen wir noch einen dritten Fall.
Ja, vielleicht ein bisschen aufwendig, ne?
Ja. Es gibt ja Winkelgröße, das Punkt ist,
also ob das jetzt mehr als 280 Grad sind oder weniger.
Also das ist jetzt einfach so ein halbes Hamoto-Western.
Ja. Also wenn wir diese, wenn unsere Halbgrade
diesen Punkt hier trifft. Achso, ja. Ja
, genau. Die Frage ist,
warum man guckt
Aber wir kennen ja die Orientierung der Kanten. Wir kennen
die Orientierung der Kalten. Die Außenseite, das ist der beste Punkt.
Ob der Engel dann größer als 1980 Grad ist,
dann wird er nicht doch nicht gezielt zu machen.
Mhm. Was wäre, wenn er da durchgeht? Ja,
da wäre es halt nicht so, da wäre die Außenseite
des Punktes weniger als nur, hat sich grad regeln.
Also andersrum. Also wenn es weniger ist mit Online,
hat sich Grad außen, dann zählt er einfach.
Und das, ja, geht keine Augen. Glück brauchst
du nicht hin. Nee. Ja? Wir kennen ja
auch die Punkte. Also wir werden ja noch gucken,
ob es einen Punkt auf der Karte gibt, auf der Halbzeit.
Ja. Und das wäre dann die Ecke. Wir wissen,
wir haben einen Punkt getroffen. Die Frage ist jetzt aber,
wie muss ich diesen Treffer zählen? Wenn ich eine Kante treffe,
ist es immer eindeutig, dann habe ich einen Schnittpunkt.
Wenn ich einen Punkt treffe, dann ist es nicht eindeutig,
dann habe ich also in diesem Fall...
Ja, dann muss ich sagen, zweimal.
Zweimal oder gar nicht, wenn ich Dinger treffe?
Muss ich einmal zählen? Eine Darogenpresse, muss ich einmal zählen,
wenn ich hier treffe. Muss ich zweimal zählen oder gar nicht
? Aber damit haben wir jetzt schon die Fälle betrachtet.
Die unterschiedlichen. Die wir identifizieren müssen. Ich bekomme heraus,
ob ein Punkt, das ist natürlich immer das Kriterium.
Ich muss überprüfen, wenn ich diesen Algorithmus verwende,
trifft meine Halbgerade einen der Eckpunkte.
Und wenn sie einen der Eckpunkte trifft, dann muss ich entscheiden,
wie oft muss ich diesen Punkt jetzt zählen.
Muss ich ihm eine Gerade oder Ungrade Anzahl von Treffern geben.
Also muss ich ihn einmal oder, und das ist dann
gleich null mal oder zweimal zählen.
Man könnte gucken, also nicht der zerschneidt er das gut
oder berührt das ja
nur die Ecke
Tja. Es werden sie nur beschneidet, könnte man
die beiden, da hatten wir ja diese einen Punkte,
die beiden hatten nämlich drei Punkte ja aufgespannt.
Jetzt meine Punkte, jetzt nimmt Eckung den Hut da und verwinnt und
dann ist es hier gerade diese Kante schneiden, zerschneidet es auch zusammen.
Ja, schön ist ein Winkel zwischen den beiden,
wenn sie sie gerade Licht schneide zwischen, dann beholt sie das nur.
Gut. Korrekt. Haben das alle verstanden? Also das
Kriterium ist ganz richtig. Wenn die beiden anderen Endpunkte der beiden Kanten,
die nicht mit der Halbgeraden in ihrem Punkt in der Mitte getroffen haben,
wenn diese anderen beiden Endpunkte so liegen, dass die verbindende Kante zwischen den beiden,
diese Kante nicht schneidet, dann zähle ich den Punkt,
wie oft? Es zerschneidet, es ist zweimal zählt.
Okay, ja. Und wenn die verbindende Kante,
wenn ich also hier durchgehe zum Beispiel und dann wäre dieses die verbindende Kante,
die schneidet meine Halbgerade und dann zähle ich einmal.
Ja, das ist vom Prinzip her wichtig,
wir können das auch anders formulieren, wenn die Endpunkte der beiden Kanten,
die sich in dem Punkt treffen, durch den meine Halbkante läuft,
auf der Ist der Liebe?
Dann zähle ich den Punkt nicht oder zweimal.
Und wenn sie auf unterschiedlichen Seiten meine Halbkante liegen,
dann wird der Punkt einmal gezählt.
Beispiele, hier. Nicht hier haben wir also einen Fall,
da liegen diese beiden Endpunkte auf einem und derselben Seite dieser Halbkante.
Und dann brauche ich diesen Punkt gar nicht zu zählen
Dann wäre dieses hier eine Kante, die außerhalb des Pollygons vorbeiläuft.
Hier ist es genauso. Hier liegen beide Endpunkte,
auf derselben Seite dieser Halbkante,
dann brauche ich diesen Punkt gar nicht zu zählen.
Der einzige, der relevant ist, ist dieser Schnittpunkt.
Damit habe ich genau einen Schnittpunkt, eine ungerade Anzahl.
Das bedeutet, dieser Punkt liegt innerhalb der Pollygonflächen.
Hier sieht es ganz genauso aus, wie beiden Endpunkte liegen auf
unterschiedlichen Seiten. Und damit habe ich hier einen Schnittpunkt,
das heißt also,
der Punkt liegt innerhalb
Habe ich wieder den Fall. Die beiden Endpunkte liegen auf
unterschiedlichen Seiten der Halbkante, dieser Schnittpunktzelt, also auch einmal.
Hier oben habe ich einen zweiten normalen Schnittpunkt und
damit habe ich eine gerade Anzahl von Schnittpunkten.
Das heißt also mein Reiferheit. Referenzpunkt. Liegt. Außerhalb
So, ein anderes interessantes Problem ist, gegeben sein, zwei Polygone.
Und wir wollen herausfinden, ob sich die Polygone überdecken.
Ob die also teilweise in der Ebene gleiche Flächenbereiche belegen.
Und so etwas kann man also sehr leicht mit dem sogenannten
Minimax-Test machen. Oder im Englischen auch häufig Minimum-Box-Test genannt.
Der lässt sich auch durch einfache Vergleiche durchführen. Wir prüfen,
ob X-Men des reinen Polygons, also die kleinste,
Eckpunktabsisse des einen Polygons, größer ist als die maximale Eckpunktabsisse des anderen Polygons.
Oder ob das Ganze im Ordinatenrichtung eventuell gegeben ist,
das heißt also die kleinste Eckpunktardinate des einen,
größer ist als die größte Eckpunktordinate des anderen.
In dem Fall sind die Polygone
nicht überlappt
Das heißt also, wir können,
wir suchen einfach die extrem absissen beziehungsweise Ardinaten heraus und vergleichen die vier Werte,
die wir da haben miteinander und dann wissen wir schon,
dass ob die Polygone überlappen oder nicht.
Wenn dieses Kriterium, eines dieser beiden Kriterien nicht zieht,
dann bedeutet das noch Licht, dass sich die Polygone überlappen.
Wenn dieses Kriterium sagt, nur siegt über Lappen
einander garantiert nicht
Ja, das heißt also,
wenn diese Kriterien nicht erfüllt sind, dann müssen wir überprüfen.
Kantenweise überprüfen, ob wir Überlappungen vorliegen haben. Und dann
führen wir den paarweisen Minimax-Test für die einzelnen Kanten durch.
Und wenn es uns dann interessiert, können wir die Schnittpunkte ermitteln.
Ich habe ihnen hier einmal Beispiele gezeigt.
Hier haben wir den Fall, den wir direkt durch Vergleiche
ermitteln können
Da können wir also sehen,
hier in diesem Fall ist Y-Min des einen Polygons deutlich größer
als Y-Max des anderen und damit sind die beiden nicht überlappend.
Hier hätten wir einen Fall, bei dem es Y mit
des einen Polygons, kleiner als Y-Max des anderen.
Das heißt also, diese beiden Kriterien, dieses Kriterium zieht nicht.
Gleichzeitig ist X-Men des einen kleiner als X-Max des anderen.
Das heißt, auch das zieht nicht. Das heißt also,
die Umgebungsrechtecke, die Einbüllenden Rechtecke, dieser balden Polygone überschneiden sich.
Und damit besteht die Wahrscheinlichkeit, dass die Polygone einander auch überschneiden.
Und dann müssen wir also praktisch kantenweise überprüfen, ob da tatsächlich eine Überschneidung stattfindet.
Eine Überschneidung haben wir hier in diesem Fall,
die wir dann durch kantenweise Überprüfung auch herausfinden würden.
So, das kanntenweise überprüfen können wir natürlich ganz genauso machen.
Wir können für jede einzelne Kante ein Hüllrechteck definieren,
für das die Kante einfach die Diagonale ist. Das heißt also,
die beiden Endpunkte, der kannte, bestimmen, Xmax,
Y, Max und X mit Y min unseres Höllrechteckes.
Und dann können wir den gleichen Überlappungstest zunächst einmal über
die Extremwerte dieser beiden Tanten durchführen, durch reine Vergleiche.
Und erst, wenn wir da feststellen, die überlappen einander,
dann müssen wir den Schnittpunkt verwenden. Und das ist das,
was wir als eine der ersten Übungen heute gemacht haben,
den Schnittpunkt von zwei Kanten bestimmen.
So, eine andere schöne Aufgabe ist, dass Graffieren von Polygonen gegeben sollen.
Ja? Kevin, einfach 15 auf irgendeine Punkte,
das eine recht extrem anderen Holywood-Anarmen von der Grünen gibt.
Und es ist zu teuer. Das wäre teuer,
wenn wir also wirklich zwei Polygonen mit recht vielen Kanten haben.
Wir müssen das ja im Prinzip dann mit allen Punkten machen.
Wir müssen also alle Punkte des einen Polygons prüfen,
ob sie im anderen liegen oder nicht.
Ja? Und das wird teuer. Und gegen hierfür ja
reine Vergleichsoperationen ausreichen. Da brauchen wir also gar nicht weiter zu rechnen,
sondern wir können ja nichts zu wechst machen,
dass die eleg
Viele Fälle? Diesen Fall und diesem Fall ausschließen.
Wir gehen also automatisch weg und wir müssen rechnen erst,
wenn wir in diesen Fall kommen.
Komm, vergleich du nicht. Ja, aber... Der Aufwand,
dieses drin liegen oder nicht, ist doch größer als dieser reine Vergleich.
Er meint, glaube ich, dass am Ende,
wenn man so einen Packpunkt hat, die in Frage kommen.
Ich denke, das wird jetzt sein.
Wenn wir den Fall haben? Das kann sein,
dass die Schnittpunkte rechnen und dann einfach günstiger sein.
Aber wenn ich sie richtig verstanden habe, wollten sie das Kriterium
Punkt in Pollygon zunächst einmal verwenden, um herauszufinden,
ob die einander überlagern oder überschneiden.
Und dafür ist das Verfahren zu teuer. Hinterher bei der
Berechnung der Schnittpunkte, da gehen wir sowieso kantenweise vor.
Und da können wir also kantenweise sehr schnell auch wieder durch Vergleiche
zunächst mal prüfen, ob überhaupt irgendwo einen Schnittpunkt vorliegt.
Das machen wir also praktisch unterwegs. Paarweise sind die Kanten
vergleichen. Und erst, wenn wir dabei sehen,
da muss ein Schnittpunkt vorliegen, dann berechnet wir den Schnittpunkt.
Wenn wir jetzt wirklich ineinander die Zähne hat, zu überlachen oder nicht,
nach dem Verfahren, das will ich keine Kante,
sich schneidet, würde es ja nicht.
Aber dieses Kriterium und dieses Kriterium sagen uns schon,
dass die in irgendeiner Form einander überlappen.
Und was uns interessierte, zunächst einmal war,
gibt es irgendwie eine Teilüberdeckung,
wobei der Teil auch
vollständig sein kann
Ja, und dann ist es, wofür könnte man eigentlich so einen Algorithmus gebrauchen?
Ich meine, ich habe das jetzt immer so erzählt,
so dass man an diesen Dingen interessiert ist.
Aber warum könnte man daran interessiert sein? Ja. Kollisionsentdeckung. Die
bewegliche Objekte hat, die ein bisschen auf solche Kollidieren.
Genau, dafür kann man sie gebrauchen und dafür müssen die
auch schnell sein. Denn zwei Kollisionsentdeckung, da geht es
ja darum, dass wir meistens irgendwelche Bewegungen verfolgen.
Und dabei dann feststellen müssen, rechtzeitig, dass eine Kollision auftritt.
Sie hatten, glaube ich, noch eine andere.
Auch Kollision. Hätte jemand noch eine andere Vorstellung, wofür man
das brauchen könnte? Ja, dann können wir auch sehr sparen,
wenn wir Rate-Passing machen, gerade wenn man weiß,
dass der deckt, dass es nicht eindeutig wird.
Braucht man das gar nicht zu verdecken, zu berechnen.
Wenn wir also Schatten suchen zum Beispiel, wenn wir sehen,
fällt eigentlich von einem Polygon auf ein anderes Schatten.
Oder bei Shadern wird ein Polygon ganz so da teilweise von
einem anderen verdeckt. Dann brauchen wir da gar nicht mehr
die Shading-Algorithmen anzuretten, die wir im nächsten Kapitel kennenlernen.
Das sind also praktisch solche Voraussetzungen dafür,
dass man solche Überlappungen und Überdeckungen dann überhaupt identifiziert.
Und dabei ist es dann natürlich interessant,
Ein kleineres Polygon vor oder hinter einem größeren liegt?
Bei den Feldern. So, straffierend von Polygonen. Ja,
ich glaube, das fand ich richtig geil. Es gab ein paar,
wenn das eine Polygon in den anderen liegt,
weil sich keine Kante schneidet, dann erkennt doch die Seite,
so ist es gar nicht.
Doch, wir wollten ja zunächst mal rausfinden, überlappen dieeinander.
Und das erste Kriterium, das wir hier gewählt haben,
dieses hier. Das sagt schon... Das ist ja
nur ein mega Zufall
Es dir gefallen, dass du mir dann ja nur,
dass wir noch den Erstbeutel nehmen. Das war uns
das widere Beispiel. Ja. Aber dieses hier sagt,
wenn diese beiden Kriterien eines dieser beiden Kriterien ziehen,
dann überlappen sie sich nicht.
In dem Fall, in dem eins vollkommen im anderen liegt,
zieht keines dieser beiden Kriterien.
Also überlappen sie sich. Vielleicht. Dann schneiden sie ja
keine Kante, da kann man kein Kantenchen geben
Ah, okay. Ja, da brauche ich noch
einen vierten Schritt, der dann, was du meinst,
auch der kannte ich nicht, nicht positiv auswerten.
Ja. Wenn auch der Kantenschnitt nicht positiv ausfällt,
dann müssten wir tatsächlich überprüfen, okay,
das können wir dann machen, dadurch, dass wir prüfen,
dass, ob ein beliebiger Punkt in dem anderen liegt.
Eine Innenfilmung zu rechnen, ein Kirchenschritt, nein Team,
dann müssen wir ein sehr schwieriges Gestern wirken,
weil bei mir kein Schrittpunkt finden.
Also sagt es uns noch nichts,
Wir könnten, ja. Ich würde es mal nachtreffen,
oder? Wir könnten ja zunächst mal hier den Fall haben,
dass unser, dieses Polygon, so ein kleines ist,
das hier an dieser Stelle liegt.
Wir machen es, wir gucken erst mal,
ob man überhaupt eine Frage dann hätte,
da könnte sein, dann machen wir ihn doch mal.
Genau. Und dann stellen wir den noch in den Flip,
wo wir dann sind.
Was dann ja ziemlich sicher sind, dass da einer sein könnte.
Wir wissen nicht. An dem Punkt können wir das Mitpunkt berechnen,
denn das ist ja ein ganz klarer Fest,
der aber feiert ist,
Und wenn das einbreiten und anderen ist, dann gibt es
auch keinen Übungen. Genau, dann wissen wir,
wenn ich das hinkriege. Das ist ja das Problem,
dass andere drei könnt ihr jetzt so ein Kleines sein,
dass entweder hier genau drin liegt, dann finden wir keine Schnittpunkte,
dann stellen wir fest, es gibt keine Schnittpunkte zwischen Kanten.
Oder es könnte eins sein, das genau hier liegt.
Gibt es auch keine Schnittpunkte zwischen Kanten. Wenn es hier
drin liegt, dann hätten wir aber keine Überdeckung,
wenn es hier drin liegt, wäre es total überlegt.
Ja, das ist also, glaube ich,
das Problem, das sie angesprochen haben.
Und da müssen wir dann tatsächlich unterscheiden,
Wenn halt die Möglichkeit besteht, dass das der Fall ist,
dass man halt einen Punkt hat, wo die Bodentests machen.
Die einzige Frage ist dann nur,
was sind Abhängigkeiten von Punkte und Kantenanzahlen, teurer ist,
damit wir zuerst das machen, was billiger ist von weitests.
So. Könnt ihr das Problem dann als zufriedenstellend arbeitet betrachten?
Okay. Dann gehen wir jetzt nochmal schnell zum Raffieren.
Ich denke, das schaffen wir heute noch.
Wir haben also ein irgendwie beliebig geartetes Polygon dieses oder das
Und wir wollen in dieses Polygon praktisch zunächst einmal im
einfachen Fall horizontale, equitistante Linien reinlegen,
die also praktisch von hier beginnen und bis da immer laufen.
Und vorstellen kann man sich das so,
wie die Lamellen da drüben im Fenster.
Wir haben mal so in equitistanten Abständen horizontale Linien,
die quer über die Polygonfläche laufen.
Wobei das Polygon wieder beliebig bizarr aussehen kann,
also entweder so oder so oder noch bizarrer
Und die Schrafur dann entsprechend so dabei hingelegt ist.
Das heißt also auch ein Fenster, das nicht einfach rechteeckig ist,
sollte durch solche Lamellen abgedeckt werden können. Die Frage ist,
wie finden wir eigentlich die Schrafurlinien bei einem beliebig bizarr gestalteten Polygon? Das heißt,
wir definieren ja zunächst einmal eine horizontale Linie,
eine gerade und wir müssen herausfinden,
welche Teile dieser Geraden liegen jetzt eigentlich in der Polygonfläche und
welche Teile liegen nicht in der Polygonfläche und darstellen,
dürfen wir ja nur die Teile, die in der Polygonfläche liegen.
So, der Algorithmus ist auch denkbar einfach.
Wir ermitteln wieder die extremen Polygonordinaten mit Lamin und Y Max.
Also zum Beispiel diesen Punkt und den Punkt, die Ardinaten dieser beiden Punkte.
Dann fangen wir bei Y-Ming an und inkrementieren unsere Schrafurlinien-Ardinate,
um den Abstand der Schrafurlinie. Denn unten durch den unteren
Eckpunkt müssen wir ja keine Schrafurlinie malen, wenn es jemand sowieso nicht.
Die erste, die interessant ist, ist die,
die also um den Schrafurlinienabstand nach oben verschoben ist.
Dann bestimmen wir die Schnittpunkte dieser Schrafurlinie mit den Polygonkanten. Ja,
da kann das ja im Prinzip beliebig viele geben,
aber es sollte immer eine gerade Anzahl sein, es sei denn,
wir haben einen Eckpunkt betroffen, das Eckpunktproblem haben wir vorhin schon gelöst.
Ja, wir bestimmen also die Schnittpunkte der Schrafurlinie mit den
Polygonkanten und dann sortieren wir diese Schnittpunkte nach aufsteigender Absichse.
Das heißt also, wir beginnen mit dem Schnittpunkt,
mit der kleinsten Absichse,
von Ihnen aus gesehen dann da und sortieren die Schnittpunkte nach aufsteigender Absichse und dann können wir sagen,
jeweils zu einem Schnittpunkt mit einer ungewaden Schnittpunktnummer brauchen wir keine Linie zu zeichnen und wir verbinden immer einen umgeraten mit dem nächsten Geraden.
Und dann zum nächsten ungeraden wird wieder nicht gezeichnet und
zum nächsten Geraden wird wieder gezeichnet und so weiter
Unser Polygon beliebig bizarr aussehen, wir zeichnen von unserer Schraffurgeraden
immer nur die Abschnitte, die tatsächlich innerhalb der Polygonfläche liegen.
So, und dann machen wir hier oben wieder weiter. Das heißt,
wir inkrementieren unsere Schraffurlinien, Ordinate und errechnen für die neue
etwas weiter nach oben verschobene Schraffurlinie auch wieder die Flitpunkte und so weiter,
bis wir oben ankommen.
Das heißt also, bis wir Ypsilan Max erreicht oder überschritten
haben. Und dann sind wir fertig. So,
theoretisch können solche Schraffurlinien ja unter irgendeinem beliebigen Winkel angeordnet sein
Also beliebig dicht oder weit auseinandergezogen sein und Sie können unter beliebigen Winkeln angegeben sein, auch unter beliebigen Winkeln,
ist das kein Problem, das zu bearbeiten,
nehmen wir an, wir hätten einen Winkel Alpha,
unter dem wir die Frafurlinien zeichnen wollen,
dann drehen wir erst einfach die ganzen Eckpunktkoordinaten,
um den Winkel Minusalpha und damit werden die Frafurlinien,
die wir berechnen müssen, wieder horizontale Linien,
dann berechnen wir für jede Schrafsvorlinie die Schnittpunkte,
sortieren sie und so weiter und bevor wir sie zeichnen,
drehen wir die Schnittpunkte wieder zurück,
um den Winkel Alpha und dann zeichnen wir die Frafolien.
Und ansonsten dieser Algorithmus also ganz genau dasselbe. So,
mit diesem schönen Abschnitt, Schrafurlinien möchte ich für heute diese
Vorlesung abschließen und beim nächsten Mal wollen wir dann anfangen mit
den Problemen der Ausschnittsbildung und der Kappung, also Beruhigung und Clipping.
Wollen wir uns also überlegen,
wenn wir da draußen irgendwo eine Welt modelliert haben,
die beliebig groß ist, Welchen Teil dieser Welt können wir
durch die Begrenzung unseres Fensterrahmens sehen und welches sind die Teile dieser Welt,
die für uns dann für die optische Wahrnehmung gar nicht relevant sind,
die dann also abgeschnitten werden müssen.
Und das ist also das Geheimnis, womit diese Algorithmen sich befassen,
das Windowing und Clippings. Sie definieren ein Fenster,
Window und dann schneiden sie alles von unserem Modell oder unserer Szene ab,
was außerhalb der Fensterfläche liegt und wir starten es uns
nur das darzustellen,
was innerhalb der Fensterflächen
Damit beschäftigen wir uns dann beim nächsten Mal.
Für heute danke ich Ihnen für Ihre Aufmerksamkeit.
Wünsche Ihnen noch eine schöne Woche und bis nächste Woche