konkrete beispiele bernhard kornberger. Überblick installation tipps zu installation und...
TRANSCRIPT
![Page 1: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/1.jpg)
Konkrete Beispiele
Bernhard Kornberger
![Page 2: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/2.jpg)
Überblick
Installation Tipps zu Installation und Inbetriebnahme
Konkrete Beispiele Konvexe Hülle berechnen
Verschiedene Algorithmen
Fehler in der numerischen Genauigkeit Beispielprogramm Ursachen und Lösungen
![Page 3: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/3.jpg)
Installation und Inbetriebnahme
Download http://www.cgal.org/cgi-bin/cgal_download.pl
Entpacken nach /opt/ tar fxvz CGAL-3.0.1.tar.gz
Installations-Doku installation.pdf (27seitig)
Starten der Installation ./install_cgal –i
![Page 4: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/4.jpg)
![Page 5: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/5.jpg)
![Page 6: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/6.jpg)
![Page 7: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/7.jpg)
![Page 8: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/8.jpg)
![Page 9: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/9.jpg)
Installation und Inbetriebnahme
Beispielprogramme sind vorhanden in /opt/CGAL/examples ...Beispiele ohne qt /opt/CGAL/demo ...Beispiele mit qt
Compilieren mit: cd /opt/CGAL/examples/einBeispiel/ Variable CGAL_MAKEFILE setzen (WICHTIG) make
![Page 10: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/10.jpg)
Algorithmen zur Berechnung konvexer Hüllen im 2D
![Page 11: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/11.jpg)
Programm zur Berechnung der konvexen Hülle einer Punktemenge (verkürzte Version)
typedef CGAL::Point_2<CGAL::Cartesian<double>> Point;int main(){ std::vector<Point> out, randomPoints;
// Vektor mit zufälligen 2D Punkten im Einheitskreis CGAL::Random_points_in_disc_2<Point> g(1); for(int count=0; count<300000; count++) randomPoints.push_back(*g++);
// Punkte der konvexen Hülle berechnen und im Vektor ‚out‘ speichern CGAL::ch_jarvis( randomPoints.begin(), (randomPoints.end()),
std::back_inserter(out) );
// Ausgabe std::vector<Point>::const_iterator it=out.begin(); for(;it!=out.end();++it) cout << it<<endl; return 0;}
![Page 12: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/12.jpg)
...und das soll jetzt compiliert werden
1. /opt/CGAL-3.0.1/scripts/create_makefile...dieses Skript baut für alle *.c und *.cpp-Files im Directory ein Makefile
2. Variable CGAL_MAKEFILE setzen oder direkt ins Makefile eintragen:export CGAL_MAKEFILE=/opt/CGAL-3.0.1/make/makefile_i686_Linux-2.6.3-4mdk_g++-3.3.2
3. „make“ aufrufen, fertig.
![Page 13: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/13.jpg)
Verschiedene Algorithmen zur Berechnung konvexer Hüllen im 2D Die Algorithmen weisen unterschiedliche
Laufzeiten für n Punkte mit h Extrempunkten auf: ch_akl_toussaint: O(n log n) ch_graham_andrew: O(n log n) ch_bykat: O(n h) ch_jarvis: O(n h) ch_eddy: O(n h)
![Page 14: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/14.jpg)
Algorithmus: ch_eddy
![Page 15: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/15.jpg)
Algorithmus: ch_akl_toussaint
![Page 16: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/16.jpg)
Algorithmus: ch_bykat
![Page 17: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/17.jpg)
Algorithmus: ch_graham_andrew
![Page 18: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/18.jpg)
Algorithmus: ch_jarvis
![Page 19: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/19.jpg)
Laufzeitvergleich (CPU: XP1700)
ch_jarvis O(n h)
ch_eddy O(n h)
ch_graham_andrew O(n log n)
![Page 20: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/20.jpg)
Laufzeitvergleich (CPU: XP1700)
![Page 21: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/21.jpg)
Robustheit und Rechengenauigkeit
![Page 22: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/22.jpg)
Robustheit und Rechengenauigkeit
Die Typen int, float und double von C++ können ihre mathematischen Gegenstücke nur grob annähern Integer können überlaufen floats und double‘s produzieren
Rundungsfehler Gerade Algorithmen für Geometrie können
sehr empfindlich auf solche Fehler reagieren, wie das folgende Beispiel zeigt...
![Page 23: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/23.jpg)
Programmbeispiel zur begrenzten Rechengenauigkeitint main(){std::vector<Point> convHullOut;std::vector<Point> inputPoints;
// Zwei Segmente, die sich ueberschneidenSegment seg1( Point(0,0), Point(900,1000));Segment seg2( Point(0,1000), Point(1000,0));
// Endpunkte des ersten Segments -> VektorinputPoints.push_back(Point(0,0));inputPoints.push_back(Point(900,1000));
// Den Schnittpunkt in den Vektor speichernCGAL::Object result =
CGAL::intersection( seg1,seg2 );Point pt;if (CGAL::assign( pt, result ) )
inputPoints.push_back(pt);
// Errechnen der konvexen Huelle
CGAL::ch_eddy( inputPoints.begin(), (inputPoints.end()), std::back_inserter(convHullOut) );
// Ausgabe der konvexen Huelle
std::cout << "Die Punkte der konvexen Huelle lauten:\n";
for(;it!=convHullOut.end();++it)
std::cout <<*it<<endl;
return 0;
}
![Page 24: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/24.jpg)
Programmbeispiel zur begrenzten Rechengenauigkeit
![Page 25: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/25.jpg)
Ursachen und Lösungen
Im vorigen Programmbeispiel wurde typedef CGAL::Point_2<CGAL::Cartesian<double>>
Point; verwendet. Die Rechengenauigkeit von ‚double‘ hat nicht ausgereicht.
![Page 26: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/26.jpg)
LEDA – exakte DatentypenIntegers of Arbitrary Length Integers beliebiger Länge „integer“
Führen immer zu exakten Ergebnissen Kein Overflow/Underflow Verwendung wie und mit den eingebauten
Typen Vordefinierte arithmetische Operationen wie
Quadratwurzel, GCD, etc.
Aber 30-100 mal langsamer als ‚double‘
![Page 27: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/27.jpg)
LEDA – exakte DatentypenRational Numbers Rationale Zahlen „rational“
Führen immer zu exakten Ergebnissen Implementiert als Quotient zweier Integer
beliebiger Länge und mit deren Eigenschaften Kann wie ‚double‘ gemeinsam mit den
eingebauten Datentypen verwendet werden.
Aber 30-100 mal langsamer als ‚double‘
![Page 28: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/28.jpg)
LEDA – exakte DatentypenTyp „Rational“ - Beispiel#include <LEDA/rational.h> #include <LEDA/integer.h> using namespace leda; int main() {
integer denominator=1; int i; for (i=1;i<=40;i++) {denominator*=i;} // Nenner = (40!)
rational r(1000,denominator); // Rationale Zahl r=( 1000 / (40!) )cout << "r=" << r << endl;
// Einige Operationen mit r:r.normalize(); cout << "After r.normalize(): r=" << r << endl; r.invert(); cout << "\nAfter r.invert(): r=" << r << endl; cout << "\nsqr(r)=" << sqr(r) << endl; cout << "\nceil(r)=" << ceil(r) << endl; return 0;
}
![Page 29: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/29.jpg)
LEDA – exakte DatentypenReal Numbers Algebraic Real Numbers „real“
Führen zu exakten Ergebnissen Können wie und gemeinsam mit ‚doubles‘ verwendet
werden Arithmetische Operationen wie die k-te Wurzel sind
vordefiniert Nachteile:
Speicherbedarf steigt linear mit der Größe der Berechnung – alle Operationen werden gespeichert.
10-80 mal langsamer als ‚double‘ Empfohlen für Berechnungen der k-ten Wurzel, sonst
besser Big Floatingpoint Numbers
![Page 30: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/30.jpg)
LEDA – Typ mit Rundung Big Floatingpoint Numbers Big Floatingpoint Numbers „bigfloat“
Im Gegensatz zu den vorigen Typen ist „bigfloat“ ein Datentyp mit Rundung und führt nicht zu mathematisch exakten Ergebnissen
Aber im Gegensatz zu „double“ kann „bigfloat“ mit beliebiger Genauigkeit arbeiten.
Nachteile von „bigfloat“ 60-200 mal langsamer als double, abhängig
vom Rundungstyp Kompliziert in der Anwendung
![Page 31: Konkrete Beispiele Bernhard Kornberger. Überblick Installation Tipps zu Installation und Inbetriebnahme Konkrete Beispiele Konvexe Hülle berechnen Verschiedene](https://reader035.vdocuments.pub/reader035/viewer/2022062512/55204d7649795902118cac4b/html5/thumbnails/31.jpg)
LEDA - Weitere Typen
Floating Point Filter Schnell (nur noch 4 mal langsamer als double) Berechnet Fehlergrenzen und wenn das Resultat nicht
eindeutig ist, kann man immer noch den langsameren exakten Typ verwenden.
Intervall Arithmetik Vektoren und Matrizen
...aber diese Typen werden nicht direkt von CGAL unterstützt, das ist daher Stoff des LEDA-Vortrages.