320 likes | 424 Views
AK Softwaretechnologie. Einführung in. Computational Geometry Algorithms Library. Stephan Bauer 9930355. Inhalt. Geschichte von CGAL Grundlegende Designentscheidung Aufbau von CGAL Core Library Geometric Kernel Basic Library Support Library Lizenzierung. Geometrische Algorithmen.
E N D
AK Softwaretechnologie Einführung in Computational Geometry Algorithms Library Stephan Bauer 9930355
Inhalt • Geschichte von CGAL • Grundlegende Designentscheidung • Aufbau von CGAL • Core Library • Geometric Kernel • Basic Library • Support Library • Lizenzierung
Geometrische Algorithmen • Computergrafik • Virtual Reality • Modellierung von Teilen • Robotik • Geographische Informationssystemen • Bildverarbeitung • Formerkennung • Schaltungsentwicklung
Probleme • rechnerische Genauigkeit • "Floatpoint" nicht exakt • Behandlung von Sonderfällen • Algorithmen oft schwer zu verstehen • für User schwer von Grund auf zu implementieren
Geschichte von CGAL • Idee geboren Jänner 1995 Utrecht • offizielles ESPRIT Projekt Oktober 1996 • Von Instituten aus ganz Europa und Israel • Utrecht University • ETH Zürich • Freie Universität Berlin • Martin-Luther Universität, Halle • INRIA Sophia Antipolis • Max-Planck Institut für Computer Science • Universität Saarbrücken • RISC Linz • Tel-Aviv University
Grundlegende Designentscheidung 3 Möglichkeiten • Sammlung von Einzelkomponenten • Integrierte Applikationen • Software Libraries
Sammlung von Einzelkomponenten • „Gems“ Ansatz • Bestehende Gems Sammlungen -> Grafik • Aufwendige „Kombination“ • Computional Geometrie vs. Grafik • Mehr Datenstrukturen beteiligt • Komplexere Algorithmen
Integrierte Applikationen Vorteile • Stellen homogene Umgebung zur Verfügung • Einzelteile aufeinander abgestimmt Nachteile: • in sich geschlossen • Schwer zu erweitern • Schwer wieder zu verwenden Bsp.: XYZ GeoBench (späte 80er)
Software Libraries Vorteile • Erweiterbar • Wieder verwendbar Beispiele: • PLAGEO Utrecht University • C++GAL INRIA Sophia-Antipolis • LEDA Max-Planck Institut für Informatik, Saarbrücken • GEOMLIB Brown University, Duke (Java) University, Hopkins University
Aufbau von CGAL • 3 Layer • Core Library • grundlegende nichtgeometrische Funktionalität • Geometric Kernel • grundlegende geometrische Objekte und Funktionen • Basic Library • komplexere Algorithmen und Datenstrukturen • Support Library
Vorteile: Modularer Aufbau • Bibliothek ist leichter zu „lernen“ • Entwicklungsarbeit kann besser aufgeteilt werden (Europa) • Verringerte Abhängigkeiten • leichteres Testen • leichteres Warten
Geometric Kernel (1) • einfache geometrische Objekte • Punkte, Linien, Segmente, Dreiecke,... • Objekte haben konstante Größe • Operationen auf Objekte wie Schnitt, Distanz und Affine Transformation • Die Objekte im Kernel sind geschlossen hinsichtlich der affinen Transformation • Aus der Existenz von Kreisen folgt die Existenz von Ellipsen
Geometric Kernel (2) • 3 Teile • 2D Objekte • 3D Objekte • nD Objekte • Jeweils für • Kartesische Koordinaten • Homogene Koordinaten
Geometric Kernel (3) • Die homogene Darstellung erweitert die kartesische Darstellung um eine Koordinate • Homogen • (x0,x1...xd-1,xd) mit xd≠0 • Karthesisch • (x0/xd,x1/xd...xd-1/xd)
Geometric Kernel (4) • Jeder Typ hat Member Functions • Bounding box • Affine Transformation • globale Funktionen • Erkennung und Berechnung von Schnitten
Geometric Kernel (5) • Geometrische Objekte sind nicht veränderbar • Keine Möglichkeit die kartesischen Koordinaten eines Punkts zu setzen • Keine Vorgabe des Koordinatensystems • Setzen von Kartesischen Koordinaten bei einem Punkt mit Polaren Koordinaten wäre teuer • Es gibt member Functions, die die homogenen/kartesischen Koordinaten eines Punktes ausgeben
Geometric Kernel (6) • Reference counting für Kernel Objekte • Jedes Objekt zeigt auf eine gemeinsame Referenz • Erhöhen wenn Objekt kopiert • Verringern wenn Objekt gelöscht wird • Referenz wird gelöscht wenn 0 • Vereinfacht durch Unveränderbarkeit der Kernel Objekte
Basic Library (1) • Komplexere geometrische Objekte • Polygone • Planar Maps • Polyheder • ... • Algorithmen • Konvexe Hülle • Triangulierung • Überschneidung von zwei Polygonen • ...
Basic Library (2) • Unabhängig vom Kernel • Trait classes • Standard trait class Implementierungen verwenden CGAL Kernel • Andere verwenden den Geometrischen Teil von LEDA
Core Library (1) • Grundlegende nicht-geometrische Funktionalitäten die vom Geometric Kernel oder der Basic Library benötigt werden (Unterschiede der C++ Compiler..) • Unterstützung für • Assertions • Preconditions • Postconditions • Warnings • Zirkulatoren und Zufallszahlengeneratoren
Core Library (2) Überprüfungen im Kernel • Preconditions • Postconditions • Assertions • Warnings Standard „ein“ • CGAL_KERNEL_NO_PRECONDITIONS • CGAL_KERNEL_NO_POSTCONDITIONS • CGAL_KERNEL_NO_ASSERTIONS • CGAL_KERNEL_NO_WARNINGS
Core Library (3) Zwei weitere Flags • CGAL_KERNEL_CHECK_EXPENSIVE • CGAL_KERNEL_CHECK_EXACTNESS Standard „aus“ Feinere Unterteilung • CGAL_CH_CHECK_EXPENSIVE • Nur in der konvexen Hülle
Support Library (1) • Support vs. Core Library • beide nicht-geometrische Funktionen • Support Library Funktionalitäten werden von den anderen beiden Layern nicht benötigt • Verbindung zwischen den geometrischen Objekten und externen Repräsentationen • Visualisierung • Externe Dateiformate
Support Library (2) • Unterstützte Formate • VRML • PostScript • GeomView • LEDA Windows for 2D/3D • ... • Generatoren für Künstliche Test Datensätze • Funktionalität zur Adaption von number-types anderer Bibliotheken
Lizensierung Open Source • Kernel und Support Library • LGPL Lizenz • Komerzielle Anwendungen • Basic Library • QPL Lizenz • Nur Open Source Anwendungen • Firmenintern • Kommerzielle Lizenz -> GeometryFactory
Projektumfang Release 1.2 (1999) • 150.000 Zeilen C++ Code ( KDSI ) • 2/3 Library • 1/3 begleitender Code • COCOMO (Constructive Cost Model) • Projekt Größe vergleichbar mit Betriebssystem Entwicklung bzw. Datenbank Management Systemen