AK Softwaretechnologie

Post on 30-Dec-2015

46 views 5 download

description

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. - PowerPoint PPT Presentation

Transcript of AK Softwaretechnologie

AK Softwaretechnologie

Computational Geometry Algorithms Library

Stephan Bauer 9930355

Einführung in

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

Struktur von CGAL

Vorteile: Modularer Aufbau

• Bibliothek ist leichter zu „lernen“

• Entwicklungsarbeit kann besser aufgeteilt werden (Europa)

• Verringerte Abhängigkeiten– leichteres Testen– leichteres Warten

Struktur von CGAL

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

Struktur von CGAL

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

Struktur von CGAL

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

Struktur von CGAL

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

Unterstütze Plattformen

Compiler Betriebssysteme

SGI Mips(Pro) CC 7.3, 7.4 (n32, n64)

IRIX 6.5

GNU g++  2.95.3 - 3.3.x IRIX 6.5 / Solaris 2.6+ / Linux 2.x /MS Windows 95/98/2000/XP/NT4 (with Cygwin)

SunPRO CC  5.3 (with patch 111685-05 ),5.4 (with patch 111715-09), 5.5

Solaris 2.6+

MS Visual C++  7.0 (.NET), 7.1 (.NET 2003)

MS Windows 95/98/NT4/2000/XP

Intel C++ 7.1 MS Windows 95/98/2000/XP/NT4

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