Move the experimental package into the feature branch. They are

coupled tightly enough to have them in one branch.
This commit is contained in:
Philipp Möller 2012-05-04 13:47:08 +00:00
parent da6f1be1d2
commit 2ab6d66698
87 changed files with 750478 additions and 0 deletions

69
.gitattributes vendored
View File

@ -3235,6 +3235,75 @@ Polyhedron/examples/Polyhedron/corner.off -text svneol=unset#application/octet-s
Polyhedron/examples/Polyhedron/corner_with_hole.off -text svneol=unset#application/octet-stream
Polyhedron/examples/Polyhedron/corner_with_sharp_edge.off -text svneol=unset#application/octet-stream
Polyhedron/examples/Polyhedron/cross.off -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/Polyline_simplification_2.qrc -text
Polyline_simplification_2/demo/Polyline_simplification_2/Polyline_simplification_2.ui -text
Polyline_simplification_2/demo/Polyline_simplification_2/about_Polyline_simplification_2.html svneol=native#text/html
Polyline_simplification_2/demo/Polyline_simplification_2/data/all_crossed.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/bee.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/ksan_0.osm -text
Polyline_simplification_2/demo/Polyline_simplification_2/data/ksan_1.osm -text
Polyline_simplification_2/demo/Polyline_simplification_2/data/ksan_2.osm -text
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_G.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_P.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_T.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_c.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_d.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_q.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letter_u.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/letters_cd.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/map_1.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/map_2.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/map_3.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/maps.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/norway.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/demo/Polyline_simplification_2/data/san.osm -text
Polyline_simplification_2/demo/Polyline_simplification_2/data/test_ksan.osm -text
Polyline_simplification_2/demo/Polyline_simplification_2/icons/triangulation.pdf -text svneol=unset#application/pdf
Polyline_simplification_2/demo/Polyline_simplification_2/icons/triangulation.png -text svneol=unset#image/png
Polyline_simplification_2/demo/Polyline_simplification_2/include/CGAL/Qt/TriangulationArrangementGraphicsItem.h -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2/PkgDescription.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2/Polyline_simplification_2.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2/main.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2/maxDist.png -text svneol=unset#image/png
Polyline_simplification_2/doc_tex/Polyline_simplification_2/norway.png -text svneol=unset#image/png
Polyline_simplification_2/doc_tex/Polyline_simplification_2/platelet.png -text svneol=unset#image/png
Polyline_simplification_2/doc_tex/Polyline_simplification_2/scaledAndHybridMaxDist.png -text svneol=unset#image/png
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/Hybrid_squared_distance_cost.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/PolylineSimplificationCostFunction.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/PolylineSimplificationStopPredicate.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/Scaled_squared_distance_cost.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/Squared_distance_cost.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/Stop_above_cost_threshold.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/Stop_below_count_ratio_threshold.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/Stop_below_count_threshold.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/intro.tex -text
Polyline_simplification_2/doc_tex/Polyline_simplification_2_ref/main.tex -text
Polyline_simplification_2/examples/Polyline_simplification_2/Polyline_simplification_2_basic_example.cpp -text
Polyline_simplification_2/examples/Polyline_simplification_2/Polyline_simplification_2_example_from_original.cpp -text
Polyline_simplification_2/examples/Polyline_simplification_2/Polyline_simplification_2_example_with_visitor.cpp -text
Polyline_simplification_2/include/CGAL/Polyline_simplification_2/reference_manual_concepts/CostFunction_concept.h -text
Polyline_simplification_2/include/CGAL/Polyline_simplification_2/reference_manual_concepts/PolylineNode_concept.h -text
Polyline_simplification_2/include/CGAL/Polyline_simplification_2/reference_manual_concepts/StopPredicate_concept.h -text
Polyline_simplification_2/include/CGAL/Polyline_simplification_2/reference_manual_concepts/Vertex_concept.h -text
Polyline_simplification_2/include/CGAL/Polyline_simplification_2/reference_manual_concepts/Visitor_concept.h -text
Polyline_simplification_2/test/Polyline_simplification_2/data/bee.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/hole.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/large_2.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/large_3.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/large_4.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_G.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_P.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_T.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_c.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_d.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_q.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/letter_u.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/norway.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/rectangle.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/single_reflex.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/square.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/star.poly -text svneol=unset#application/octet-stream
Polyline_simplification_2/test/Polyline_simplification_2/data/triangle.poly -text svneol=unset#application/octet-stream
Polynomial/doc_tex/Polynomial/Polynomial.png -text
Polynomial/doc_tex/Polynomial_ref/PolynomialTraits_d_ConstructCoefficientConstIteratorRange.tex -text
Polynomial/doc_tex/Polynomial_ref/PolynomialTraits_d_ConstructInnermostCoefficientConstIteratorRange.tex -text

View File

@ -0,0 +1,71 @@
# Created by the script cgal_create_cmake_script
# This is the CMake script for compiling a CGAL application.
# ** DEVELOPMENT** CMakeLists.txt..
# It requires the env var $CGAL_SVN with the location of a svn working copy
# And $CGAL_DIR with the location of a CGAL installation
project (Polyline_simplification_2)
cmake_minimum_required(VERSION 2.4.5)
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
if ( COMMAND cmake_policy )
cmake_policy( SET CMP0003 NEW )
endif()
find_package(CGAL COMPONENTS Qt4)
include(${CGAL_USE_FILE})
set( QT_USE_QTXML TRUE )
set( QT_USE_QTMAIN TRUE )
set( QT_USE_QTSCRIPT TRUE )
set( QT_USE_QTOPENGL TRUE )
find_package(Qt4)
if ( NOT CGAL_SVN )
set( CGAL_SVN_env "$ENV{CGAL_SVN}" )
if ( NOT "${CGAL_SVN_env}" STREQUAL "" )
set( CGAL_SVN ${CGAL_SVN_env} CACHE FILEPATH "Location of the CGAL svn working copy" )
else()
set( CGAL_SVN "NOTFOUND" CACHE FILEPATH "Location of the CGAL svn working copy" )
endif()
endif()
include_directories (BEFORE ../../../../../trunk/GraphicsView/include)
# include_directories (BEFORE ${CGAL_SVN}/GraphicsView/include)
include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include)
include_directories (BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/../../include )
include_directories (BEFORE ${CMAKE_CURRENT_BINARY_DIR})
if ( CGAL_FOUND AND CGAL_Qt4_FOUND AND QT4_FOUND )
include(${QT_USE_FILE})
# UI files (Qt Designer files)
qt4_wrap_ui( CDT_UI_FILES Polyline_simplification_2.ui )
# qrc files (resources files, that contain icons, at least)
qt4_add_resources ( CDT_RESOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.qrc )
# use the Qt MOC preprocessor on classes that derives from QObject
qt4_generate_moc( ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.cpp Polyline_simplification_2.moc )
# The executable itself.
add_executable ( Polyline_simplification_2 ${CMAKE_CURRENT_SOURCE_DIR}/Polyline_simplification_2.cpp Polyline_simplification_2.moc ${CDT_UI_FILES} ${CDT_RESOURCE_FILES} )
# Link with Qt libraries
target_link_libraries( Polyline_simplification_2 ${QT_LIBRARIES} )
# Link with CGAL
target_link_libraries( Polyline_simplification_2 ${CGAL_LIBRARIES} ${CGAL_3RD_PARTY_LIBRARIES})
else()
message(STATUS "NOTICE: This demo requires CGAL and Qt4, and will not be compiled.")
endif()

View File

@ -0,0 +1,547 @@
//#define CGAL_USE_BOOST_BIMAP
#include <fstream>
#include <vector>
// CGAL headers
#include <CGAL/Bbox_2.h>
#include <CGAL/assertions_behaviour.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Timer.h>
//#define CGAL_TESTING_POLYLINE_SIMPLIFICATION
//#define CGAL_POLYLINE_SIMPLIFICATION_TRACE_LEVEL 15
bool lAppToLog = false ;
void Polyline_simplification_2_external_trace( std::string m )
{
std::ofstream out("polysim_log.txt", ( lAppToLog ? std::ios::app | std::ios::ate : std::ios::trunc | std::ios::ate ) );
out << std::setprecision(19) << m << std::endl << std::flush ;
lAppToLog = true ;
}
void error_handler ( char const* what, char const* expr, char const* file, int line, char const* msg )
{
std::cerr << "CGAL error: " << what << " violation!" << std::endl
<< "Expr: " << expr << std::endl
<< "File: " << file << std::endl
<< "Line: " << line << std::endl;
if ( msg != 0)
std::cerr << "Explanation:" << msg << std::endl;
throw std::runtime_error("CGAL Error");
}
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Polyline_constrained_triangulation_2.h>
#include <CGAL/Polyline_simplification_2/simplify.h>
// Qt headers
#include <QtGui>
#include <QString>
#include <QActionGroup>
#include <QFileDialog>
#include <QInputDialog>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QSlider>
#include <QProgressBar>
// GraphicsView items and event filters (input classes)
#include <CGAL/Qt/GraphicsViewPolylineInput.h>
#include <CGAL/Qt/Polyline_simplification_2_graphics_item.h>
#include <CGAL/Qt/Converter.h>
// the two base classes
#include "ui_Polyline_simplification_2.h"
#include <CGAL/Qt/DemosMainWindow.h>
// for viewportsBbox(QGraphicsScene*)
#include <CGAL/Qt/utility.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;
typedef K::Segment_2 Segment_2;
typedef K::Iso_rectangle_2 Iso_rectangle_2;
typedef CGAL::Triangulation_vertex_base_2<K> Vb;
typedef CGAL::Constrained_triangulation_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb> TDS;
typedef CGAL::Exact_predicates_tag Itag;
typedef CGAL::Constrained_Delaunay_triangulation_2<K,TDS, Itag> CDT;
typedef CGAL::Polyline_constrained_triangulation_2<CDT> PCT;
namespace PS2 = CGAL::Polyline_simplification_2 ;
enum Mode { ABS_P, ABS_E, REL_P, REL_E, MIXED_P, MIXED_E } ;
class MainWindow :
public CGAL::Qt::DemosMainWindow,
public Ui::Polyline_simplification_2
{
Q_OBJECT
private:
PCT m_pct;
QGraphicsScene mScene;
CGAL::Qt::PolylineSimplificationGraphicsItem<PCT> * mGI;
CGAL::Qt::GraphicsViewPolylineInput<K> * mPI;
private:
public:
MainWindow();
protected:
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
void loadPoly(QString);
void loadOSM (QString);
protected slots:
void open(QString);
public slots:
void processInput(CGAL::Object o);
void on_actionShowTriangulation_toggled(bool checked);
void on_actionInsertPolyline_toggled(bool checked);
void on_actionClear_triggered();
void on_actionRecenter_triggered();
void on_actionLoadConstraints_triggered();
void on_actionSimplify_triggered();
Mode getSimplificationMode() ;
double getThreshold() ;
signals:
void changed();
};
MainWindow::MainWindow()
: DemosMainWindow()
{
CGAL::set_error_handler (error_handler);
CGAL::set_warning_handler(error_handler);
setupUi(this);
setAcceptDrops(true);
// Add a GraphicItem for the PS triangulation
mGI = new CGAL::Qt::PolylineSimplificationGraphicsItem<PCT>(&m_pct);
QObject::connect(this, SIGNAL(changed()), mGI, SLOT(modelChanged()));
mGI->setVerticesPen(QPen(Qt::red, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
mGI->setFixedVerticesPen(QPen(Qt::blue, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
mGI->setZValue(-1);
mGI->setVisibleEdges(false);
mGI->setVisibleConstraints(true);
mScene.addItem(mGI);
// Setup input handlers. They get events before the mScene gets them
// and the input they generate is passed to the triangulation with
// the signal/slot mechanism
mPI = new CGAL::Qt::GraphicsViewPolylineInput<K>(this, &mScene, 0, true); // inputs polylines which are not closed
QObject::connect(mPI, SIGNAL(generate(CGAL::Object)), this, SLOT(processInput(CGAL::Object)));
//
// Manual handling of actions
//
QObject::connect(this->actionQuit, SIGNAL(triggered()), this, SLOT(close()));
// We put mutually exclusive actions in an QActionGroup
QActionGroup* ag = new QActionGroup(this);
ag->addAction(this->actionInsertPolyline);
this->actionShowTriangulation->setChecked(false);
//
// Setup the mScene and the view
//
mScene.setItemIndexMethod(QGraphicsScene::NoIndex);
mScene.setSceneRect(-100, -100, 100, 100);
this->graphicsView->setScene(&mScene);
this->graphicsView->setMouseTracking(true);
// Turn the vertical axis upside down
this->graphicsView->scale(1, -1);
// The navigation adds zooming and translation functionality to the
// QGraphicsView
this->addNavigation(this->graphicsView);
this->setupStatusBar();
this->setupOptionsMenu();
this->addAboutDemo(":/cgal/help/about_Polyline_simplification_2.html");
this->addAboutCGAL();
this->addRecentFiles(this->menuFile, this->actionQuit);
connect(this, SIGNAL(openRecentFile(QString)), this, SLOT(open(QString)));
// QObject::connect(thresholdSlider, SIGNAL(valueChanged(int)), this, SLOT(set_Threshold(int)));
}
void
MainWindow::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("text/uri-list"))
event->acceptProposedAction();
}
void
MainWindow::dropEvent(QDropEvent *event)
{
QString filename = event->mimeData()->urls().at(0).path();
open(filename);
event->acceptProposedAction();
}
void
MainWindow::processInput(CGAL::Object o)
{
std::list<Point_2> points;
if(CGAL::assign(points, o))
{
if(points.size() >= 2)
{
m_pct.insert_constraint(points.begin(), points.end());
emit(changed());
}
}
emit(changed());
}
/*
* Qt Automatic Connections
* http://doc.trolltech.com/4.4/designer-using-a-component.html#automatic-connections
*
* setupUi(this) generates connections to the slots named
* "on_<action_name>_<signal_name>"
*/
void
MainWindow::on_actionInsertPolyline_toggled(bool checked)
{
if(checked){
mScene.installEventFilter(mPI);
} else {
mScene.removeEventFilter(mPI);
}
}
void
MainWindow::on_actionShowTriangulation_toggled(bool checked)
{
mGI->setVisibleEdges(checked);
update();
}
void
MainWindow::on_actionClear_triggered()
{
m_pct.clear();
mGI->modelChanged();
emit(changed());
}
Mode MainWindow::getSimplificationMode()
{
bool lP = rbuttonPercentage->isChecked();
int lError = rbuttonAbsError ->isChecked() ? 0 : ( rbuttonRelError ->isChecked() ? 1 : 2 ) ;
return lP ? lError == 0 ? ABS_P : ( lError == 1 ? REL_P : MIXED_P )
: lError == 0 ? ABS_E : ( lError == 1 ? REL_E : MIXED_E ) ;
}
double MainWindow::getThreshold()
{
double lValue = this->textValue->text().toDouble() ;
return rbuttonPercentage->isChecked() ? lValue / 100.0
: rbuttonAbsError->isChecked() ? lValue * lValue
: lValue ;
}
void MainWindow::on_actionSimplify_triggered()
{
// wait cursor
QApplication::setOverrideCursor(Qt::WaitCursor);
PS2::mark_vertices_unremovable(m_pct);
try
{
switch( getSimplificationMode() )
{
case ABS_P : simplify(m_pct, PS2::Squared_distance_cost(), PS2::Stop_below_count_ratio_threshold(getThreshold()) ) ;
break ;
case ABS_E : simplify(m_pct, PS2::Squared_distance_cost(), PS2::Stop_above_cost_threshold(getThreshold()) ) ; break ;
case REL_P : simplify(m_pct, PS2::Scaled_squared_distance_cost(), PS2::Stop_below_count_ratio_threshold(getThreshold()) ) ; break ;
case REL_E : simplify(m_pct, PS2::Scaled_squared_distance_cost(), PS2::Stop_above_cost_threshold(getThreshold()) ) ; break ;
case MIXED_P : simplify(m_pct, PS2::Hybrid_squared_distance_cost<double>(1.0), PS2::Stop_below_count_ratio_threshold(getThreshold())) ; break ;
case MIXED_E : simplify(m_pct, PS2::Hybrid_squared_distance_cost<double>(1.0), PS2::Stop_above_cost_threshold(getThreshold())) ; break ;
break ;
}
statusBar()->showMessage(QString("Simplification done"));
}
catch(...)
{
statusBar()->showMessage(QString("Exception ocurred"));
}
// default cursor
QApplication::restoreOverrideCursor();
mGI->modelChanged();
emit(changed());
}
void
MainWindow::open(QString fileName)
{
if(! fileName.isEmpty()){
if(fileName.endsWith(".poly")){
loadPoly(fileName);
this->addToRecentFiles(fileName);
}
else if(fileName.endsWith(".osm")){
loadOSM(fileName);
this->addToRecentFiles(fileName);
}
}
}
void
MainWindow::on_actionLoadConstraints_triggered()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("Open Constraint File"),
"../data",
tr("Polylines (*.osm *.poly)")
);
open(fileName);
}
std::string trim_right ( std::string str )
{
if ( str.length() > 0 )
{
std::size_t pos = str.find_last_not_of( " " ) ;
if ( pos != std::string::npos )
return str.substr(0,pos+1);
}
return std::string("") ;
}
enum { POLYGON, POLYLINE, POINT } ;
void MainWindow::loadPoly(QString fileName)
{
m_pct.clear();
mGI->modelChanged();
std::ifstream ifs(qPrintable(fileName));
std::string line ;
std::vector<Point_2> poly ;
bool lIsClosed = true ;
while ( std::getline(ifs,line) )
{
line = trim_right(line);
if ( line.size() > 0 )
{
int lCode = POINT ;
if ( line == "POLYGON" )
{
lCode = POLYGON ;
lIsClosed = true ;
}
else if ( line == "POLYLINE" )
{
lCode = POLYLINE ;
lIsClosed = false ;
}
if ( lCode == POINT )
{
double x,y ;
std::istringstream ss(line);
ss >> x >> y ;
poly.push_back( Point_2(x,y) );
}
else
{
if ( poly.size() > 0 )
{
if ( lIsClosed )
{
if(poly.back() != poly.front()){
poly.push_back(poly.front());
}
m_pct.insert_constraint(poly.begin(), poly.end() ) ;
}
else
{
m_pct.insert_constraint(poly.begin(), poly.end() ) ;
}
}
poly.clear();
}
}
}
if ( poly.size() > 0 )
{
if ( lIsClosed )
{
if(poly.back() != poly.front()){
poly.push_back(poly.front());
}
m_pct.insert_constraint(poly.begin(), poly.end() ) ;
}
else
{
m_pct.insert_constraint(poly.begin(), poly.end() ) ;
}
}
emit(changed());
actionRecenter->trigger();
}
void MainWindow::loadOSM(QString fileName)
{
m_pct.clear();
mGI->modelChanged();
try
{
std::ifstream ifs(qPrintable(fileName));
std::string line ;
std::vector<Point_2> poly ;
bool lIsClosed = true ;
while ( std::getline(ifs,line) )
{
line = trim_right(line);
if ( line.size() > 0 )
{
if ( line.find(':') != std::string::npos )
{
if ( poly.size() > 0 )
{
if ( poly.front() == poly.back() && poly.size() >= 4 )
{
if ( is_simple_2(poly.begin(), poly.end() - 1) )
m_pct.insert_constraint(poly.begin(), poly.end() - 1 ) ;
}
else if ( poly.size() >= 2 )
{
if ( is_simple_2(poly.begin(), poly.end()) )
m_pct.insert_constraint(poly.begin(), poly.end() ) ;
}
}
poly.clear();
}
else
{
double x,y ;
std::string::size_type pos = line.find(',');
if ( pos != std::string::npos )
line[pos]= ' ' ;
std::istringstream ss(line);
ss >> x >> y ;
poly.push_back( Point_2(x,y) );
}
}
}
if ( poly.size() > 0 )
{
if ( poly.front() == poly.back() )
{
m_pct.insert_constraint(poly.begin(), poly.end() - 1 ) ;
}
else
{
m_pct.insert_constraint(poly.begin(), poly.end() ) ;
}
}
}
catch(...)
{
statusBar()->showMessage(QString("Exception ocurred"));
}
emit(changed());
actionRecenter->trigger();
}
void
MainWindow::on_actionRecenter_triggered()
{
this->graphicsView->setSceneRect(mGI->boundingRect());
this->graphicsView->fitInView(mGI->boundingRect(), Qt::KeepAspectRatio);
}
#include "Polyline_simplification_2.moc"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
app.setOrganizationDomain("geometryfactory.com");
app.setOrganizationName("GeometryFactory");
app.setApplicationName("Polyline_simplification_2 demo");
// Import resources from libCGALQt4.
// See http://doc.trolltech.com/4.4/qdir.html#Q_INIT_RESOURCE
Q_INIT_RESOURCE(File);
Q_INIT_RESOURCE(Triangulation_2);
Q_INIT_RESOURCE(Input);
Q_INIT_RESOURCE(CGAL);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}

View File

@ -0,0 +1,8 @@
<RCC>
<qresource prefix="/cgal/Actions" >
<file>icons/triangulation.png</file>
</qresource>
<qresource prefix="/cgal/help" lang="en" >
<file>about_Polyline_simplification_2.html</file>
</qresource>
</RCC>

View File

@ -0,0 +1,290 @@
<ui version="4.0" >
<author>GeometryFactory</author>
<class>Polyline_simplification_2</class>
<widget class="QMainWindow" name="Polyline_simplification_2" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>1000</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle" >
<string>CGAL Polyline Simplification</string>
</property>
<property name="windowIcon" >
<iconset resource="../resources/CGAL.qrc" >
<normaloff>:/cgal/logos/cgal_icon</normaloff>:/cgal/logos/cgal_icon</iconset>
</property>
<widget class="QStatusBar" name="statusbar" >
</widget>
<widget class="QToolBar" name="fileToolBar" >
<property name="windowTitle" >
<string>File Tools</string>
</property>
<attribute name="toolBarArea" >
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<bool>false</bool>
</attribute>
<addaction name="actionClear" />
<addaction name="actionLoadConstraints" />
</widget>
<widget class="QWidget" name="centralwidget" >
<layout class="QGridLayout" >
<item row="0" column="0" >
<widget class="QGraphicsView" name="graphicsView" >
<property name="focusPolicy" >
<enum>Qt::StrongFocus</enum>
</property>
<property name="verticalScrollBarPolicy" >
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy" >
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="transformationAnchor" >
<enum>QGraphicsView::NoAnchor</enum>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QToolBar" name="toolBar" >
<property name="windowTitle" >
<string>Visualization Tools</string>
</property>
<attribute name="toolBarArea" >
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<bool>false</bool>
</attribute>
<addaction name="separator" />
<addaction name="actionShowTriangulation" />
<addaction name="actionInsertPolyline" />
<addaction name="separator" />
<addaction name="actionSimplify" />
<addaction name="separator" />
<addaction name="actionRecenter" />
<widget class="QLabel" name="textCaption" >
<property name="text">
<string>Error or % value:</string>
</property>
</widget>
<addaction name="separator" />
<widget class="QLineEdit" name="textValue" >
<property name="text">
<string>50</string>
</property>
</widget>
</widget>
<widget class="QToolBar" name="StopCondToolBar" >
<attribute name="toolBarArea" >
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<bool>false</bool>
</attribute>
<widget class="QRadioButton" name="rbuttonPercentage" >
<property name="checked" >
<bool>true</bool>
</property>
<property name="text">
<string>Stop at %</string>
</property>
</widget>
<widget class="QRadioButton" name="rbuttonError" >
<property name="text">
<string>Stop at Error</string>
</property>
</widget>
</widget>
<widget class="QToolBar" name="ErrTypeToolBar" >
<attribute name="toolBarArea" >
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak" >
<bool>false</bool>
</attribute>
<widget class="QRadioButton" name="rbuttonAbsError" >
<property name="checked" >
<bool>true</bool>
</property>
<property name="text">
<string>Abs</string>
</property>
</widget>
<widget class="QRadioButton" name="rbuttonRelError" >
<property name="text">
<string>Rel</string>
</property>
</widget>
<widget class="QRadioButton" name="rbuttonHybrid" >
<property name="text">
<string>Mixed</string>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>800</width>
<height>19</height>
</rect>
</property>
<widget class="QMenu" name="menuFile" >
<property name="title" >
<string>&amp;File</string>
</property>
<addaction name="separator" />
<addaction name="actionClear" />
<addaction name="actionLoadConstraints" />
<addaction name="separator" />
<addaction name="actionQuit" />
</widget>
<widget class="QMenu" name="menuTools" >
<property name="title" >
<string>&amp;Tools</string>
</property>
<addaction name="actionShowTriangulation" />
<addaction name="actionInsertPolyline" />
<addaction name="separator" />
<addaction name="actionSimplify" />
<addaction name="separator" />
<addaction name="actionRecenter" />
</widget>
<addaction name="menuFile" />
<addaction name="menuEdit" />
<addaction name="menuTools" />
</widget>
<action name="actionAbout" >
<property name="text" >
<string>&amp;About</string>
</property>
</action>
<action name="actionAboutCGAL" >
<property name="text" >
<string>About &amp;CGAL</string>
</property>
</action>
<action name="actionQuit" >
<property name="text" >
<string>&amp;Quit</string>
</property>
<property name="shortcut" >
<string>Ctrl+Q</string>
</property>
</action>
<action name="actionInsertPolyline" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="checked" >
<bool>false</bool>
</property>
<property name="icon" >
<iconset resource="../icons/Input.qrc" >
<normaloff>:/cgal/Input/inputPolyline.png</normaloff>:/cgal/Input/inputPolyline.png</iconset>
</property>
<property name="text" >
<string>&amp;Insert Polyline</string>
</property>
<property name="toolTip" >
<string>Insert Point or Polyline</string>
</property>
<property name="statusTip" >
<string>Left: Insert vtx | Right: Final vtx | Del: Delete vtx</string>
</property>
</action>
<action name="actionClear" >
<property name="icon" >
<iconset resource="../icons/File.qrc" >
<normaloff>:/cgal/fileToolbar/fileNew.png</normaloff>:/cgal/fileToolbar/fileNew.png</iconset>
</property>
<property name="text" >
<string>&amp;Clear</string>
</property>
<property name="shortcut" >
<string>Ctrl+C</string>
</property>
</action>
<action name="actionShowTriangulation" >
<property name="checkable" >
<bool>true</bool>
</property>
<property name="icon" >
<iconset resource="Polyline_simplification_2.qrc" >
<normaloff>:/cgal/Actions/icons/triangulation.png</normaloff>:/cgal/Actions/icons/triangulation.png
</iconset>
</property>
<property name="text" >
<string>Show &amp;triangulation</string>
</property>
<property name="shortcut" >
<string>Ctrl+T</string>
</property>
</action>
<action name="actionLoadConstraints" >
<property name="icon" >
<iconset resource="../icons/File.qrc" >
<normaloff>:/cgal/fileToolbar/fileOpen.png</normaloff>:/cgal/fileToolbar/fileOpen.png</iconset>
</property>
<property name="text" >
<string>&amp;Load...</string>
</property>
<property name="shortcut" >
<string>Ctrl+L</string>
</property>
</action>
<action name="actionRecenter" >
<property name="icon" >
<iconset resource="../icons/Input.qrc" >
<normaloff>:/cgal/Input/zoom-best-fit</normaloff>:/cgal/Input/zoom-best-fit</iconset>
</property>
<property name="text" >
<string>Re&amp;center the viewport</string>
</property>
<property name="shortcut" >
<string>Ctrl+R</string>
</property>
</action>
<action name="actionSimplify" >
<property name="text" >
<string>Simplify polylines</string>
</property>
<property name="shortcut" >
<string>Ctrl+S</string>
</property>
</action>
</widget>
<resources>
<include location="Polyline_simplification_2.qrc" />
<include location="../icons/File.qrc" />
<include location="../resources/CGAL.qrc" />
<include location="../icons/Triangulation_2.qrc" />
<include location="../icons/Input.qrc" />
</resources>
<connections>
<connection>
<sender>thresholdSlider</sender>
<signal>valueChanged(int)</signal>
<receiver>MainWindow</receiver>
<slot>setThreshold(int)</slot>
</connection>
</connections>
<slots>
<slot>setThreshold(int)</slot>
</slots>
</ui>

View File

@ -0,0 +1,10 @@
<html>
<body>
<h2>Constrained Delaunay Triangulation</h2>
<p>Copyright &copy; 2008 GeometryFactory</p>
<p>This application illustrates the 2D Constrained Delaunay
of <a href="http://www.cgal.org/">CGAL</a>.</p>
<p>See also <a href="http://www.cgal.org/Pkg/Triangulation2">the online
manual</a>.</p>
</body>
</html>

View File

@ -0,0 +1,983 @@
POLYGON
355.500 113.000
347.000 104.800
338.100 97.200
328.800 90.300
319.100 84.000
309.100 78.300
298.900 73.300
288.400 68.900
277.800 65.100
267.000 62.000
256.200 59.400
245.300 57.500
234.400 56.200
223.600 55.400
212.700 55.300
202.000 55.700
191.500 56.600
181.000 58.100
170.800 60.200
160.800 62.700
151.000 65.800
141.600 69.400
132.400 73.400
123.500 77.900
115.000 82.900
106.800 88.200
99.000 94.000
91.600 100.200
84.700 106.700
78.100 113.500
72.100 120.700
66.400 128.200
61.300 135.900
56.600 143.900
52.400 152.200
48.700 160.600
45.500 169.200
42.800 177.900
40.600 186.700
38.900 195.600
37.700 204.600
37.000 213.600
36.800 222.600
37.200 231.500
38.000 240.400
39.300 249.100
41.100 257.700
43.300 266.100
46.000 274.300
49.200 282.200
52.800 289.800
56.800 297.100
61.200 304.000
66.000 310.500
71.900 319.100
78.300 327.300
85.000 335.000
92.100 342.300
99.600 349.000
107.300 355.300
115.400 361.100
123.700 366.400
132.300 371.100
141.100 375.400
150.000 379.100
159.200 382.300
168.400 384.900
177.800 387.100
187.300 388.700
196.800 389.800
206.400 390.400
216.000 390.500
225.600 390.200
235.100 389.300
244.600 388.000
253.900 386.200
263.200 383.900
272.300 381.300
281.300 378.200
290.100 374.800
298.600 371.000
306.900 366.900
315.000 362.400
322.800 357.700
330.200 352.700
337.400 347.500
344.100 342.100
350.500 336.500
342.700 331.600
335.100 326.500
327.500 321.300
320.000 316.000
312.600 310.600
305.300 305.000
298.100 299.300
291.000 293.500
286.600 303.100
281.400 312.000
275.400 320.000
268.900 327.200
261.800 333.500
254.300 338.900
246.500 343.400
238.400 346.900
230.100 349.600
221.800 351.200
213.400 352.000
205.100 351.700
197.000 350.600
189.000 348.500
181.400 345.600
174.000 341.700
167.000 337.000
160.400 331.500
154.300 325.300
148.800 318.200
143.800 310.500
139.400 302.200
135.600 293.300
132.400 283.900
130.000 274.000
128.200 263.700
127.200 253.200
127.000 242.400
127.400 231.400
128.700 220.400
130.700 209.500
133.400 198.700
136.900 188.100
141.200 177.900
146.200 168.200
152.000 159.000
159.400 149.600
167.100 141.100
175.000 133.600
183.200 126.900
191.600 121.100
200.100 116.200
208.800 112.200
217.600 109.100
226.500 106.700
235.300 105.200
244.200 104.600
253.000 104.700
261.700 105.700
270.300 107.400
278.800 110.000
287.100 113.300
295.100 117.300
303.000 122.200
310.500 127.700
317.700 134.000
324.500 141.000
330.200 134.900
336.200 129.100
342.400 123.500
348.900 118.100
POLYGON
197.100 305.000
197.100 67.900
197.300 54.000
197.500 48.800
197.700 44.600
198.100 41.500
198.500 39.400
200.000 35.000
202.200 31.400
205.100 28.700
208.100 27.100
211.900 25.800
216.700 24.800
222.400 24.200
222.400 17.000
135.700 0.000
135.700 32.600
131.900 28.100
128.200 23.900
124.500 20.100
121.000 16.700
117.600 13.700
114.300 11.000
111.100 8.700
108.000 6.800
103.900 4.700
99.500 3.000
95.000 1.700
90.400 0.800
85.500 0.200
80.500 0.000
75.000 0.200
69.600 0.700
64.400 1.600
59.400 2.900
54.500 4.500
49.900 6.500
45.300 8.800
41.000 11.500
36.800 14.600
32.800 18.000
29.000 21.800
25.300 25.900
21.800 30.400
18.400 35.300
15.900 39.400
13.500 43.700
11.400 48.100
9.400 52.700
7.600 57.400
6.000 62.200
4.600 67.200
3.400 72.300
2.300 77.500
1.500 82.800
0.800 88.300
0.400 93.900
0.100 99.700
0.000 105.600
0.100 111.100
0.300 116.500
0.700 121.800
1.300 127.000
2.000 132.100
2.900 137.100
3.900 142.000
5.100 146.900
6.400 151.600
7.900 156.200
9.600 160.700
11.400 165.200
13.800 170.300
16.300 175.200
19.000 179.800
21.900 184.200
24.900 188.300
28.100 192.100
31.500 195.700
35.100 199.100
38.800 202.100
42.700 205.000
47.100 207.800
51.600 210.300
56.200 212.400
60.900 214.300
65.600 215.700
70.400 216.900
75.300 217.700
80.300 218.200
85.300 218.400
91.100 218.200
96.500 217.500
101.800 216.300
106.700 214.700
111.400 212.700
115.200 210.500
119.200 207.900
123.200 204.800
127.300 201.200
131.500 197.200
135.700 192.600
135.700 262.100
135.500 268.400
135.200 273.700
134.900 277.900
134.400 281.100
133.800 283.200
130.500 288.800
125.900 292.700
122.700 294.000
118.300 295.000
112.800 295.600
106.100 295.800
106.100 305.000
POLYGON
132.400 171.200
129.000 176.600
125.400 181.200
121.600 185.300
117.700 188.800
113.700 191.600
109.500 193.800
105.100 195.300
100.700 196.300
96.100 196.600
91.000 196.100
86.500 194.600
82.700 192.200
79.500 189.000
76.700 185.100
74.000 180.200
71.600 174.600
69.400 168.200
68.500 164.900
67.700 161.300
67.000 157.400
66.300 153.200
65.800 148.700
65.300 144.000
64.900 138.900
64.600 133.500
64.400 127.800
64.300 121.800
64.300 109.100
64.400 103.000
64.600 97.200
65.200 86.500
65.700 81.500
66.200 76.900
66.800 72.500
67.500 68.400
68.200 64.500
69.000 61.000
70.000 57.700
72.000 51.800
74.200 46.400
76.700 41.600
79.400 37.400
82.400 33.700
85.500 30.600
89.300 28.300
93.900 26.900
99.300 26.400
103.600 26.800
107.800 27.900
112.000 29.800
116.100 32.500
120.100 35.800
124.100 40.000
128.000 44.800
131.900 50.500
135.700 56.900
135.700 165.300
POLYGON
115.300 0.000
115.300 112.700
107.000 112.700
99.500 112.600
91.800 112.000
84.000 111.100
75.900 109.800
67.700 108.200
59.300 106.200
50.700 103.800
41.900 101.100
32.800 98.000
23.600 94.600
14.100 90.900
4.400 86.800
0.000 94.400
4.600 101.300
9.700 108.100
15.200 114.500
21.100 120.700
27.400 126.700
34.200 132.400
41.400 137.800
49.000 143.000
57.000 148.000
65.400 152.600
74.300 157.100
83.600 161.300
93.300 165.200
103.400 168.900
114.000 172.300
112.800 181.200
111.100 189.800
108.800 198.300
106.000 206.600
102.700 214.800
98.900 222.700
94.500 230.400
89.600 237.900
84.200 245.200
78.300 252.300
71.900 259.200
65.000 265.900
57.500 272.300
49.600 278.600
41.100 284.700
32.100 290.500
22.700 296.100
12.700 301.500
12.700 304.000
115.300 375.000
115.300 415.500
114.600 425.000
112.600 433.500
109.400 441.000
105.100 447.500
99.600 453.000
93.000 457.300
85.500 460.400
77.100 462.300
67.800 463.000
60.500 462.700
52.300 461.800
43.400 460.400
33.800 458.500
23.400 456.000
23.400 464.900
31.100 471.200
38.800 476.900
46.700 481.900
54.500 486.300
62.500 490.000
70.400 493.000
78.300 495.400
86.300 497.100
94.100 498.100
102.000 498.500
111.800 498.000
121.200 496.500
130.100 494.000
138.400 490.700
146.100 486.400
153.100 481.300
159.400 475.300
165.000 468.600
169.800 461.100
173.700 452.800
176.700 443.800
178.800 434.100
179.900 423.700
209.000 441.500
209.000 498.500
223.600 498.500
223.600 452.200
290.700 499.100
299.600 493.000
308.200 486.900
316.400 480.900
324.200 475.000
331.700 469.100
338.800 463.200
345.600 457.400
352.000 451.600
358.000 445.700
363.600 439.900
368.800 434.100
373.700 428.300
378.100 422.500
383.500 414.500
387.900 406.500
391.500 398.500
394.300 390.400
396.400 382.200
398.000 373.900
399.100 365.400
399.700 356.700
400.100 347.800
400.300 338.700
400.300 155.200
307.800 77.900
297.700 82.300
288.100 86.400
278.700 90.100
269.800 93.500
261.200 96.500
253.000 99.100
245.100 101.300
237.600 103.000
230.400 104.300
223.600 105.100
223.600 0.000
215.600 0.300
207.500 0.500
199.300 0.800
191.000 1.000
165.300 1.300
151.800 1.100
143.900 0.900
135.100 0.600
125.600 0.300
POLYGON
115.300 359.100
68.400 327.500
115.300 288.800
POLYGON
209.000 17.700
209.000 426.900
182.400 409.200
182.400 17.700
POLYGON
233.200 175.400
242.600 173.400
252.000 171.200
261.200 169.000
270.200 166.600
279.200 164.000
288.000 161.300
296.600 158.500
305.200 155.400
313.600 152.200
321.800 148.700
330.000 145.000
330.000 227.400
323.100 232.900
316.000 237.500
308.700 241.200
301.000 244.100
293.000 246.100
284.500 247.300
275.500 247.600
267.500 247.300
259.700 246.400
252.100 244.800
244.700 242.600
237.500 239.700
230.400 236.100
223.600 231.800
223.600 177.300
POLYGON
328.700 352.700
326.700 362.900
324.000 372.700
320.500 381.900
316.300 390.500
311.500 398.600
306.000 406.000
300.000 412.900
293.400 419.000
286.300 424.500
278.600 429.300
270.600 433.300
262.100 436.600
253.200 439.000
243.900 440.700
234.300 441.500
223.600 435.800
223.600 342.700
228.600 337.500
234.700 333.000
241.900 329.100
250.000 326.000
258.800 323.700
268.200 322.200
278.000 321.800
287.100 322.200
295.900 323.600
304.100 325.700
311.800 328.700
318.700 332.500
324.800 336.900
330.000 342.000
POLYGON
230.300 249.200
237.400 252.700
244.800 255.600
252.500 257.900
260.500 259.600
268.800 260.600
277.400 260.900
284.300 260.600
291.300 259.700
298.600 258.100
306.000 255.900
313.700 253.000
321.700 249.400
330.000 245.100
330.000 323.700
323.300 319.600
316.500 316.200
309.300 313.400
301.800 311.200
294.000 309.700
285.900 308.800
277.400 308.400
268.600 308.700
260.300 309.600
252.200 311.000
244.600 313.000
237.200 315.700
230.300 319.000
223.600 323.000
223.600 245.100
POLYGON
259.300 501.200
268.500 495.800
277.700 490.800
286.800 486.200
295.900 481.900
305.000 478.000
314.000 474.500
323.000 471.400
332.000 468.600
341.000 466.200
350.000 464.200
358.900 462.600
367.900 461.300
376.800 460.400
385.700 459.800
394.600 459.600
401.200 459.700
408.300 460.000
415.800 460.400
423.800 461.100
432.400 462.100
441.500 463.400
443.800 459.600
335.700 373.500
346.800 370.300
357.500 366.900
367.700 363.200
377.400 359.100
386.600 354.700
395.300 350.000
403.500 345.000
411.300 339.600
418.500 334.000
425.200 328.000
431.400 321.700
437.100 315.100
442.300 308.200
447.100 301.000
451.300 293.400
455.000 285.500
458.300 277.300
461.000 268.800
463.200 260.000
465.000 250.800
466.200 241.400
467.000 231.600
467.200 221.500
467.000 213.300
466.300 205.100
465.100 196.800
463.400 188.500
461.300 180.200
458.800 171.800
455.800 163.500
452.400 155.200
448.500 146.900
444.200 138.700
439.500 130.600
434.300 122.500
428.800 114.600
422.800 106.800
416.500 99.200
409.700 91.700
402.500 84.300
395.000 77.200
387.100 70.300
380.100 64.700
373.000 59.300
365.500 54.100
357.900 49.100
350.100 44.300
342.000 39.700
333.800 35.400
325.400 31.200
316.800 27.400
308.100 23.700
299.200 20.300
290.200 17.200
281.100 14.300
271.900 11.600
262.600 9.200
253.200 7.100
243.700 5.200
234.200 3.700
224.600 2.400
215.000 1.300
205.300 0.600
195.600 0.100
186.000 0.000
175.300 0.300
164.800 1.000
154.500 2.300
144.500 4.100
134.700 6.400
125.100 9.100
115.800 12.300
106.800 15.900
98.100 20.000
89.700 24.500
81.600 29.400
73.800 34.800
66.300 40.500
59.200 46.600
52.400 53.000
46.000 59.800
40.000 67.000
34.300 74.500
29.100 82.300
24.200 90.400
19.700 98.800
15.700 107.500
12.100 116.500
9.000 125.700
6.300 135.200
4.000 144.900
2.300 154.900
1.000 165.000
0.300 175.400
0.000 186.000
0.200 194.600
0.700 203.300
1.500 211.900
2.700 220.500
4.200 229.000
6.100 237.500
8.200 246.000
10.700 254.400
13.600 262.800
16.700 271.100
20.200 279.300
24.000 287.500
28.100 295.600
32.500 303.700
37.300 311.700
42.400 319.600
47.700 327.400
53.400 335.100
59.400 342.800
65.700 350.300
72.300 357.800
79.300 365.100
86.500 372.400
94.000 379.500
101.800 386.600
109.900 393.500
118.400 400.300
127.100 407.000
136.100 413.500
POLYGON
249.500 212.400
258.200 207.900
266.800 203.900
275.300 200.400
283.700 197.400
292.000 194.900
300.300 193.000
308.500 191.600
316.800 190.800
325.100 190.500
333.400 190.800
341.700 191.700
350.100 193.300
358.500 195.500
366.900 198.300
375.400 201.800
384.000 206.000
392.700 210.800
401.400 216.200
399.600 225.500
396.900 234.500
393.400 242.900
389.100 250.900
384.100 258.400
378.300 265.300
371.800 271.600
364.700 277.300
357.000 282.300
348.700 286.700
339.900 290.400
330.600 293.300
320.900 295.400
310.700 296.700
300.100 297.100
292.400 296.800
284.500 296.100
276.200 294.700
267.600 292.800
258.700 290.400
249.500 287.300
POLYGON
259.000 36.500
268.300 37.300
277.500 38.500
286.500 40.200
295.300 42.300
303.900 45.000
312.200 48.100
320.400 51.600
328.400 55.700
336.100 60.100
343.600 65.100
350.800 70.400
357.800 76.300
364.500 82.500
371.000 89.200
377.100 96.400
383.000 103.900
388.600 111.900
380.900 115.900
373.100 119.400
365.300 122.400
357.300 124.800
349.200 126.800
341.100 128.200
332.800 129.000
324.300 129.300
316.900 129.100
309.300 128.400
301.600 127.300
293.500 125.800
285.300 123.900
276.800 121.700
268.000 119.000
258.900 116.000
249.500 112.600
249.500 36.300
POLYGON
231.300 279.000
223.100 276.400
215.200 273.200
207.400 269.300
199.600 264.600
199.600 206.400
199.400 196.400
198.700 187.300
197.000 179.000
193.900 171.500
189.000 164.800
185.900 161.600
181.900 157.700
177.200 153.300
171.600 148.200
165.200 142.500
158.000 136.200
141.100 121.600
131.400 113.300
121.000 104.300
128.300 96.000
135.700 88.200
143.200 81.000
150.800 74.300
158.500 68.100
166.300 62.500
174.200 57.400
182.100 52.800
190.100 48.800
198.200 45.400
206.400 42.500
214.600 40.100
222.900 38.300
231.300 37.000
POLYGON
116.600 363.400
111.100 357.500
106.100 351.100
101.400 344.300
97.100 337.000
93.200 329.300
89.700 321.200
86.600 312.700
83.900 303.800
81.600 294.500
79.700 284.800
78.200 274.600
77.200 264.100
76.600 253.200
76.400 241.900
76.500 231.200
77.100 220.800
78.000 210.600
79.300 200.800
80.900 191.300
82.900 182.100
85.200 173.200
87.900 164.700
90.900 156.500
94.300 148.600
98.000 141.200
102.100 134.000
106.400 127.300
111.100 121.000
115.600 124.500
118.800 129.200
120.800 135.200
121.900 142.700
122.400 151.700
122.500 162.500
122.500 368.900
POLYGON
249.500 130.000
258.200 133.100
266.800 135.900
275.300 138.300
283.600 140.400
291.900 142.100
300.000 143.400
308.200 144.400
316.300 145.000
324.300 145.200
333.800 144.900
343.100 144.100
352.000 142.800
360.800 141.000
369.300 138.600
377.700 135.600
385.900 132.000
393.900 127.800
397.200 135.000
399.900 142.400
402.100 150.000
403.800 157.900
405.000 166.000
405.700 174.300
406.000 182.900
405.900 188.200
405.700 193.500
405.200 198.800
395.200 194.000
385.500 189.800
376.000 186.000
366.800 182.800
357.900 180.200
349.200 178.100
340.900 176.600
332.800 175.700
325.100 175.400
317.200 175.600
309.200 176.300
301.100 177.400
292.900 179.000
284.500 181.000
276.000 183.500
267.300 186.400
258.500 189.700
249.500 193.500
POLYGON
320.500 386.300
199.600 434.700
199.600 288.800
POLYGON
260.600 37.500
182.500 37.500
182.500 82.500
176.600 73.700
170.100 65.800
163.000 58.600
155.500 52.200
147.500 46.700
139.200 41.900
130.600 38.000
121.800 34.800
112.900 32.400
103.800 30.800
94.800 30.000
85.800 30.000
76.900 30.800
68.100 32.300
59.600 34.600
51.500 37.700
43.600 41.600
36.300 46.200
29.400 51.600
23.100 57.800
17.400 64.700
12.500 72.400
8.300 80.900
4.900 90.100
2.400 100.100
0.900 110.800
0.400 122.300
0.400 328.700
78.500 328.700
78.500 160.200
77.900 145.600
78.800 132.700
81.000 121.400
84.400 111.700
88.800 103.600
94.100 97.000
100.100 91.800
106.700 88.000
113.800 85.700
121.300 84.600
128.800 84.900
136.400 86.300
143.900 89.000
151.200 92.900
158.000 97.800
164.300 103.900
169.900 110.900
174.600 119.000
178.400 128.000
181.100 137.900
182.500 148.600
182.500 328.700
260.600 328.700

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,350 @@
POLYGON
259.300 501.200
268.500 495.800
277.700 490.800
286.800 486.200
295.900 481.900
305.000 478.000
314.000 474.500
323.000 471.400
332.000 468.600
341.000 466.200
350.000 464.200
358.900 462.600
367.900 461.300
376.800 460.400
385.700 459.800
394.600 459.600
401.200 459.700
408.300 460.000
415.800 460.400
423.800 461.100
432.400 462.100
441.500 463.400
443.800 459.600
335.700 373.500
346.800 370.300
357.500 366.900
367.700 363.200
377.400 359.100
386.600 354.700
395.300 350.000
403.500 345.000
411.300 339.600
418.500 334.000
425.200 328.000
431.400 321.700
437.100 315.100
442.300 308.200
447.100 301.000
451.300 293.400
455.000 285.500
458.300 277.300
461.000 268.800
463.200 260.000
465.000 250.800
466.200 241.400
467.000 231.600
467.200 221.500
467.000 213.300
466.300 205.100
465.100 196.800
463.400 188.500
461.300 180.200
458.800 171.800
455.800 163.500
452.400 155.200
448.500 146.900
444.200 138.700
439.500 130.600
434.300 122.500
428.800 114.600
422.800 106.800
416.500 99.200
409.700 91.700
402.500 84.300
395.000 77.200
387.100 70.300
380.100 64.700
373.000 59.300
365.500 54.100
357.900 49.100
350.100 44.300
342.000 39.700
333.800 35.400
325.400 31.200
316.800 27.400
308.100 23.700
299.200 20.300
290.200 17.200
281.100 14.300
271.900 11.600
262.600 9.200
253.200 7.100
243.700 5.200
234.200 3.700
224.600 2.400
215.000 1.300
205.300 0.600
195.600 0.100
186.000 0.000
175.300 0.300
164.800 1.000
154.500 2.300
144.500 4.100
134.700 6.400
125.100 9.100
115.800 12.300
106.800 15.900
98.100 20.000
89.700 24.500
81.600 29.400
73.800 34.800
66.300 40.500
59.200 46.600
52.400 53.000
46.000 59.800
40.000 67.000
34.300 74.500
29.100 82.300
24.200 90.400
19.700 98.800
15.700 107.500
12.100 116.500
9.000 125.700
6.300 135.200
4.000 144.900
2.300 154.900
1.000 165.000
0.300 175.400
0.000 186.000
0.200 194.600
0.700 203.300
1.500 211.900
2.700 220.500
4.200 229.000
6.100 237.500
8.200 246.000
10.700 254.400
13.600 262.800
16.700 271.100
20.200 279.300
24.000 287.500
28.100 295.600
32.500 303.700
37.300 311.700
42.400 319.600
47.700 327.400
53.400 335.100
59.400 342.800
65.700 350.300
72.300 357.800
79.300 365.100
86.500 372.400
94.000 379.500
101.800 386.600
109.900 393.500
118.400 400.300
127.100 407.000
136.100 413.500
POLYGON
249.500 212.400
258.200 207.900
266.800 203.900
275.300 200.400
283.700 197.400
292.000 194.900
300.300 193.000
308.500 191.600
316.800 190.800
325.100 190.500
333.400 190.800
341.700 191.700
350.100 193.300
358.500 195.500
366.900 198.300
375.400 201.800
384.000 206.000
392.700 210.800
401.400 216.200
399.600 225.500
396.900 234.500
393.400 242.900
389.100 250.900
384.100 258.400
378.300 265.300
371.800 271.600
364.700 277.300
357.000 282.300
348.700 286.700
339.900 290.400
330.600 293.300
320.900 295.400
310.700 296.700
300.100 297.100
292.400 296.800
284.500 296.100
276.200 294.700
267.600 292.800
258.700 290.400
249.500 287.300
POLYGON
259.000 36.500
268.300 37.300
277.500 38.500
286.500 40.200
295.300 42.300
303.900 45.000
312.200 48.100
320.400 51.600
328.400 55.700
336.100 60.100
343.600 65.100
350.800 70.400
357.800 76.300
364.500 82.500
371.000 89.200
377.100 96.400
383.000 103.900
388.600 111.900
380.900 115.900
373.100 119.400
365.300 122.400
357.300 124.800
349.200 126.800
341.100 128.200
332.800 129.000
324.300 129.300
316.900 129.100
309.300 128.400
301.600 127.300
293.500 125.800
285.300 123.900
276.800 121.700
268.000 119.000
258.900 116.000
249.500 112.600
249.500 36.300
POLYGON
231.300 279.000
223.100 276.400
215.200 273.200
207.400 269.300
199.600 264.600
199.600 206.400
199.400 196.400
198.700 187.300
197.000 179.000
193.900 171.500
189.000 164.800
185.900 161.600
181.900 157.700
177.200 153.300
171.600 148.200
165.200 142.500
158.000 136.200
141.100 121.600
131.400 113.300
121.000 104.300
128.300 96.000
135.700 88.200
143.200 81.000
150.800 74.300
158.500 68.100
166.300 62.500
174.200 57.400
182.100 52.800
190.100 48.800
198.200 45.400
206.400 42.500
214.600 40.100
222.900 38.300
231.300 37.000
POLYGON
116.600 363.400
111.100 357.500
106.100 351.100
101.400 344.300
97.100 337.000
93.200 329.300
89.700 321.200
86.600 312.700
83.900 303.800
81.600 294.500
79.700 284.800
78.200 274.600
77.200 264.100
76.600 253.200
76.400 241.900
76.500 231.200
77.100 220.800
78.000 210.600
79.300 200.800
80.900 191.300
82.900 182.100
85.200 173.200
87.900 164.700
90.900 156.500
94.300 148.600
98.000 141.200
102.100 134.000
106.400 127.300
111.100 121.000
115.600 124.500
118.800 129.200
120.800 135.200
121.900 142.700
122.400 151.700
122.500 162.500
122.500 368.900
POLYGON
249.500 130.000
258.200 133.100
266.800 135.900
275.300 138.300
283.600 140.400
291.900 142.100
300.000 143.400
308.200 144.400
316.300 145.000
324.300 145.200
333.800 144.900
343.100 144.100
352.000 142.800
360.800 141.000
369.300 138.600
377.700 135.600
385.900 132.000
393.900 127.800
397.200 135.000
399.900 142.400
402.100 150.000
403.800 157.900
405.000 166.000
405.700 174.300
406.000 182.900
405.900 188.200
405.700 193.500
405.200 198.800
395.200 194.000
385.500 189.800
376.000 186.000
366.800 182.800
357.900 180.200
349.200 178.100
340.900 176.600
332.800 175.700
325.100 175.400
317.200 175.600
309.200 176.300
301.100 177.400
292.900 179.000
284.500 181.000
276.000 183.500
267.300 186.400
258.500 189.700
249.500 193.500
POLYGON
320.500 386.300
199.600 434.700
199.600 288.800

View File

@ -0,0 +1,243 @@
POLYGON
115.300 0.000
115.300 112.700
107.000 112.700
99.500 112.600
91.800 112.000
84.000 111.100
75.900 109.800
67.700 108.200
59.300 106.200
50.700 103.800
41.900 101.100
32.800 98.000
23.600 94.600
14.100 90.900
4.400 86.800
0.000 94.400
4.600 101.300
9.700 108.100
15.200 114.500
21.100 120.700
27.400 126.700
34.200 132.400
41.400 137.800
49.000 143.000
57.000 148.000
65.400 152.600
74.300 157.100
83.600 161.300
93.300 165.200
103.400 168.900
114.000 172.300
112.800 181.200
111.100 189.800
108.800 198.300
106.000 206.600
102.700 214.800
98.900 222.700
94.500 230.400
89.600 237.900
84.200 245.200
78.300 252.300
71.900 259.200
65.000 265.900
57.500 272.300
49.600 278.600
41.100 284.700
32.100 290.500
22.700 296.100
12.700 301.500
12.700 304.000
115.300 375.000
115.300 415.500
114.600 425.000
112.600 433.500
109.400 441.000
105.100 447.500
99.600 453.000
93.000 457.300
85.500 460.400
77.100 462.300
67.800 463.000
60.500 462.700
52.300 461.800
43.400 460.400
33.800 458.500
23.400 456.000
23.400 464.900
31.100 471.200
38.800 476.900
46.700 481.900
54.500 486.300
62.500 490.000
70.400 493.000
78.300 495.400
86.300 497.100
94.100 498.100
102.000 498.500
111.800 498.000
121.200 496.500
130.100 494.000
138.400 490.700
146.100 486.400
153.100 481.300
159.400 475.300
165.000 468.600
169.800 461.100
173.700 452.800
176.700 443.800
178.800 434.100
179.900 423.700
209.000 441.500
209.000 498.500
223.600 498.500
223.600 452.200
290.700 499.100
299.600 493.000
308.200 486.900
316.400 480.900
324.200 475.000
331.700 469.100
338.800 463.200
345.600 457.400
352.000 451.600
358.000 445.700
363.600 439.900
368.800 434.100
373.700 428.300
378.100 422.500
383.500 414.500
387.900 406.500
391.500 398.500
394.300 390.400
396.400 382.200
398.000 373.900
399.100 365.400
399.700 356.700
400.100 347.800
400.300 338.700
400.300 155.200
307.800 77.900
297.700 82.300
288.100 86.400
278.700 90.100
269.800 93.500
261.200 96.500
253.000 99.100
245.100 101.300
237.600 103.000
230.400 104.300
223.600 105.100
223.600 0.000
215.600 0.300
207.500 0.500
199.300 0.800
191.000 1.000
165.300 1.300
151.800 1.100
143.900 0.900
135.100 0.600
125.600 0.300
POLYGON
115.300 359.100
68.400 327.500
115.300 288.800
POLYGON
209.000 17.700
209.000 426.900
182.400 409.200
182.400 17.700
POLYGON
233.200 175.400
242.600 173.400
252.000 171.200
261.200 169.000
270.200 166.600
279.200 164.000
288.000 161.300
296.600 158.500
305.200 155.400
313.600 152.200
321.800 148.700
330.000 145.000
330.000 227.400
323.100 232.900
316.000 237.500
308.700 241.200
301.000 244.100
293.000 246.100
284.500 247.300
275.500 247.600
267.500 247.300
259.700 246.400
252.100 244.800
244.700 242.600
237.500 239.700
230.400 236.100
223.600 231.800
223.600 177.300
POLYGON
328.700 352.700
326.700 362.900
324.000 372.700
320.500 381.900
316.300 390.500
311.500 398.600
306.000 406.000
300.000 412.900
293.400 419.000
286.300 424.500
278.600 429.300
270.600 433.300
262.100 436.600
253.200 439.000
243.900 440.700
234.300 441.500
223.600 435.800
223.600 342.700
228.600 337.500
234.700 333.000
241.900 329.100
250.000 326.000
258.800 323.700
268.200 322.200
278.000 321.800
287.100 322.200
295.900 323.600
304.100 325.700
311.800 328.700
318.700 332.500
324.800 336.900
330.000 342.000
POLYGON
230.300 249.200
237.400 252.700
244.800 255.600
252.500 257.900
260.500 259.600
268.800 260.600
277.400 260.900
284.300 260.600
291.300 259.700
298.600 258.100
306.000 255.900
313.700 253.000
321.700 249.400
330.000 245.100
330.000 323.700
323.300 319.600
316.500 316.200
309.300 313.400
301.800 311.200
294.000 309.700
285.900 308.800
277.400 308.400
268.600 308.700
260.300 309.600
252.200 311.000
244.600 313.000
237.200 315.700
230.300 319.000
223.600 323.000
223.600 245.100

View File

@ -0,0 +1,75 @@
POLYGON
10175.200 1178.600
10255.100 1458.500
10238.900 1458.500
10230.900 1458.400
10223.400 1458.100
10216.300 1457.600
10209.600 1457.000
10203.400 1456.100
10197.600 1455.000
10192.300 1453.700
10187.400 1452.300
10182.900 1450.600
10178.900 1448.700
10174.700 1446.300
10170.600 1443.400
10166.600 1440.000
10162.700 1436.100
10158.800 1431.700
10155.000 1426.800
10151.300 1421.500
10147.700 1415.600
10144.100 1409.300
10136.700 1395.200
10126.100 1397.500
10136.000 1439.200
10146.100 1481.100
10421.900 1481.100
10409.800 1438.700
10398.000 1396.200
10386.100 1397.700
10386.900 1400.700
10387.200 1409.000
10387.000 1416.600
10386.400 1423.500
10385.200 1429.600
10383.600 1435.000
10381.500 1439.700
10378.900 1443.700
10375.900 1447.000
10372.900 1449.200
10369.400 1451.100
10365.300 1452.900
10360.600 1454.400
10355.400 1455.600
10349.500 1456.700
10343.100 1457.500
10336.100 1458.100
10328.500 1458.400
10320.300 1458.500
10306.200 1458.500
10231.700 1197.400
10229.300 1188.600
10227.600 1180.700
10226.600 1173.800
10226.200 1167.800
10226.500 1162.900
10227.500 1159.000
10230.500 1154.300
10235.300 1150.600
10242.200 1147.800
10250.900 1145.900
10271.400 1144.200
10268.000 1131.300
10117.300 1131.300
10120.700 1144.200
10133.300 1145.700
10140.300 1146.700
10146.700 1148.200
10152.300 1150.100
10157.200 1152.400
10161.400 1155.200
10165.800 1159.400
10169.500 1164.700
10172.700 1171.100

View File

@ -0,0 +1,158 @@
POLYGON
355.500 113.000
347.000 104.800
338.100 97.200
328.800 90.300
319.100 84.000
309.100 78.300
298.900 73.300
288.400 68.900
277.800 65.100
267.000 62.000
256.200 59.400
245.300 57.500
234.400 56.200
223.600 55.400
212.700 55.300
202.000 55.700
191.500 56.600
181.000 58.100
170.800 60.200
160.800 62.700
151.000 65.800
141.600 69.400
132.400 73.400
123.500 77.900
115.000 82.900
106.800 88.200
99.000 94.000
91.600 100.200
84.700 106.700
78.100 113.500
72.100 120.700
66.400 128.200
61.300 135.900
56.600 143.900
52.400 152.200
48.700 160.600
45.500 169.200
42.800 177.900
40.600 186.700
38.900 195.600
37.700 204.600
37.000 213.600
36.800 222.600
37.200 231.500
38.000 240.400
39.300 249.100
41.100 257.700
43.300 266.100
46.000 274.300
49.200 282.200
52.800 289.800
56.800 297.100
61.200 304.000
66.000 310.500
71.900 319.100
78.300 327.300
85.000 335.000
92.100 342.300
99.600 349.000
107.300 355.300
115.400 361.100
123.700 366.400
132.300 371.100
141.100 375.400
150.000 379.100
159.200 382.300
168.400 384.900
177.800 387.100
187.300 388.700
196.800 389.800
206.400 390.400
216.000 390.500
225.600 390.200
235.100 389.300
244.600 388.000
253.900 386.200
263.200 383.900
272.300 381.300
281.300 378.200
290.100 374.800
298.600 371.000
306.900 366.900
315.000 362.400
322.800 357.700
330.200 352.700
337.400 347.500
344.100 342.100
350.500 336.500
342.700 331.600
335.100 326.500
327.500 321.300
320.000 316.000
312.600 310.600
305.300 305.000
298.100 299.300
291.000 293.500
286.600 303.100
281.400 312.000
275.400 320.000
268.900 327.200
261.800 333.500
254.300 338.900
246.500 343.400
238.400 346.900
230.100 349.600
221.800 351.200
213.400 352.000
205.100 351.700
197.000 350.600
189.000 348.500
181.400 345.600
174.000 341.700
167.000 337.000
160.400 331.500
154.300 325.300
148.800 318.200
143.800 310.500
139.400 302.200
135.600 293.300
132.400 283.900
130.000 274.000
128.200 263.700
127.200 253.200
127.000 242.400
127.400 231.400
128.700 220.400
130.700 209.500
133.400 198.700
136.900 188.100
141.200 177.900
146.200 168.200
152.000 159.000
159.400 149.600
167.100 141.100
175.000 133.600
183.200 126.900
191.600 121.100
200.100 116.200
208.800 112.200
217.600 109.100
226.500 106.700
235.300 105.200
244.200 104.600
253.000 104.700
261.700 105.700
270.300 107.400
278.800 110.000
287.100 113.300
295.100 117.300
303.000 122.200
310.500 127.700
317.700 134.000
324.500 141.000
330.200 134.900
336.200 129.100
342.400 123.500
348.900 118.100

View File

@ -0,0 +1,174 @@
POLYGON
197.100 305.000
197.100 67.900
197.300 54.000
197.500 48.800
197.700 44.600
198.100 41.500
198.500 39.400
200.000 35.000
202.200 31.400
205.100 28.700
208.100 27.100
211.900 25.800
216.700 24.800
222.400 24.200
222.400 17.000
135.700 0.000
135.700 32.600
131.900 28.100
128.200 23.900
124.500 20.100
121.000 16.700
117.600 13.700
114.300 11.000
111.100 8.700
108.000 6.800
103.900 4.700
99.500 3.000
95.000 1.700
90.400 0.800
85.500 0.200
80.500 0.000
75.000 0.200
69.600 0.700
64.400 1.600
59.400 2.900
54.500 4.500
49.900 6.500
45.300 8.800
41.000 11.500
36.800 14.600
32.800 18.000
29.000 21.800
25.300 25.900
21.800 30.400
18.400 35.300
15.900 39.400
13.500 43.700
11.400 48.100
9.400 52.700
7.600 57.400
6.000 62.200
4.600 67.200
3.400 72.300
2.300 77.500
1.500 82.800
0.800 88.300
0.400 93.900
0.100 99.700
0.000 105.600
0.100 111.100
0.300 116.500
0.700 121.800
1.300 127.000
2.000 132.100
2.900 137.100
3.900 142.000
5.100 146.900
6.400 151.600
7.900 156.200
9.600 160.700
11.400 165.200
13.800 170.300
16.300 175.200
19.000 179.800
21.900 184.200
24.900 188.300
28.100 192.100
31.500 195.700
35.100 199.100
38.800 202.100
42.700 205.000
47.100 207.800
51.600 210.300
56.200 212.400
60.900 214.300
65.600 215.700
70.400 216.900
75.300 217.700
80.300 218.200
85.300 218.400
91.100 218.200
96.500 217.500
101.800 216.300
106.700 214.700
111.400 212.700
115.200 210.500
119.200 207.900
123.200 204.800
127.300 201.200
131.500 197.200
135.700 192.600
135.700 262.100
135.500 268.400
135.200 273.700
134.900 277.900
134.400 281.100
133.800 283.200
130.500 288.800
125.900 292.700
122.700 294.000
118.300 295.000
112.800 295.600
106.100 295.800
106.100 305.000
POLYGON
132.400 171.200
129.000 176.600
125.400 181.200
121.600 185.300
117.700 188.800
113.700 191.600
109.500 193.800
105.100 195.300
100.700 196.300
96.100 196.600
91.000 196.100
86.500 194.600
82.700 192.200
79.500 189.000
76.700 185.100
74.000 180.200
71.600 174.600
69.400 168.200
68.500 164.900
67.700 161.300
67.000 157.400
66.300 153.200
65.800 148.700
65.300 144.000
64.900 138.900
64.600 133.500
64.400 127.800
64.300 121.800
64.300 109.100
64.400 103.000
64.600 97.200
65.200 86.500
65.700 81.500
66.200 76.900
66.800 72.500
67.500 68.400
68.200 64.500
69.000 61.000
70.000 57.700
72.000 51.800
74.200 46.400
76.700 41.600
79.400 37.400
82.400 33.700
85.500 30.600
89.300 28.300
93.900 26.900
99.300 26.400
103.600 26.800
107.800 27.900
112.000 29.800
116.100 32.500
120.100 35.800
124.100 40.000
128.000 44.800
131.900 50.500
135.700 56.900
135.700 165.300

View File

@ -0,0 +1,118 @@
POLYGON
7321.400 504.900
7334.500 553.900
7303.900 553.900
7311.200 578.600
7341.700 578.600
7355.600 624.300
7345.400 614.900
7338.100 609.800
7330.100 606.200
7322.800 603.300
7315.600 601.800
7309.000 600.400
7302.500 599.600
7287.900 599.600
7278.500 600.400
7269.800 602.500
7266.100 603.300
7261.800 604.700
7255.200 608.300
7251.600 612.000
7248.700 615.600
7246.500 618.500
7244.300 622.100
7241.400 627.200
7239.200 634.500
7237.000 644.600
7235.600 657.700
7235.600 670.000
7236.300 681.700
7237.800 691.100
7246.500 717.200
7258.100 744.800
7266.100 757.900
7274.100 769.500
7283.600 778.900
7295.900 789.100
7309.000 797.800
7322.100 804.300
7335.200 810.200
7348.300 813.800
7357.700 815.200
7367.900 816.000
7382.500 816.000
7391.900 815.200
7401.400 812.300
7409.400 808.700
7418.100 802.200
7421.000 800.000
7425.400 794.900
7429.700 787.700
7431.900 782.600
7432.600 777.500
7433.400 767.300
7432.600 759.300
7431.900 752.100
7427.500 737.600
7380.300 578.600
7410.100 578.600
7403.500 551.700
7374.500 551.700
7361.400 504.500
POLYGON
7390.500 745.500
7391.200 751.400
7391.200 757.200
7390.500 761.500
7388.300 765.900
7386.100 768.800
7383.200 770.200
7380.300 771.700
7377.400 772.400
7373.000 773.900
7367.900 774.600
7357.700 774.600
7354.100 773.900
7349.700 773.100
7345.400 772.400
7339.600 771.000
7336.700 769.500
7333.000 767.300
7329.400 764.400
7322.800 760.100
7314.800 752.100
7310.500 746.300
7306.800 741.200
7303.900 735.400
7300.300 729.600
7297.400 723.800
7294.500 717.200
7291.600 712.200
7289.400 705.600
7287.200 699.800
7285.800 694.700
7282.900 688.200
7279.900 676.600
7278.500 669.300
7277.800 664.200
7277.800 658.400
7278.500 651.900
7279.900 648.300
7280.700 643.200
7282.100 639.600
7284.300 635.900
7287.200 632.300
7290.800 628.700
7293.800 627.200
7299.600 625.800
7304.700 625.000
7315.600 625.000
7319.900 626.500
7325.000 627.900
7330.100 630.100
7333.700 632.300
7339.600 636.700
7345.400 640.300
7354.100 649.000
7363.400 658.900

View File

@ -0,0 +1,57 @@
POLYGON
260.600 37.500
182.500 37.500
182.500 82.500
176.600 73.700
170.100 65.800
163.000 58.600
155.500 52.200
147.500 46.700
139.200 41.900
130.600 38.000
121.800 34.800
112.900 32.400
103.800 30.800
94.800 30.000
85.800 30.000
76.900 30.800
68.100 32.300
59.600 34.600
51.500 37.700
43.600 41.600
36.300 46.200
29.400 51.600
23.100 57.800
17.400 64.700
12.500 72.400
8.300 80.900
4.900 90.100
2.400 100.100
0.900 110.800
0.400 122.300
0.400 328.700
78.500 328.700
78.500 160.200
77.900 145.600
78.800 132.700
81.000 121.400
84.400 111.700
88.800 103.600
94.100 97.000
100.100 91.800
106.700 88.000
113.800 85.700
121.300 84.600
128.800 84.900
136.400 86.300
143.900 89.000
151.200 92.900
158.000 97.800
164.300 103.900
169.900 110.900
174.600 119.000
178.400 128.000
181.100 137.900
182.500 148.600
182.500 328.700
260.600 328.700

View File

@ -0,0 +1,332 @@
POLYGON
355.500 113.000
347.000 104.800
338.100 97.200
328.800 90.300
319.100 84.000
309.100 78.300
298.900 73.300
288.400 68.900
277.800 65.100
267.000 62.000
256.200 59.400
245.300 57.500
234.400 56.200
223.600 55.400
212.700 55.300
202.000 55.700
191.500 56.600
181.000 58.100
170.800 60.200
160.800 62.700
151.000 65.800
141.600 69.400
132.400 73.400
123.500 77.900
115.000 82.900
106.800 88.200
99.000 94.000
91.600 100.200
84.700 106.700
78.100 113.500
72.100 120.700
66.400 128.200
61.300 135.900
56.600 143.900
52.400 152.200
48.700 160.600
45.500 169.200
42.800 177.900
40.600 186.700
38.900 195.600
37.700 204.600
37.000 213.600
36.800 222.600
37.200 231.500
38.000 240.400
39.300 249.100
41.100 257.700
43.300 266.100
46.000 274.300
49.200 282.200
52.800 289.800
56.800 297.100
61.200 304.000
66.000 310.500
71.900 319.100
78.300 327.300
85.000 335.000
92.100 342.300
99.600 349.000
107.300 355.300
115.400 361.100
123.700 366.400
132.300 371.100
141.100 375.400
150.000 379.100
159.200 382.300
168.400 384.900
177.800 387.100
187.300 388.700
196.800 389.800
206.400 390.400
216.000 390.500
225.600 390.200
235.100 389.300
244.600 388.000
253.900 386.200
263.200 383.900
272.300 381.300
281.300 378.200
290.100 374.800
298.600 371.000
306.900 366.900
315.000 362.400
322.800 357.700
330.200 352.700
337.400 347.500
344.100 342.100
350.500 336.500
342.700 331.600
335.100 326.500
327.500 321.300
320.000 316.000
312.600 310.600
305.300 305.000
298.100 299.300
291.000 293.500
286.600 303.100
281.400 312.000
275.400 320.000
268.900 327.200
261.800 333.500
254.300 338.900
246.500 343.400
238.400 346.900
230.100 349.600
221.800 351.200
213.400 352.000
205.100 351.700
197.000 350.600
189.000 348.500
181.400 345.600
174.000 341.700
167.000 337.000
160.400 331.500
154.300 325.300
148.800 318.200
143.800 310.500
139.400 302.200
135.600 293.300
132.400 283.900
130.000 274.000
128.200 263.700
127.200 253.200
127.000 242.400
127.400 231.400
128.700 220.400
130.700 209.500
133.400 198.700
136.900 188.100
141.200 177.900
146.200 168.200
152.000 159.000
159.400 149.600
167.100 141.100
175.000 133.600
183.200 126.900
191.600 121.100
200.100 116.200
208.800 112.200
217.600 109.100
226.500 106.700
235.300 105.200
244.200 104.600
253.000 104.700
261.700 105.700
270.300 107.400
278.800 110.000
287.100 113.300
295.100 117.300
303.000 122.200
310.500 127.700
317.700 134.000
324.500 141.000
330.200 134.900
336.200 129.100
342.400 123.500
348.900 118.100
POLYGON
197.100 305.000
197.100 67.900
197.300 54.000
197.500 48.800
197.700 44.600
198.100 41.500
198.500 39.400
200.000 35.000
202.200 31.400
205.100 28.700
208.100 27.100
211.900 25.800
216.700 24.800
222.400 24.200
222.400 17.000
135.700 0.000
135.700 32.600
131.900 28.100
128.200 23.900
124.500 20.100
121.000 16.700
117.600 13.700
114.300 11.000
111.100 8.700
108.000 6.800
103.900 4.700
99.500 3.000
95.000 1.700
90.400 0.800
85.500 0.200
80.500 0.000
75.000 0.200
69.600 0.700
64.400 1.600
59.400 2.900
54.500 4.500
49.900 6.500
45.300 8.800
41.000 11.500
36.800 14.600
32.800 18.000
29.000 21.800
25.300 25.900
21.800 30.400
18.400 35.300
15.900 39.400
13.500 43.700
11.400 48.100
9.400 52.700
7.600 57.400
6.000 62.200
4.600 67.200
3.400 72.300
2.300 77.500
1.500 82.800
0.800 88.300
0.400 93.900
0.100 99.700
0.000 105.600
0.100 111.100
0.300 116.500
0.700 121.800
1.300 127.000
2.000 132.100
2.900 137.100
3.900 142.000
5.100 146.900
6.400 151.600
7.900 156.200
9.600 160.700
11.400 165.200
13.800 170.300
16.300 175.200
19.000 179.800
21.900 184.200
24.900 188.300
28.100 192.100
31.500 195.700
35.100 199.100
38.800 202.100
42.700 205.000
47.100 207.800
51.600 210.300
56.200 212.400
60.900 214.300
65.600 215.700
70.400 216.900
75.300 217.700
80.300 218.200
85.300 218.400
91.100 218.200
96.500 217.500
101.800 216.300
106.700 214.700
111.400 212.700
115.200 210.500
119.200 207.900
123.200 204.800
127.300 201.200
131.500 197.200
135.700 192.600
135.700 262.100
135.500 268.400
135.200 273.700
134.900 277.900
134.400 281.100
133.800 283.200
130.500 288.800
125.900 292.700
122.700 294.000
118.300 295.000
112.800 295.600
106.100 295.800
106.100 305.000
POLYGON
132.400 171.200
129.000 176.600
125.400 181.200
121.600 185.300
117.700 188.800
113.700 191.600
109.500 193.800
105.100 195.300
100.700 196.300
96.100 196.600
91.000 196.100
86.500 194.600
82.700 192.200
79.500 189.000
76.700 185.100
74.000 180.200
71.600 174.600
69.400 168.200
68.500 164.900
67.700 161.300
67.000 157.400
66.300 153.200
65.800 148.700
65.300 144.000
64.900 138.900
64.600 133.500
64.400 127.800
64.300 121.800
64.300 109.100
64.400 103.000
64.600 97.200
65.200 86.500
65.700 81.500
66.200 76.900
66.800 72.500
67.500 68.400
68.200 64.500
69.000 61.000
70.000 57.700
72.000 51.800
74.200 46.400
76.700 41.600
79.400 37.400
82.400 33.700
85.500 30.600
89.300 28.300
93.900 26.900
99.300 26.400
103.600 26.800
107.800 27.900
112.000 29.800
116.100 32.500
120.100 35.800
124.100 40.000
128.000 44.800
131.900 50.500
135.700 56.900
135.700 165.300

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,994 @@
POLYGON
142.528622059284 267.551290109461
142.102196751295 267.420185967987
141.749529509006 267.113055064981
141.577471850572 266.658760651653
141.692875294147 266.086165979212
142.131916029511 265.612058832949
142.278340367733 265.137320115869
142.218843473254 264.659066632097
142.040120510517 264.174415185755
141.671777038036 263.174385621851
141.655546857176 262.653241112535
141.866871265827 262.114165857141
142.434497265278 260.878669336145
142.644948987423 260.228667333429
142.759869007526 259.53216512472
142.249853758274 259.066325500315
141.621244816242 258.82417066366
140.27787437862 258.563170984095
139.469840882478 259.21368731529
138.855295328556 259.973622396295
138.383319912611 260.81505013973
138.002996830402 261.710044458216
137.313636450229 263.549028470819
136.902763543783 264.437165990179
136.379871754108 265.267165735071
136.418364795057 265.931673623329
136.370615182577 266.459297433203
136.25165368071 266.860692463522
136.076511053501 267.146514013117
135.617805479227 267.414057865446
135.114744572101 267.347171380823
134.687574444471 267.031096949881
134.456541208683 266.551076963251
134.541890977083 265.992353811567
135.063869862018 265.440169885462
134.789603738247 263.620169236963
134.846972895919 262.729410364931
135.029744533954 261.865417077845
135.334719402848 261.038642838304
135.758698253093 260.259541108911
136.298481835185 259.538565352266
136.950870899616 258.88616903097
136.456704614816 259.032862379854
136.023042349277 258.975027635401
135.262745289264 258.498290613001
134.521010546146 257.960991456812
134.110551176725 257.827454045122
133.648868946491 257.868163659876
131.771746067463 259.540917947596
131.013418344913 260.511077239817
130.784190772234 261.07742540509
130.694874195514 261.716170862024
130.095355777202 262.825296953028
129.623996166645 263.978671624964
128.757870106159 266.334167077845
128.466633049904 266.544768348043
128.103653339802 266.666153981989
127.319872288166 266.656795099085
126.977774111686 266.533808961218
126.721339611469 266.337123945063
126.589920370041 266.07061924011
126.622867969928 265.738174035852
127.182927785574 265.450063451832
127.536338953434 265.065872028177
127.732578037439 264.608298584526
127.82112160152 264.100041940515
127.873028425632 263.022274329966
127.935344813524 262.498161002701
128.087871937214 262.014159753626
128.509574560581 261.012352302378
129.059246448932 260.049916818445
130.272869495807 258.216170862024
129.391635088382 257.907841041391
128.419744877277 257.669541909998
127.461916593967 257.692056491678
127.020999966322 257.860738619869
126.622867969928 258.166167810266
124.611995129047 261.362794473474
123.676355151592 262.984404399698
122.898868946491 264.671172693079
122.211719242988 265.073309406345
121.712104229389 265.135779216593
121.393777934967 264.938163801735
121.250494388996 264.560044839685
121.27600762075 264.081004008358
121.464071659504 263.580622985666
121.80844053453 263.138483449524
122.302868275104 262.834167077845
122.189766077457 261.832194074696
122.181979565082 261.021435573404
122.282919077335 260.356762692039
122.495994953571 259.79304654867
123.272197155414 258.787968948191
123.842144159733 258.256349727219
124.537868885456 257.645171716516
123.748511819301 257.374903753107
122.896247295795 257.195293023889
122.020543841778 257.159872129267
121.160869984089 257.322173669641
120.386869324504 258.088989481037
119.718418864666 259.185653522318
118.521497158466 261.83279187948
117.904690219222 263.115398987835
117.21676209396 264.19211991102
116.413544936238 264.929021045273
115.954900518192 265.128184940373
115.450870899616 265.192168786829
115.166447786747 264.860210492914
115.035494236408 264.45353658468
115.103870777546 263.603164270227
115.627354351936 263.351257219618
115.963794617115 263.002400472467
116.161179868637 262.580770030325
116.267498402057 262.110541894739
116.398888496814 261.120996549433
116.519936649261 260.65003134281
116.741871265827 260.227172448938
117.68249836391 258.746419503992
118.752872852741 257.396163537805
118.087013749538 256.878038719004
117.316247372089 256.564664438074
116.494293002544 256.474790408914
115.674869923053 256.627166345423
114.843030652164 257.505357637709
114.159901945053 258.523809507196
112.940620331226 260.66729314596
112.254889479039 261.635223999327
111.41871329969 262.429213598078
110.357302820442 262.970711484259
109.718763164377 263.122229017024
108.995869068561 263.181167199915
109.045528045057 262.41154618532
109.332010833679 261.738698556726
109.782579278706 261.131522848909
110.324495224415 260.558917596643
111.391416994987 259.393012597864
111.770946508406 258.7375099209
111.950870899616 257.992171838587
112.334840206562 257.454123571222
112.82587185329 256.962295129602
113.96187248653 256.155166223352
112.279371170459 255.593667581385
111.447777358947 255.509416892832
110.485870747028 255.683166101282
109.948712555824 256.31251813442
109.536417631565 257.010728910273
108.905995754657 258.517165735071
108.233761457859 260.009354665583
107.769201008735 260.689755573576
107.158871082721 261.294173791712
106.588244347034 261.194913461512
106.091869739948 260.87216146261
106.650041489063 259.970709398096
106.873244671283 258.985538080042
106.984871296344 256.801162317102
107.596792666374 256.120214298075
108.285495666919 255.562543466394
109.715870289264 254.566161706751
109.036246208606 253.821662500208
108.226871876178 253.077163293665
107.088714210449 253.755198552912
106.104120163379 254.572917535608
105.708725651859 255.057421222036
105.398901431022 255.60476119787
105.190373962877 256.224242582624
105.09886970943 256.925170495813
104.89808408743 257.382904275959
104.625275163112 257.724856212442
103.914868740497 258.128915384119
103.070213107525 258.272349670237
102.193870930134 258.290160730188
102.207573322712 257.926836088007
102.435494808613 257.598292901819
102.71010389751 257.274436071222
102.863869099079 256.925170495813
102.9505883736 255.782791211908
103.298119930683 254.731166436975
103.925026087223 253.814541890924
104.849869160114 253.077163293665
106.069870380817 252.794416024988
106.585464386402 252.48682196409
106.935871509968 252.009170129602
106.525791151582 251.672740116423
106.100042848049 251.515244558161
105.22249546474 251.596290185755
103.509869007526 252.357162072962
102.911275712906 252.846228435343
102.408120064197 253.458669259851
101.622871784626 254.839171960657
101.872937647758 255.136575206821
101.959527162967 255.47541697294
101.737620739399 256.161164834803
101.147839693485 256.663913085764
100.774585930763 256.774005338257
100.380871204792 256.751159265345
100.088104514538 256.564915731256
99.9744943661077 256.266917779749
99.958870319782 255.55917318136
100.489122500776 255.143538489645
100.732511131225 254.659244611566
100.765994934498 253.591788842981
100.759738704322 253.062181725805
100.873916117607 252.571024968927
101.210351472853 252.145095959013
101.870869068561 251.811172082727
104.278870014606 250.296172693079
104.104886202274 250.019433334177
103.779495624958 249.793790414637
103.374791769443 249.689085796183
102.962868122516 249.77516134054
102.208858577667 250.200904115742
101.589228062092 250.737787082498
101.082449166237 251.36429481179
100.666994480549 252.058911874597
100.023948101459 253.566412284677
99.4878696483953 255.088164880579
98.9816197437627 255.389165475672
98.4198688549382 255.336165979212
98.1039165539129 255.06768377096
98.0694946331365 254.715293481653
98.2958683056218 254.020171716516
98.9904201162441 253.354261353319
99.3969011587484 252.537027910059
99.7856201214177 250.718543603723
99.98784263259 249.852268650835
100.341963557659 249.104622438257
100.957975192128 248.543092921083
101.398562617732 248.35321190924
101.945869831501 248.235168054407
101.701554922519 247.874419644182
101.673228649555 247.307608201807
101.827691702305 246.610389902895
102.131744770466 245.858420923059
102.552188543735 245.127357437914
103.055823711811 244.492855623072
103.60945096439 244.030571654146
104.179870991169 243.816161706751
104.821291951595 243.291337564295
105.528245357929 242.966292932337
106.250011710582 242.942182138269
106.935871509968 243.320159509485
106.428417114673 243.690194919413
105.818495182453 243.860166147058
105.190010933338 243.983637168711
104.62686958736 244.214171960657
103.983510164676 244.865406349008
103.260744480549 245.657544687097
103.010824499784 246.077361151283
102.910541204868 246.497493579691
103.016390679537 246.906305297916
103.384869007526 247.292159631555
103.708803465722 246.658101185863
104.11390170282 246.091728999918
105.119871048389 245.135419442957
106.307340113579 244.369983032053
107.580871967731 243.742171838587
108.428620247303 243.863162591761
108.806838361679 244.004006936853
109.070869831501 244.338164880579
108.634932903705 244.65714986593
108.136371044574 244.899539544886
107.108871845661 245.331161096399
105.874355880676 246.016150548761
105.115245727955 246.813541009729
104.732448069511 247.81924255163
104.62686958736 249.12916524679
105.026422647892 249.286486819094
105.310229448734 249.278479173487
105.502137689052 249.140064671343
105.625995068012 248.906165674036
105.764948038517 248.291603639429
105.917869953571 247.714171960657
106.734900741039 246.87446530134
107.630869297443 246.134790017908
108.619838265835 245.651053264444
109.153592480479 245.553882822102
109.715870289264 245.579162195032
109.955151168762 245.776885583704
110.250120071827 245.895667627161
110.470464198051 246.060947015589
110.485870747028 246.398162439173
109.150214342533 246.998321130579
108.524187026678 247.478201105898
107.965120701252 248.050166681116
107.50233566588 248.69338174135
107.165152220188 249.387010171717
106.982890663801 250.110215857332
106.984871296344 250.842162683313
107.28324547237 251.283044412439
107.439228920398 251.463591888254
107.655868915973 251.537170007532
108.361431269108 250.257667615717
109.318619160114 249.119914605921
110.462182669101 248.154286458795
111.726871876178 247.391158654993
112.044730572162 247.358228042429
112.313745884357 247.478669717615
112.620869068561 247.938170984095
112.518357662616 248.46957902581
112.271588472782 248.843323066538
111.915459899364 249.09955166251
111.48487034267 249.278413369959
110.53990188068 249.564630344217
110.095319775997 249.752282723492
109.715870289264 250.023162439173
109.457870749889 250.557148530786
109.309370426594 251.149539544886
109.070869831501 252.257171228235
109.683401553093 252.911874130075
110.414620308338 253.452294900721
111.224964229522 253.866902187174
112.074871448932 254.144164636438
112.236324196814 253.38570000202
112.29718324369 252.600445821588
112.366120247303 251.065913751429
112.498698210476 250.374808326071
112.779682485519 249.773258283441
113.27132307565 249.290349855726
114.035869984089 248.95516927511
114.926620869098 249.141662195032
115.275340227543 249.388567045038
115.500873951374 249.77516134054
115.345216302334 250.314134671991
115.001120953022 250.774169519251
114.596650866924 251.206452443903
114.259869007526 251.662170007532
113.930493740497 253.126666620081
113.787868885456 254.666167810266
114.407808808742 255.137154414957
115.100121883808 255.401044442957
116.617870716511 255.55917318136
116.552996067463 254.137775972193
116.844370274006 252.788287713831
117.4942449612 251.582989290064
117.954323617874 251.056999042337
118.504871754108 250.59416158468
118.987525658814 250.749370734846
119.334183631597 250.935227676933
119.678433565555 251.387505843943
119.655465124307 251.928237899845
119.383121876178 252.534665658777
118.561685232578 253.853575542276
118.248278973757 254.520541295116
118.156872181354 255.162170007532
118.198937488852 255.707615956371
118.527714042125 256.111358478372
119.063443942128 256.379631921356
119.726369289814 256.518670633142
120.436732186137 256.534708961552
121.114774732052 256.433981254404
121.680739028512 256.22272185952
122.054867176471 255.90716512472
122.273181347309 254.544834688013
122.405619053303 253.126536920374
122.561040846763 252.460472896402
122.84068146175 251.857304170435
123.293103544174 251.342659786051
123.966869739948 250.942168786829
124.242917684971 250.84708960325
124.500496296344 250.929292276209
124.884869007526 251.364165857141
124.676432995258 252.56772907049
124.27712097591 253.824916436975
124.146980492531 254.452525391882
124.138433842121 255.068227842157
124.307918636261 255.663586273497
124.71187248653 256.230163171595
125.925123600422 256.800792291468
126.593435673176 256.935120656794
127.268871693073 256.925170495813
127.53687633401 256.271852150267
127.505291728435 255.618511274164
127.001744656025 254.330417230432
126.758977128325 253.704991712873
126.675010232387 253.098198964899
126.864441437779 252.514702811544
127.441868214069 251.959167077845
128.177995113788 251.922290399378
128.528479365764 251.966617181604
128.85786858028 252.183166101282
128.98015409535 252.590843215292
128.939337877689 252.963586881464
128.599869160114 253.64154012472
128.302400259433 254.291558339899
128.314083812891 254.629383220976
128.509869007526 254.988174035852
128.869701264559 255.294798507994
129.167213110386 255.667810514276
129.68936958736 256.459292962854
129.971061227976 256.800911321943
130.304526476322 257.055213048761
130.718288837133 257.183772101705
131.240871815143 257.148162439173
133.226871876178 256.925170495813
132.851370243488 255.115415170496
132.727650551258 254.204914882486
132.82986870235 253.250167444055
133.091044349728 252.910889371937
133.300199536739 252.484823062723
133.689246563373 251.574918344324
133.932537419854 251.192376240795
134.250605849682 250.925638511484
134.675151361285 250.825353309219
135.237873463093 250.942168786829
135.508543638645 251.095620229547
135.579246906696 251.351539209192
135.510263590275 251.626020505732
135.361874012409 251.835158899134
134.872424913703 252.263231768911
134.588980464397 252.754713132685
134.473138136922 253.293888464277
134.486495403705 253.865043237513
134.747198609768 255.040433004206
135.063869862018 256.155166223352
135.361319033561 256.775079354351
135.785776524006 257.248227908914
136.30928119844 257.581595822876
136.903871921955 257.782167032068
138.194466976581 257.812855079477
138.834549037872 257.65693978936
139.4338726086 257.396163537805
138.868745235859 255.168416574305
138.812167672573 254.07291729719
139.085873035846 252.903167321985
139.044638542591 252.392777755564
139.046247868 251.752542093103
139.12185934013 251.503234669273
139.278670219837 251.364868953531
139.540176658092 251.385246023243
139.929874805866 251.612166955774
140.28958196765 251.907282724684
140.507293967663 252.227102353876
140.712247280536 252.900165155237
140.935764340816 253.549979284113
141.176681025086 253.840738072699
141.568874744831 254.095168664759
141.720872311054 256.062415674036
141.907216100155 257.055323198145
142.337871937214 257.992171838587
143.279169110714 258.384171321695
144.392497448383 258.575917795008
145.515013961254 258.488288238352
146.028829349337 258.314981504982
146.483875660358 258.042159631555
145.711528806148 257.068646028345
145.069121746479 256.006537988489
144.780341414867 254.851240709131
144.838463438807 254.237210228746
145.068874744831 253.598159387415
144.62053732401 253.264739796226
144.459684876857 252.851175620859
144.528801633177 252.423009857243
144.770371822773 252.045785501306
145.126879675446 251.785045548981
145.540809421001 251.706332996195
145.954645289241 251.875190838879
146.310871509968 252.357162072962
146.270370869098 253.089292123621
146.061870960651 253.74716146261
147.05221465057 254.618043020075
147.837621120868 255.668170526331
148.548402099071 256.788044050043
149.314869312702 257.868163659876
150.162512330471 258.175461604898
151.105496792255 258.240792825525
152.034417895733 258.064061477487
152.839870838581 257.645171716516
151.852308062969 256.818670585459
151.195121197162 255.78291852743
150.863809136806 254.579541995829
150.853870777546 253.250167444055
150.512499241291 253.061166360681
150.207874683796 252.779159143274
150.171656040607 252.433212831324
150.326124576984 252.15504415304
150.778873829303 251.662170007532
151.200938372074 251.829241409605
151.515952019153 252.092746808832
151.927248386799 252.819293573206
152.217606453357 253.662278249567
152.591869739948 254.442168786829
153.099512962757 255.30118449003
153.767748264728 256.099542215174
155.371876148639 257.570159509485
156.390905289112 257.400103166407
157.395872501789 257.157668664759
158.38209143108 257.077980592554
159.344875721393 257.396163537805
158.960578231273 256.033835246866
158.338998226581 254.746038034265
157.494105367122 253.542054488962
156.439869312702 252.431167199915
156.46501584178 252.139253213709
156.646278647838 251.903555467432
156.941025180875 251.730132177179
157.306622890888 251.625041559046
158.079841641842 251.644091203516
158.40219758278 251.78034789831
158.62487450069 252.009170129602
158.54236125773 252.482238456314
158.593090681492 252.870967223947
158.984871296344 253.467546060388
159.581403879581 253.943186595743
160.163875965534 254.442168786829
162.000873951374 257.322173669641
162.817122845112 257.433791711634
163.763874439655 257.471160486048
164.849997906147 257.747163369959
165.404544143139 257.830604389017
165.972874073444 257.744170739954
166.212240455805 257.1427897659
166.032310156284 256.555810287302
165.559786258398 255.978603705471
164.921371845661 255.406541421717
163.653683809696 254.259335353678
163.277816353498 253.674934372013
163.24287071651 253.077163293665
162.494248775898 252.474795892542
162.240077523647 252.113185956781
162.248875050007 251.612166955774
162.658563761173 251.318376555746
163.012576965748 251.219527318781
163.315707592426 251.282279386824
163.572748569904 251.473292901819
163.967733292041 252.106744840448
164.235874561725 252.853164270227
165.4554057402 253.414371087854
166.491374401508 254.287292077845
167.318092135845 255.374148919886
167.909870533405 256.577163293665
168.634591607509 256.87496359617
169.424373058735 256.853543832605
170.938869862018 256.403167321985
170.951590566097 255.731665447061
170.687373547016 255.069165780847
170.306906012951 254.434415176218
169.970875172077 253.846160486048
169.002249149738 253.061290338343
168.678670553623 252.551151349848
168.629871754108 251.959167077845
168.239928586541 251.888723507231
167.903574971615 251.701244428461
167.446996120868 251.118289544886
167.35445074564 250.794368639295
167.370854644237 250.496522023981
167.510047746955 250.26052714855
167.785869984089 250.12216146261
168.688621906696 250.289916589563
169.045873073993 250.541513040369
169.274876026569 250.942168786829
169.192808149515 251.253115430181
169.241967348514 251.443745687311
169.607122806965 251.587291314905
170.116654066501 251.619274213617
170.516872791706 251.786162927454
171.42362215942 252.665900304621
172.148871807514 253.703792169397
172.827622680126 254.788370206659
173.594875721393 255.808166101282
174.510047583042 256.121151759928
175.478750614582 256.096543863123
177.418873218952 255.73316915304
177.42771589583 255.235086336439
177.275671629368 254.792586400812
176.646000294147 254.017287805384
175.844015268741 253.293178632563
175.1838726086 252.506164148157
174.476498035846 252.415916040247
174.171512512623 252.306762292688
173.991871265827 252.009170129602
174.302623180805 251.450791909998
174.83687248653 251.11517293722
175.578072143851 251.025549366777
176.26965406364 251.223749711817
176.906344933568 251.646504595583
177.482871441303 252.230544641321
178.434338120876 253.629402711695
178.798731668053 254.31768198282
179.081867603718 254.914168908899
180.51237526363 254.615792825525
181.235690025745 254.431961372202
182.035877613483 254.318160608118
181.624607948719 253.218849017923
181.073746113239 252.226415231531
180.401948837696 251.336357429331
179.627872852741 250.544173791712
179.605296997486 250.234263017481
179.745750812946 249.982665613001
180.198871998249 249.700164392298
180.750604508577 249.826381101911
181.199843553959 250.098823621576
181.930624393879 250.895167901819
182.670780806003 251.714760854547
183.131739316641 252.016264214819
183.699879078327 252.183166101282
184.084246067463 252.726041391199
184.202042250095 253.017494037455
184.170872120319 253.325164392298
185.685871509968 253.250167444055
185.750922905414 252.813052732205
185.730164824186 252.436332091396
185.476765303074 251.831055476969
185.016763089357 251.368302508896
184.441248325763 250.982038095301
183.841311155019 250.606227144306
183.308041719852 250.174834564035
182.932530162988 249.621825262611
182.805866627155 248.881164148157
183.324567375837 248.508855357473
183.941387800632 248.516258313959
184.614293215929 248.812364950483
185.301248936115 249.306167199915
186.54917254871 250.522826268976
187.026071069895 251.063666954344
187.348881153522 251.438170984095
188.103248981891 251.646287515467
188.838871387897 251.612166955774
188.731433330236 250.958199605053
188.468933729587 250.412244632547
188.084841011224 249.947219773834
187.612623600422 249.53604276449
186.537688402591 248.766903236216
185.511875538288 247.888167932337
185.52449837154 247.329417779749
185.602856068073 247.106014325922
185.834873585163 246.994170739954
186.376623748003 247.007386699026
186.873923448978 247.122978284662
187.780500797687 247.558913781946
188.645264295994 248.097228124445
189.5588726086 248.533172204798
190.169998554645 249.315415933435
190.448889641224 249.6857302931
190.799869923053 249.949172571009
191.085573760925 249.308977588718
190.991483597217 248.759510829752
190.619681803642 248.272810980385
190.072250751911 247.820916726892
188.858830360828 246.909699752634
188.3970057649 246.394454404419
188.167881397663 245.80216939718
187.007627872883 245.389916971033
186.52734580463 245.030978515451
186.181873707233 244.51116903097
186.160422710834 244.279924198692
186.302965549885 244.143964126413
186.559837727009 244.098449215
186.881374744831 244.13853986532
187.519785313068 244.45617945463
187.737329868732 244.724049195354
187.820881275593 245.058166101282
188.068867115436 245.058166101282
188.093994526325 244.545545175379
188.180949119983 244.278967216318
188.416874317585 244.089171960657
188.734436420856 244.118274762934
189.021625904499 244.263537957971
189.229690937458 244.501618459528
189.309879688678 244.80917318136
189.269563732801 245.043443992441
189.336311010776 245.216930940454
189.688619999347 245.445537164514
190.16205611652 245.622959688013
190.551868824421 245.877166345423
191.659370808063 247.180543496912
192.562870411335 248.633163049524
192.938801637052 248.406994819348
193.171949712692 248.143950417345
193.266796974598 247.534010484522
192.961213318763 246.856898024385
192.368999866901 246.166167810266
191.603957740722 245.515374615496
190.779888061939 244.958073213404
190.010591952263 244.547818377321
189.409870533405 244.338164880579
189.667120365558 243.689410760706
190.129871754108 243.096160486048
190.799869923053 243.146163537805
191.781840233265 244.15039785177
192.807873157917 245.147788598841
193.680154709278 246.242866113489
193.996821848808 246.859703138178
194.200870899616 247.540160730188
194.564129261432 247.37578923971
194.796879200397 247.044173791712
194.737574575601 246.223557337826
194.41095366901 245.600825145548
193.901075301824 245.113140746658
193.291998295246 244.697667672937
192.667781470476 244.291569456165
192.112483648716 243.832009628122
191.710163651167 243.256151720589
191.54488029903 242.501159265345
191.800878672062 242.576400115793
192.010378269611 242.547292306726
192.285129217563 242.699868038004
192.48189586228 242.933672293728
192.736881641803 243.320159509485
193.698282627521 243.978118970697
194.604374317585 244.928294732874
195.277967838703 246.030156209772
195.472206263004 246.594053283041
195.541874317585 247.143172815149
195.572453169285 247.09313972265
195.731001285969 247.059417321985
195.774400346172 247.071406071589
195.977004675327 247.29952509672
197.174879459797 248.038537576502
197.244438985716 248.080712723111
197.463313726841 248.254011943643
197.704878239094 248.449918344324
197.764942316471 248.594449355905
197.850880054889 248.95516927511
197.922702429949 249.171430572575
198.066795496402 249.591587856119
198.426996616779 250.742791726892
198.570706127344 251.323438986843
198.641889242588 251.807183578318
198.604346690832 252.118825837677
198.421879200397 252.183166101282
198.001622466503 251.940796985929
197.824517635761 251.594950750177
197.776249317585 250.643920495813
197.693328647075 250.064283266371
197.430045513569 249.432262494867
196.880521325527 248.760631575888
195.938877491413 248.062163904016
195.21887627071 248.062163904016
195.906389204918 248.655477598017
196.492733864246 249.328290536707
196.969742385803 250.066915586298
197.329246906696 250.857665613001
197.563079564033 251.686853483026
197.663072494922 252.540792062586
197.621057836471 253.40579421789
197.428867725788 254.268172815149
196.764150856195 253.59375093848
196.32404628223 252.69385988981
195.722002415119 250.702920511072
195.362227318941 249.854497298305
194.831392912327 249.265855148142
194.470916623382 249.106862146115
194.03058129376 249.058306619232
193.498022185771 249.135352637326
192.860874561725 249.353164270227
193.557114301382 249.653296723669
194.042532591282 250.101788595026
194.369184492288 250.663155689543
194.589125065265 251.301913812464
194.917092470585 252.669666364496
195.129229424654 253.327692404097
195.442875294147 253.921172693079
195.420877842365 254.920167520349
195.306192068516 255.401385143106
195.04488029903 255.808166101282
194.630868313966 255.366066708868
194.39022269672 254.84161956579
194.182375339924 253.663291528528
193.928027777134 252.508400991266
193.629256902395 252.013250723188
193.133869556843 251.612166955774
192.307993320881 250.854920938318
191.79975810474 250.662671401804
191.221866993366 250.768172815149
190.921475229917 251.187075093096
190.903540281711 251.560403421228
191.096800683199 251.902958586519
191.42999496883 252.22954137594
192.231139330326 252.893992975061
192.556566475092 253.261463358705
192.736881641803 253.672164514368
193.030611125885 254.221695854967
193.096060661731 254.798789575403
192.894619373737 255.978663995569
192.803978292404 256.55294461519
192.837556747852 257.097787454431
193.083479611335 257.598942473238
193.629871754108 258.042159631555
193.825622944294 258.824292733972
193.863871960102 259.194588973825
193.629871754108 259.53216512472
193.128486303745 259.272023275202
192.764254002033 258.849040582483
192.140873341022 257.868163659876
191.858859716116 257.236263170546
191.742701200901 256.582460477655
191.693746952472 255.289538934534
191.603849945722 254.690615310972
191.36560550159 254.150179937189
190.900462983309 253.688330426519
190.129871754108 253.325164392298
189.534089950977 252.986663177317
188.770122913776 252.70666272909
188.009531883655 252.661412074869
187.684115259109 252.781895741527
187.423878101764 253.027160241907
187.985561518131 254.643897130793
188.754621891437 256.186290338343
189.416808752475 257.775369718378
189.609621344267 258.625238552397
189.657871632038 259.53216512472
189.931126026569 260.133918359583
189.905872730671 260.773162439173
189.606054308025 261.033577825581
189.354146419225 261.173382207458
188.977861074863 261.144027068918
188.744614360986 260.790835246151
188.622003940998 260.219544961756
188.579082636295 258.845621898477
188.593967078386 258.254465564793
188.589878467975 257.868163659876
187.544744877277 255.97228772909
186.405872730671 254.095168664759
186.042839257179 254.30370391876
185.610218910633 254.358325078791
184.677124409137 254.265418603723
184.247103659569 254.247687712019
183.888402847706 254.335636213129
183.636248676239 254.59416247875
183.525867847858 255.088164880579
184.153951494156 255.721615537708
184.585101990162 256.422261073893
184.845792023597 257.178171917503
184.962494282184 257.977418496912
184.869826225696 259.658200576609
184.518879322468 261.369170739954
184.764768986164 261.777758434122
185.126999287067 262.107411935633
185.377666859089 262.465192153757
185.389944819866 262.688086315697
185.288868336139 262.958159997766
184.52162399715 263.252666070764
184.118590502201 263.219450071161
183.773868946491 263.007171228235
183.363065598665 262.359424903696
183.242933420597 261.716964319055
183.510370640217 260.431541040247
183.847556738315 259.118182733362
183.814610658346 258.440803363626
183.525867847858 257.744170739954
182.96124496883 256.884542062586
182.284870533405 256.081161096399
181.335290102421 256.105054214304
180.388243107258 255.994042947596
179.501761106907 256.032093837564
179.09936684197 256.195757135456
178.733875660358 256.503173425501
179.21279707378 257.15484563977
179.524374393879 257.853686645334
179.68520155376 258.586301669186
179.71187248653 259.339295938318
179.429121403156 260.852843120401
178.8088726086 262.287170007532
178.525298057256 262.62677670986
178.560590414463 262.969278409784
179.094370274006 263.628043725794
179.346154986082 263.926845803564
179.423401026188 264.193619802301
179.202756999193 264.419634952848
178.560871509968 264.596160486048
178.035511760174 264.563493802851
177.561246303974 264.37004049093
177.17079308456 264.041398122614
176.896870045124 263.603164270227
176.941793112217 261.976012304132
176.791246799885 260.416171624964
176.631513742862 258.87957961828
176.648876575885 257.322173669641
175.749484686313 257.454337671106
174.74049988216 257.523788049524
173.698702005802 257.597930505579
172.700870899616 257.744170739954
173.172788111625 258.562743052547
173.304826168476 259.424123599832
173.211043683944 260.310558482712
173.005499271808 261.204293802088
172.802251545845 262.087575658863
172.715359119831 262.94265015394
172.858880607544 263.751763388222
173.34687462276 264.49716146261
173.357450990139 264.881884172266
173.265746502338 265.192168786829
173.053105143963 265.390701844995
172.700870899616 265.440169885462
172.176987407861 265.247643366163
171.842232374607 264.914902761286
171.65295356339 264.473951831167
171.565498737751 263.956794336145
171.521452097355 262.821874692743
171.360874561725 261.766173913782
171.15526419705 261.243981525009
171.061685232578 260.694203689402
170.997621921955 259.578172281092
170.920637784658 259.045059010094
170.742685465275 258.55064089567
170.410515068231 258.111488088673
169.870876697956 257.744170739954
169.146780995784 257.629702403849
168.452872662006 257.741170480555
167.828714637218 258.034138992136
167.313869862018 258.464171960657
167.652372745929 259.900922372644
167.708465723453 260.695046737497
167.561870960651 261.468169763391
165.898876575885 264.596160486048
166.333123592792 265.586164071863
166.526905087887 266.066257789438
166.543873218952 266.558166101282
166.284463701902 266.821791156834
165.98921790546 266.907291248148
165.358623890339 266.68566663534
164.786904005466 266.176792457407
164.408871082721 265.664168908899
164.336720092354 265.278974070852
164.39434197372 264.965919568842
164.756873516498 264.472419336145
165.212404040752 264.016043737238
165.386274648963 263.749395027464
165.476871876178 263.429168298548
164.871872333942 261.384542062586
164.691340832172 260.270026042765
164.731869129596 259.060165002649
163.022122768818 258.476790979212
162.110060243068 258.382776334589
161.181873707233 258.563170984095
160.829952417074 258.927526190584
160.610124735294 259.312201097315
160.443375019489 260.140166833704
160.434874205051 261.042381837671
160.337871937214 262.014159753626
158.872875599323 265.093169763391
159.290068848191 265.03528051049
159.603247193752 265.196884467905
159.808801187335 265.519505008762
159.903121380268 265.944665506189
159.88259832388 266.413889333313
159.7436225695 266.86869986326
159.482584668456 267.250620469158
159.095875172077 267.501174524134
158.660744659735 267.307568020826
158.317081911622 267.05679465801
157.865030793606 266.408766820734
157.661463989077 265.607129946058
157.628123669086 264.701922967737
157.759091166912 262.780954435175
157.766883326827 261.865270748442
157.631870655475 261.046172693079
158.025495914875 259.593917444055
158.312074570118 258.909507825678
158.698871998249 258.290160730188
158.000340132175 258.064226463144
157.206371693073 258.101167276209
155.545872120319 258.563170984095
155.345503358303 258.863169058865
155.0881694836 259.053105190103
154.453747181354 259.202916696375
153.744886784015 259.212855651682
153.063869862018 259.283172204798
152.859058080373 260.261898621624
152.524496225773 261.182746723001
151.691872028766 262.935792520349
151.017496733127 264.71227867872
150.880746005235 265.662427231377
150.952869800983 266.682174279993
150.930521501361 267.001462861603
150.794137744365 267.248435333078
150.294248012958 267.503541543787
149.683168916164 267.403712108438
149.407798452435 267.207015022343
149.190868763385 266.905166223352
149.185464171825 266.52893002302
149.280372051655 266.203790262049
149.537868885456 265.614165857141
149.565997509418 262.386787011927
149.799857406078 260.880302980249
150.054301036654 260.182368471926
150.431873707233 259.53216512472
150.003790183125 259.241331919735
149.497764615474 259.049732044046
148.340247539936 258.914170816248
147.1360428614 259.025358512705
146.061870960651 259.283172204798
145.276723532139 259.940378203695
144.751309780536 260.700277402704
144.410301832615 261.532904520338
144.178371815143 262.40829427511
143.740434078632 264.167500570124
143.383770613132 264.991386547392
142.834873585163 265.738174035852
143.059286611287 266.207230668222
143.181931195913 266.599809452598
143.175340799747 267.169965102976
142.921953914819 267.477504238193

View File

@ -0,0 +1,642 @@
POLYGON
134.736468231438 354.909490555232
134.616513168572 354.396959811156
134.337839996575 353.944991558497
133.909729873894 353.726273208564
133.642536318062 353.758347563153
133.341463958977 353.913492172664
132.697050368546 354.325671970551
132.004227554558 354.521992414897
130.522337829827 354.523742645686
128.99376193261 354.432117670482
128.242581403015 354.511719107335
127.516467010735 354.760492294734
125.549338257073 354.940866917079
124.603133117913 354.809288650458
124.155654942749 354.600325546866
123.731463348625 354.262491196101
124.425782943277 353.153720496861
125.248209064959 352.227169058924
126.184441896288 351.46897799213
127.220181619881 350.865288406318
128.341128418354 350.402241411326
129.532982474325 350.065978116994
130.78144397041 349.842639633162
132.072213089226 349.718367069667
134.723474925516 349.711584143048
137.37236944413 349.93475821585
139.904498106001 350.277018166786
142.205462372063 350.627492874568
142.787519401072 350.658617444044
143.174740946053 350.484992056792
143.400947338103 350.153866730338
143.499958908318 349.712491482203
143.451678907631 348.687991290992
143.300463592766 347.789491623347
142.949247067927 346.910989165013
142.441680109261 346.130537718242
141.812754636763 345.429469287103
141.097462570427 344.789115875667
139.54774633622 343.615882128184
138.072466766594 342.461492508357
135.705545818566 343.662773161834
133.329340851067 344.975991695826
132.111536478756 345.476237810855
130.859946644066 345.76646056742
129.564083194493 345.767324022656
128.213457977532 345.399492233699
127.570575242995 345.502064436381
126.917133009194 345.753382652705
125.611336624382 346.363866775935
124.975365763663 346.55383750767
124.361601984261 346.554163902705
123.778236931322 346.280248373454
123.233462249993 345.647493332332
122.561512565373 345.583762243097
121.890067493675 345.678773492282
120.551081573723 346.046241730159
119.884735917805 346.169308080976
119.221285259484 346.152335494464
118.561327194927 345.920628651684
117.905459320305 345.399492233699
115.913454925774 345.996492355769
115.79042542739 345.440820270856
115.517208149789 344.893915399616
114.647710358856 343.824069350665
112.508962547539 341.763866394465
111.74971293485 340.764157697266
111.559181790931 340.269855839839
111.537213122605 339.778476327365
111.715681955351 339.289434672972
112.126463314651 338.802146389788
112.801432225986 338.31602699094
113.772463714836 337.830491989558
115.940058147667 337.991304367488
118.079714691399 337.886241882747
120.144744312523 337.417054146235
121.134683704136 337.015210061973
122.088457977532 336.485490768855
123.356441503523 336.61404316098
124.521194135903 336.505724757617
125.600798076151 336.203695609873
126.613335525749 335.751115768855
128.509539758919 334.566944211429
130.354464447258 333.298490494197
130.62741676545 332.495709865992
130.746338760613 331.5809917149
130.669323599098 330.666273563807
130.354464447258 329.863492935603
129.567917978523 329.425930112307
128.69258967614 329.203242271846
127.826448118447 328.924680083697
127.427437549589 328.679836943453
127.067461883782 328.319494217341
127.516467010735 326.32748982281
126.60335675454 326.248816579287
125.704588806389 326.03486344189
124.890009319542 325.606223433917
124.229464447258 324.883489578669
124.280025160073 324.522789209788
124.419261848686 324.220506637996
124.889090454338 323.763116806453
126.071459686516 323.24049183697
128.045588171242 322.72757002682
130.061715042351 322.200866669124
131.005254274367 321.811204045718
131.862964784859 321.272724598353
132.602737134455 320.536971181338
133.192461883782 319.555486648982
133.097791349648 318.915316790049
132.918839370964 318.354364365046
132.590447580574 317.895973890727
132.047457611321 317.563489883845
131.321379011629 317.762583940928
130.693444406746 318.138490646785
129.61983576989 319.212991684382
128.602288877724 320.371492355769
128.044431453703 320.852398603862
127.416460907219 321.198492020076
126.08184299445 321.365844979589
124.740147983788 321.398444026416
122.100962555168 321.37911507458
120.836190080403 321.487054422205
119.629776394127 321.779974549716
118.498080467938 322.337809130257
117.45746127343 323.24049183697
116.706987016035 323.172709356701
116.051539948343 322.94990545482
115.476459931715 322.599144581412
114.967086827515 322.147491186564
114.086820801852 321.049764632886
113.293460762261 319.873241394465
112.469725599645 318.834437071984
112.009817000611 318.434340629434
111.49833420491 318.149867266124
110.920617073907 318.008081432139
110.262005468963 318.036047577565
109.507839251442 318.260830152487
108.643458282707 318.70949360699
107.756882107018 319.34239837498
107.075335418938 320.078241318171
106.864036416767 320.499354481404
106.767100727318 320.963710039561
106.805563664196 321.477143943017
107.000460541008 322.045492142146
107.344176164029 322.500684171622
107.834867989777 322.941849678462
108.930461799858 323.838115662043
109.372004559396 324.321223407691
109.633805072067 324.846319168513
109.634183725475 325.427406578963
109.291460907219 326.078489273494
108.689460998533 326.651365786498
108.00458637452 327.160692184871
106.614962494133 328.126365631526
106.024587994574 328.651548176711
105.580088293312 329.250851601069
105.338650768755 329.958693653052
105.357462799309 330.809492081111
106.100542104004 331.533521681731
106.670839226006 332.383739918178
106.820947921036 333.28083386988
106.6611171571 333.722173951273
106.303461944817 334.145490616267
105.779321586846 334.778944283431
105.133587753533 335.178865879481
103.664462005852 335.689489334529
103.405463135002 335.158490150874
103.272463714836 334.580990761226
103.216463958977 333.547491043513
102.405018603562 332.811808637982
101.738275921105 332.031161457007
100.689461624382 330.37936350674
99.7711471674425 328.680878668731
98.6844586489184 327.024488419002
98.9340847936852 326.306736111348
99.3925855514986 325.754709452098
100.539461052178 324.895740478938
101.029460867999 324.462751865094
101.33158544278 323.943396299785
101.346647312997 323.274650633042
101.215533651544 322.864561777269
100.975459015129 322.3934917149
100.025632446764 322.368326157039
99.0804115889055 322.620239227717
97.2038334963305 323.458238571589
96.2724995074255 323.79579350323
95.3458177206499 323.913364380305
94.4237997589094 323.686685532039
93.5064572451098 322.991491287654
93.6115043518526 322.355770080989
93.7865828630907 321.678237884944
93.8215985653383 321.010081261104
93.5064572451098 320.402486771052
92.7935083267672 319.936223119204
92.0620879290087 319.362614601558
91.5176024792177 318.686442702716
91.3796498683674 318.311389699285
91.3654584047777 317.912488907283
92.1932086107714 317.370864838069
92.9084576723559 316.717489212459
92.5112406370623 315.185365289157
92.0437096712572 313.611239403193
91.913478976248 312.824480756824
91.921552812813 312.046487658923
92.1198921856863 311.283682122534
92.560458099602 310.542486160701
93.0658665058596 310.878865211909
93.6929606554491 310.990991562312
94.3388045189364 310.878865211909
94.9004620668871 310.542486160701
95.3024705705626 310.114232271617
95.5860253927691 309.655004948085
95.865462219475 308.669364899104
95.8741490004046 307.637035816615
95.7474621889574 306.609487503474
95.5843506754769 305.749551547398
95.311168065427 304.973391607111
94.4984917995913 303.624534457629
93.4372378793938 302.467185422485
92.2552107927782 301.405613869136
91.0802150276882 300.344089165037
90.0400550720675 299.186880677646
89.6104774252904 298.542479192545
89.2625354138596 297.838257774418
89.0122045987679 297.062250094195
88.8754605410082 296.20248982281
91.2154645082934 294.309492081111
91.7065436152203 294.535263240045
92.1456036922915 294.901038378184
92.9400881884081 295.753866165584
93.3317233232243 296.091551601594
93.7437608597262 296.270506590312
94.1943061557991 296.216047525113
94.7014645693285 295.853490799373
95.7035845873339 292.78486344189
95.8563523200733 291.998809769457
95.8848197815401 291.19697102875
95.7463892904503 290.375234052246
95.3984631655199 289.529485672419
96.1518851873858 289.32328328461
96.7930878756029 288.813612907832
97.8884610292895 287.537488907283
98.3364590761645 284.25148579449
99.1744443533404 283.872392505114
100.073084747551 283.535487144893
100.850412046669 283.095832436984
101.136718219279 282.792181178635
101.324458038567 282.408491104548
100.610771333931 282.004879802173
99.7992104647143 281.792612999385
98.9782740232928 281.813784211581
98.2364606020434 282.110486954158
96.9580056277497 283.1566387412
95.9631326553805 284.337004869883
95.199330022691 285.627081572717
94.6140860674364 287.00236508221
93.7692275402529 289.910537451213
93.0084637758715 292.86549183697
92.6221810785515 292.528913810556
92.0941489098055 292.366804450457
90.8112105486376 292.274241417354
90.1554915515167 292.197912588423
89.556397473572 292.004302113955
89.0635219124539 291.620472415989
88.7264584658129 290.97348591656
88.7943413165791 290.256545856302
88.9520836231692 289.503956645434
89.2617091295702 287.992238014644
89.2758735922558 287.283312216108
89.1044600365145 286.639144509738
88.6786090937836 286.084836706226
87.9294613955004 285.645490616267
87.2951375303252 285.480674653953
86.7314306852801 285.215909927791
86.2447393593771 284.861590891784
85.8414620516283 284.428111999934
85.5279972610457 283.925867706244
85.3107434866411 283.365252464717
85.1904629824145 282.110486954158
86.9207123873217 281.512738197749
87.6691180822832 281.073801368182
88.2774609682543 280.466489761775
88.7490849850161 280.311129420703
89.2859610674364 280.305113762324
89.8040874359591 280.243034928744
90.2194623110277 279.919485062068
90.1425675955994 279.33384042949
89.9309304115755 278.773941248362
89.2177104113085 277.740613907283
88.3083658573611 276.837972372477
87.4314602968676 276.084485977595
87.7721794006808 275.891661256259
87.9921483156664 275.624128788417
88.1842106935961 274.93961331219
88.2363976595385 274.180284946864
88.3774594423754 273.495489090388
90.1637114641649 271.460238426631
92.0624646303637 269.462484329646
92.2078211662752 269.898314684337
92.1805857775194 270.371362656062
92.1812897083742 270.862972944682
92.4104642031176 271.354490250056
93.3327575383169 271.290117308205
94.1120707151873 270.960818379825
94.7921732721312 270.442448928659
95.4168347475512 269.810864418452
96.6749126074297 268.511472075885
97.3958680686934 267.995375171011
98.2364606020434 267.669485062068
100.363017460464 267.228535413449
102.428226744889 266.624753683513
106.484336769341 265.211114853328
108.530104598163 264.5424681899
110.624259030579 263.993410318797
112.794233610986 263.634546458428
115.067461883782 263.536481827205
115.390959655998 261.737865417903
115.753429329155 260.938723772471
116.054323589562 260.611157655423
116.461459076164 260.349485367244
117.009563719986 261.097417711919
117.166588699578 261.8792526421
117.055112397431 262.686798512643
116.797713196038 263.511863678401
116.335459625481 265.181785314982
116.375762021301 266.010258495515
116.760455047844 266.823484390681
117.880459701775 267.513988464778
118.314649259804 267.978299826091
118.414485102652 268.270900070374
118.403460418938 268.615484207576
118.456658816097 269.211302578156
118.27760258889 269.824018686717
117.656836426018 270.999738663142
117.432181572674 271.512539803689
117.409382259606 271.94183322758
117.696966027973 272.262517571156
117.991066424309 272.374287161683
118.403460418938 272.449491470759
119.355099087713 272.088581278627
120.330057775734 272.072472899859
122.275216018913 272.530863731807
123.208055978773 272.733464017218
124.089496767281 272.737068265384
124.900858586786 272.405727013653
125.274422446398 272.071967618247
125.623461639641 271.603490799373
125.765258228539 270.812893837398
125.71083728051 270.022485702937
125.275469696282 268.516485184138
124.662077581642 268.27523538441
124.104840194939 267.931236236995
123.622415697335 267.493861883586
123.233462249993 266.972486465877
123.200286125897 265.863791316455
123.321692859886 264.713049858516
123.78783313012 262.341489761775
124.151039516686 259.969929665034
124.143778896092 258.819188207095
123.930468475579 257.710493057673
124.506095415114 256.65383416385
125.182608282326 255.633912771647
126.588589584587 253.608612030452
127.193206912039 252.555397450631
127.649007951973 251.443249910777
127.893567150591 250.248251795476
127.864458954094 248.946485489314
128.696370845793 247.681423216765
129.319993650673 246.285661190455
130.360215103386 243.382116287654
130.985735302923 242.014372616713
131.820809519051 240.796007603114
132.34957337579 240.264723218685
132.969898527621 239.797040849631
133.694842571525 239.401712946301
134.537463104485 239.087491959041
135.359450733422 238.379456728404
135.924841797112 237.456737488215
136.294292843102 236.440643042033
136.528460418938 235.452482193416
136.243180668114 235.042577713435
136.18646517968 234.525236099666
136.180468475579 233.410490005916
135.26453339508 233.214220575695
134.434079712389 233.174596219962
133.680064918606 233.275573886638
132.99344650483 233.501110523646
132.365181962161 233.835163078909
131.786228781698 234.26168850035
130.740086471794 235.327985733455
128.841667806862 237.864360302394
127.844711309431 239.077748804992
126.719469940422 240.083478897517
126.531453346966 240.714140623515
126.475918209313 241.449826210444
126.451838409661 243.021486252253
126.328066801785 243.750069349711
126.026322757958 244.368893593257
125.468992805241 244.824263304179
125.070228902755 244.973872810309
124.578463470696 245.062482803767
124.180497562645 245.926267832225
123.824717437981 246.81798931927
123.31031075692 247.541708677714
122.930868601559 247.779336750214
122.43646517968 247.901487320369
121.98335186219 248.052297085231
121.459835922478 248.063234299128
121.001382505654 248.167549580043
120.838887101172 248.32761481375
120.743456756829 248.598493545955
120.535072242974 249.749992102092
120.15859118676 250.901489227717
119.883964931725 251.413019358819
119.539295112847 251.847487657969
119.115241920708 252.179206967061
118.602465545891 252.382490127986
117.658194696663 252.250335186427
116.797833359001 251.884740799373
115.956037199257 251.444519489711
115.067461883782 251.08848378033
114.553394859789 251.777962922757
114.317179834603 252.609250276988
114.220711624382 254.442859619563
114.131661361216 255.317986607259
113.86286894059 256.080531805461
113.299935823439 256.666897713845
112.872416960208 256.874139215504
112.328463470696 257.013486832087
112.047541508584 256.553165059244
111.747588222979 256.224925338929
111.098462736366 255.895551413005
110.396837121008 255.887083768552
109.658461487053 256.061241119807
108.134460603951 256.404305666392
107.380335575102 256.296650290196
106.652460968254 255.818494766658
105.467931425331 256.950054377025
104.124962723015 258.034740417903
102.800742304085 259.194050520366
101.672457611321 260.549482315486
101.287194049118 260.341211408084
100.942148601769 260.013936966365
100.309712326287 259.217111557429
99.6491493341906 258.588474243586
99.2689454910738 258.471434920733
98.8344601747973 258.557493179744
98.6903377139402 259.153280336117
98.4706643429978 259.643540024465
97.8478367683871 260.36611768574
97.0523212460263 260.842507540887
96.1704615709765 261.189990967219
95.2886015382988 261.525849342053
94.4930849430544 261.967364042705
93.8702555803044 262.631816446488
93.6505810470713 263.084294717466
93.5064572451098 263.63648793072
92.4776162115319 264.388501181906
91.3075993416292 264.919346183246
88.8380850908739 265.721360176509
87.6856112090332 266.194443538492
86.6860084888918 266.85018739075
86.266506236179 267.278106121054
85.9127886799557 267.789548918312
85.6340447889102 268.397135430654
85.4394635317309 269.113485306209
85.2064154056294 270.158124923413
85.2738366482241 271.252346247142
85.7569617388232 273.45186230511
85.896102836488 274.488321184819
85.78258780217 275.436690061992
85.5878713057769 275.867085147356
85.2781352606995 276.262551009362
84.8360944950415 276.618785407101
84.2444638369066 276.931486099666
84.3983449099047 278.105893507307
84.3456486818774 279.249362796252
83.8959607241137 281.506487816279
83.44627276635 283.828862756198
83.3935765383227 285.053894445007
83.5474576113207 286.342489212459
83.6790998784287 286.819214164918
83.9006479141695 287.251536577647
84.4687117693407 288.048364609187
84.962150132416 288.863754957622
85.0904163030369 289.319280266469
85.091463958977 289.828489273494
84.2736814377291 290.3713310656
83.3672122118456 290.699486702388
82.451368844269 290.878392785495
81.6054638979418 290.97348591656
81.4909137116207 291.484100274449
81.4730037955029 291.921193986838
81.6655402538759 292.616831272548
82.0599442330582 293.144421368545
82.5330866930468 293.587987869685
82.9618385938389 294.031554370826
83.2230708954317 294.559144466823
83.1936545578224 295.254781752532
83.0314753243161 295.691875464921
82.7504605410082 296.20248982281
82.2821846512539 297.108771934812
82.2253189442141 298.057066291278
82.6945838091357 299.986363380855
82.895097246526 300.920701935594
82.8557865974886 301.803724378055
82.6953195632828 302.218700779309
82.413843294738 302.612098619049
81.9910067209435 302.981001386126
81.4064587709887 303.322492569392
81.3823336718065 303.772132485812
81.5869588015063 304.119116753047
81.875583564995 304.428788989489
82.1034573671801 304.766492813533
81.6217738000138 305.776545405095
81.2655513641817 306.879926889842
81.0435321835263 308.043965279763
80.9644583818896 309.235988586848
81.0370720831139 310.423324823087
81.2701154110415 311.573302000468
81.6723304895146 312.653248130982
82.2524594423754 313.630491226619
82.8035173696859 313.91096124955
83.1994366404993 314.210094853943
83.6008357164843 314.85969457001
83.6066096780283 315.569973900621
83.3667115328295 316.331616371577
82.7497109529955 317.971724837726
82.6725145337565 318.83155788452
82.9494580385668 319.705488174861
83.6357809809429 320.650364011233
84.4708500263674 321.271427124446
85.4120674935562 321.664958804553
86.4168357012255 321.927240341609
88.4466336128695 322.443178146785
89.3864679542763 322.889396995013
90.2194623110277 323.589490860408
91.3953618464453 324.716746836608
92.3717266676409 325.922787874644
93.187052732466 327.193024187987
93.8798359987719 328.512865990107
95.051757967232 331.243006914561
96.1954602358324 333.996492355769
95.9317112324221 334.526803761428
95.5044612047655 334.954740971034
94.5524624941332 335.689489334529
93.0758246538622 334.968386918013
91.5076169130785 334.46847555012
88.2342099306566 333.803116768306
86.5978697893603 333.473114758437
85.0076779482348 333.035194605296
83.4980639574511 332.407079010909
82.1034573671801 331.506490677302
81.2246101704819 332.075711697047
80.2261145470125 332.391069143718
78.0639590380175 332.645365684932
76.9971896616204 332.776890963023
76.0045528767092 333.039725035136
75.1344939378483 333.530160993045
74.435458099602 334.344491928523
75.2668571790142 335.315232764637
76.1526764688475 336.176464795773
78.071819936989 337.589961021846
80.16137701845 338.624097764199
82.3898362276537 339.317992180293
84.7256860790236 339.710761427586
87.1374150869829 339.841522663539
89.5935117659552 339.749393045609
92.0624646303637 339.473489731257
93.9671496508105 339.05889663071
95.9464615938647 338.882241218989
97.8882741091234 339.088460772937
98.8100785968287 339.380441561048
99.680460846184 339.822492569392
101.149694955109 341.386757880156
102.618835365532 343.114616840785
103.41170065677 343.910079605585
104.27453879094 344.590663581794
105.230681857227 345.104443035727
106.303461944817 345.399492233699
106.713770190386 346.531288570432
107.228679960726 347.543267987376
107.838417844979 348.44512921263
108.533210432289 349.246570974296
109.3032843118 349.95729200047
110.138866072653 350.586991019254
111.967459594963 351.642117947047
113.940803712366 352.48954158247
115.980711138008 353.206851750319
118.008994585036 353.87163827539
119.947466766594 354.561490982478
121.624440407513 355.409717604225
123.420511638878 355.988366216128
125.30065331435 356.317264869516
127.22983828759 356.416241615718
129.173039412258 356.305124506061
131.095229542015 356.003741591876
132.961381530522 355.53192092449
POLYGON
108.793459808586 338.178491562312
108.761770149825 337.639546550517
108.58868149495 337.261429339354
108.302295437215 337.016718141442
107.930713569878 336.877991169398
107.044368779419 336.808802753394
106.154459869621 336.834489792293
106.073443925141 337.246115654414
106.179084694145 337.69974133343
106.434163844345 338.143991440242
106.80146304345 338.52749058575
107.909212982414 338.52099177212
108.411899959801 338.464210301345
POLYGON
119.598467743157 332.850492447322
119.900662278889 332.501130439048
120.315978443382 332.184475689834
121.229334747551 331.555865734523
121.599054431675 331.197199411397
121.825254833458 330.777818113273
121.843775725125 330.274366281634
121.590456878899 329.663488357966
119.923148309944 328.726753681605
118.18571177697 327.95811268658
116.4576508162 327.170909374659
114.81846896386 326.178487747615
114.151621258019 326.174669325059
113.554150497673 326.31612846226
112.471712982414 326.831863373225
111.379902755974 327.319660395091
110.770716106652 327.426197170918
110.087466156243 327.373487442439
109.962305700539 328.554472475951
110.056710159538 329.838114231532
110.515239870308 331.084443241065
110.92622680044 331.649875007277
111.482455169914 332.153490036433
112.429406380413 332.649089932149
113.401539242027 332.906599968379
114.395912980793 332.986711561387
115.409586822746 332.950116127437
117.48307172036 332.769569843715
118.537001228092 332.74700182647

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

View File

@ -0,0 +1,216 @@
// Copyright (c) 2008 GeometryFactory Sarl (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you may redistribute it under
// the terms of the Q Public License version 1.0.
// See the file LICENSE.QPL distributed with CGAL.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
//
// Author(s) : Andreas Fabri <Andreas.Fabri@geometryfactory.com>
// Laurent Rineau <Laurent.Rineau@geometryfactory.com>
#ifndef CGAL_QT_POLYLINE_SIMPLIFICATION_2_GRAPHICS_ITEM_H
#define CGAL_QT_POLYLINE_SIMPLIFICATION_2_GRAPHICS_ITEM_H
#include <CGAL/Qt/TriangulationGraphicsItem.h>
#include <CGAL/Polyline_constrained_triangulation_2.h>
#include <QPen>
namespace CGAL {
namespace Qt {
template <typename PCT>
class PolylineSimplificationGraphicsItem : public TriangulationGraphicsItem<PCT >
{
typedef typename PCT::Geom_traits Geom_traits;
typedef typename PCT::Constraint_id Constraint_id;
typedef typename PCT::Constraint_iterator Constraint_iterator;
typedef typename PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
//typedef typename PCT::Points_in_constraint_iterator Points_in_constraint_iterator;
Vertices_in_constraint_iterator
decrement(Vertices_in_constraint_iterator it)
{
do{
--it;
} while(it->removed);
return it;
}
Vertices_in_constraint_iterator
increment(Vertices_in_constraint_iterator it)
{
do{
++it;
} while(it->removed);
return it;
}
public:
PolylineSimplificationGraphicsItem(PCT * pct)
: TriangulationGraphicsItem<PCT>(pct), visible_constraints(true)
{
constraints_pen = this->edgesPen();
constraints_pen.setColor(::Qt::red);
fixed_vertices_pen = this->verticesPen();
fixed_vertices_pen.setColor(::Qt::blue);
}
void operator()(typename PCT::Face_handle fh);
const QPen& constraintsPen() const
{
return constraints_pen;
}
void setConstraintsPen(const QPen& pen)
{
constraints_pen = pen;
}
const QPen& fixedVerticesPen() const
{
return fixed_vertices_pen;
}
void setFixedVerticesPen(const QPen& pen)
{
fixed_vertices_pen = pen;
}
bool visibleConstraints() const
{
return visible_constraints;
}
void setVisibleConstraints(const bool b)
{
visible_constraints = b;
this->update();
}
protected:
void drawAll(QPainter *painter);
void paintVertices(QPainter *painter);
virtual void paintVertex(typename PCT::Vertex_handle vh);
QPen constraints_pen;
QPen fixed_vertices_pen;
private:
bool visible_constraints;
};
template <typename PCT>
void
PolylineSimplificationGraphicsItem<PCT>::drawAll(QPainter *painter)
{
this->painterostream = PainterOstream<Geom_traits>(painter);
for(typename PCT::Finite_edges_iterator eit = this->t->finite_edges_begin();
eit != this->t->finite_edges_end();
++eit)
{
if(this->visibleConstraints() && this->t->is_constrained(*eit))
{
painter->setPen(constraintsPen());
this->painterostream << this->t->segment(*eit);
}
else if( this->visibleEdges() )
{
painter->setPen(this->edgesPen());
this->painterostream << this->t->segment(*eit);
}
}
this->paintVertices(painter);
}
template <typename PCT>
void
PolylineSimplificationGraphicsItem<PCT>::operator()( typename PCT::Face_handle fh )
{
for (int i=0; i<3; i++) {
if ( fh < fh->neighbor(i) || this->t->is_infinite(fh->neighbor(i)) ) {
// if(this->visibleConstraints() && this->t->is_constrained(typename PCT::Edge(fh,i)) && (! this->t->is_infinite(fh->neighbor(i)))){
if(this->visibleConstraints() && this->t->is_constrained(typename PCT::Edge(fh,i)) ){
this->m_painter->setPen(constraintsPen());
this->painterostream << this->t->segment(fh,i);
} else if( this->visibleEdges() ){
this->m_painter->setPen(this->edgesPen());
this->painterostream << this->t->segment(fh,i);
}
}
if(this->visibleVertices()) {
paintVertex(fh->vertex(i));
}
}
}
template <typename PCT>
void
PolylineSimplificationGraphicsItem<PCT>::paintVertex( typename PCT::Vertex_handle vh )
{
Converter<Geom_traits> convert;
// if ( vh->is_fixed() || vh->is_shared() ) {
// this->m_painter->setPen(this->fixedVerticesPen());
// } else {
this->m_painter->setPen(this->verticesPen());
// }
QMatrix matrix = this->m_painter->matrix();
this->m_painter->resetMatrix();
this->m_painter->drawPoint(matrix.map(convert(vh->point())));
this->m_painter->setMatrix(matrix);
}
template <typename PCT>
void
PolylineSimplificationGraphicsItem<PCT>::paintVertices(QPainter *painter)
{
if(this->visibleVertices())
{
Converter<Geom_traits> convert;
QMatrix matrix = painter->matrix();
painter->resetMatrix();
for(Constraint_iterator cit = this->t->constraints_begin();
cit != this->t->constraints_end();
++cit){
for(Vertices_in_constraint_iterator it = this->t->vertices_in_constraint_begin(*cit);
it != this->t->vertices_in_constraint_end(*cit);
it++){
QPointF point = matrix.map(convert(it->point));
if ( it->fixed )
painter->setPen(this->fixedVerticesPen());
else
painter->setPen(this->verticesPen());
painter->drawPoint(point);
}
}
}
}
} // namespace Qt
} // namespace CGAL
#endif // CGAL_QT_POLYLINE_SIMPLIFICATION_2_GRAPHICS_ITEM_H

View File

@ -0,0 +1,196 @@
// Copyright (c) 2008 GeometryFactory Sarl (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org); you may redistribute it under
// the terms of the Q Public License version 1.0.
// See the file LICENSE.QPL distributed with CGAL.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
//
// Author(s) : Andreas Fabri <Andreas.Fabri@geometryfactory.com>
// Laurent Rineau <Laurent.Rineau@geometryfactory.com>
#ifndef CGAL_QT_TRIANGULATION_ARRANGEMENT_GRAPHICS_ITEM_H
#define CGAL_QT_TRIANGULATION_ARRANGEMENT_GRAPHICS_ITEM_H
#include <CGAL/Qt/TriangulationGraphicsItem.h>
#include <QPen>
namespace CGAL {
namespace Qt {
template <typename T>
class TriangulationArrangementGraphicsItem : public TriangulationGraphicsItem<T>
{
typedef typename T::Geom_traits Geom_traits;
public:
TriangulationArrangementGraphicsItem(T * t_)
: TriangulationGraphicsItem<T>(t_), visible_constraints(true)
{
constraints_pen = this->edgesPen();
constraints_pen.setColor(::Qt::red);
fixed_vertices_pen = this->verticesPen();
fixed_vertices_pen.setColor(::Qt::blue);
}
void operator()(typename T::Face_handle fh);
const QPen& constraintsPen() const
{
return constraints_pen;
}
void setConstraintsPen(const QPen& pen)
{
constraints_pen = pen;
}
const QPen& fixedVerticesPen() const
{
return fixed_vertices_pen;
}
void setFixedVerticesPen(const QPen& pen)
{
fixed_vertices_pen = pen;
}
bool visibleConstraints() const
{
return visible_constraints;
}
void setVisibleConstraints(const bool b)
{
visible_constraints = b;
this->update();
}
protected:
void drawAll(QPainter *painter);
void paintVertices(QPainter *painter);
virtual void paintVertex(typename T::Vertex_handle vh);
QPen constraints_pen;
QPen fixed_vertices_pen;
private:
bool visible_constraints;
};
template <typename T>
void
TriangulationArrangementGraphicsItem<T>::drawAll(QPainter *painter)
{
this->painterostream = PainterOstream<Geom_traits>(painter);
for(typename T::Finite_edges_iterator eit = this->t->finite_edges_begin();
eit != this->t->finite_edges_end();
++eit)
{
if ( !eit->first->vertex(this->t->ccw(eit->second))->is_corner()
|| !eit->first->vertex(this->t->cw (eit->second))->is_corner()
)
{
if(this->visibleConstraints() && this->t->is_constrained(*eit))
{
painter->setPen(constraintsPen());
this->painterostream << this->t->segment(*eit);
}
else if( this->visibleEdges() )
{
painter->setPen(this->edgesPen());
this->painterostream << this->t->segment(*eit);
}
}
}
this->paintVertices(painter);
}
template <typename T>
void
TriangulationArrangementGraphicsItem<T>::operator()(typename T::Face_handle fh)
{
for (int i=0; i<3; i++) {
if ( fh < fh->neighbor(i) || this->t->is_infinite(fh->neighbor(i)) ) {
if(this->visibleConstraints() && this->t->is_constrained(typename T::Edge(fh,i)) && (! this->t->is_infinite(fh->neighbor(i)))){
this->m_painter->setPen(constraintsPen());
this->painterostream << this->t->segment(fh,i);
} else if( this->visibleEdges() ){
this->m_painter->setPen(this->edgesPen());
this->painterostream << this->t->segment(fh,i);
}
}
if(this->visibleVertices()) {
paintVertex(fh->vertex(i));
}
}
}
template <typename T>
void
TriangulationArrangementGraphicsItem<T>::paintVertex(typename T::Vertex_handle vh)
{
if ( ! vh->is_corner() ) {
Converter<Geom_traits> convert;
if ( vh->is_fixed() ) {
this->m_painter->setPen(this->fixedVerticesPen());
} else {
this->m_painter->setPen(this->verticesPen());
}
QMatrix matrix = this->m_painter->matrix();
this->m_painter->resetMatrix();
this->m_painter->drawPoint(matrix.map(convert(vh->point())));
this->m_painter->setMatrix(matrix);
}
}
template <typename T>
void
TriangulationArrangementGraphicsItem<T>::paintVertices(QPainter *painter)
{
if(this->visibleVertices())
{
Converter<Geom_traits> convert;
QMatrix matrix = painter->matrix();
painter->resetMatrix();
for(typename T::Finite_vertices_iterator it = this->t->finite_vertices_begin();
it != this->t->finite_vertices_end();
it++)
{
if ( ! it->is_corner() )
{
QPointF point = matrix.map(convert(it->point()));
if ( it->is_fixed() )
painter->setPen(this->fixedVerticesPen());
else painter->setPen(this->verticesPen());
painter->drawPoint(point);
}
}
}
}
} // namespace Qt
} // namespace CGAL
#endif // CGAL_Q_CONSTRAINED_TRIANGULATION_GRAPHICS_ITEM_H

View File

@ -0,0 +1,13 @@
\begin{ccPkgDescription}{Topology Preserving Polyline Simplification\label{Pkg:PolylineSimplification}}
\ccPkgHowToCiteCgal{cgal:cf-ps-12}
\ccPkgSummary{This package provides an algorithm to simplify polylines while keeping the
overall shape as much as possible. Furthermore the topology is maintained, that is
the algorithm introduces no intersections, and does not change the nesting level of a polygon.}
\ccPkgDependsOn{ \ccRef[Triangulation2]{Pkg:Triangulation2}}
\ccPkgIntroducedInCGAL{4.1}
\ccPkgLicense{\ccLicenseGPL}
\ccPkgDemo{Polyline simplification}{demo/polyline_simplification_2.zip}
\ccPkgIllustration{Polyline_simplification_2/fig/detail.png}{Polyline_simplification_2/fig/Illustration-Simplification-ALL.jpg}
\end{ccPkgDescription}

View File

@ -0,0 +1,215 @@
\begin{figure}[ht]
\begin{center}
\begin{ccTexOnly}
\includegraphics[height=4cm]{Polyline_simplification_2/norway.png}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<img border="0" src="./norway.png"><br/>
\end{ccHtmlOnly}
\caption{A fjord in Norway and it's simplified version.}
\label{figure:simplified_norway}
\end{center}
\end{figure}
\section{Introduction}
Polyline simplification is the process of reducing the
number of vertices used in a set of polylines while keeping the
overall shape as much as possible.
Topology preserving polyline simplification means that neither intersections are introduced,
nor the nesting level of a polygon changes: islands do not intersect
a simplified coastline, and islands stay in the water.
The method implemented in this package is based on
\cite{cgal:dds-scs-09}. It can simplify any set of polylines, open or
closed, and possibly intersecting themselves or each other. The method
consists of iteratively replacing edges \ccc{(p,q)} and \ccc{(q,r)} with edge
\ccc{(p,r)} by removing the vertex $q$ from one polyline. The topology of
the polyline set is preserved during the simplification as the
algorithm guarantees that no new intersections occur as a result of
removing a vertex.
Vertices are removed according to a priority given for the vertex by a user-supplied {\em cost} function which
calculates the {\em simplification error}. The cost function is a measure of the deviation between the original polyline
and the current polyline without the vertex.
The algorithm terminates when a user-supplied {\em stop predicate} returns true, for instance,
upon reaching a desired number of vertices or reaching a maximum cost.
The polyline simplification algorithm operates on a triangulation class from
Chapter~\ref{Chapter_2D_Triangulations}, namely \ccc{Polyline_constrained_triangulation_2<Tr>}.
This data structure allows to remove vertices of a polyline constraint, while keeping the
points of the removed vertices of the polyline constraint. The fact that it is a triangulation
allows to perform the topology check for vertices $p,q,r$ efficiently, as this can be decided
based on the set of vertices adjacent to $q$ in the triangulation.
\begin{figure}[ht]
\begin{center}
\begin{ccTexOnly}
\includegraphics[height=3cm]{Polyline_simplification_2/platelet.png}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<img border="0" src="./platelet.png">
\end{ccHtmlOnly}
\label{figure:platelet}
\end{center}
\caption{Check if vertex $q$ can be removed.}
\end{figure}
\section{Cost Functions}
The specific way in which the removal cost is
calculated is called the {\em cost} function. The user can choose
different strategies by choosing a cost function object.
This package provides the three cost functions formulated in \cite{cgal:dds-scs-09}.
As the cost function is a template argument of the simplification function,
users can write and use their own.
The provided cost functions are all based on measuring the Euclidean distance
between a subsequence of the original polyline and the corresponding subsequence of the simplified polyline
with the vertex whose cost is calculated being removed.
Let vertices \ccc{p}, \ccc{q}, and \ccc{r} be three consecutive vertices of a polyline constraint. If the vertex \ccc{q} is removed,
the edges \ccc{(p,q)} and \ccc{(q,r)} would be replaced by the
edge \ccc{(p,r)}.
\subsection{Maximum Squared Distance}
The maximum squared distance is the maximum of the squared Euclidean distances between each
point on the original polyline between \ccc{p} and \ccc{r} and the line segment \ccc{(p,r)}. Let $s_0,...,s_n$ be the points strictly between \ccc{p} and \ccc{r} on the original polyline.
The cost of removing vertex \ccc{q} is: $ v_1 = \max \{ sdist((p,r), s_i) | i=0,..,n\} $
\begin{figure}[ht]
\begin{center}
\begin{ccTexOnly}
\includegraphics[height=3cm]{Polyline_simplification_2/maxDist.png}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<img border="0" src="./maxDist.png">
\end{ccHtmlOnly}
\label{figure:maxDist}
\end{center}
\caption{The maximum squared distance between \ccc{q} and \ccc{(p,r)}}
\end{figure}
\subsection{Scaled Maximum Squared Distance}
When it is important to preserve the separation of adjacent polylines, a variation of the maximum squared
distance cost can be used. Here the maximum is divided by the minimum squared Euclidean distance between
the candidate vertex \ccc{q} and all its adjacent vertices (except \ccc{p} and \ccc{r}). Those are all vertices in
adjacent polylines, or adjacent regions of the same polyline.
Let $t_0,...,t_m$ be the points of the vertices adjacent to vertex \ccc{q}, different from \ccc{p} and \ccc{r} and let $ v_2 = \max \{ sdist((p,r), t_i) | i=0,..,n\}$. The cost of removing vertex \ccc{q} is $v_1/v_2$.
This distance measure gives lower priority to vertices with close neighboring polylines.
\subsection{Hybrid Maximum Squared Distance}
The scaled maximum works well in areas with close neighboring polylines, while the absolute maximum works {\em better}
in areas where the polylines are far apart. In certain applications such as cartographic contours, there are both dense
and spare areas, so a good strategy is to use a scaled or an absolute maximum depending on the case.
The hybrid distance measure uses a parameter \ccc{R} to indicate which measure to use: if $v_2$ , i.e., the minimum distance to adjacent vertices,
is below \ccc{R}, the scaled maximum is used, otherwise the absolute maximum is used.
The cost of removing vertex \ccc{q} is $v_1/v_2$, if $v_2 <R$, and $v_1/R$, otherwise.
As Dyken\&al.\ explain, the choice of a good value for $R$ is problem
specific. It may depend on the pen size or the pixel size when
drawing, or on the grid size when the polyline points are on a grid.
\begin{figure}[ht]
\begin{center}
\begin{ccTexOnly}
\includegraphics[height=3cm]{Polyline_simplification_2/scaledAndHybridMaxDist.png}
\end{ccTexOnly}
\begin{ccHtmlOnly}
<img border="0" src="./scaledAndHybridMaxDist.png">
\end{ccHtmlOnly}
\label{figure:scaledAndHybrid}
\end{center}
\caption{The scaled and hybrid maximum squared distance between \ccc{q} and \ccc{(p,r)}}
\end{figure}
\newpage
\section{Examples}
The first example shows how to simplify a \ccc{CGAL::Polygon_2}. We then show
how to simplify simultaneously several polylines, and show how to mark polyline vertices
so that they do not get removed. The last example shows how to keep, access,
and really remove points of polyline vertices that got removed by the simplification.
\subsection{Simplifying a Polygon}
The first example shows how to simplify a single polyline by halving the number of vertices.
\ccIncludeExampleCode{Polyline_simplification_2/simplify_polygon.cpp}
\newpage
\subsection{Simplifying Several Polylines}
In the second example we insert several polygons in a \ccc{Polyline_simplification_2}. Assuming that the polygons do not intersect, we can
take the default template parameters for the \ccc{Constrained_Delaunay_triangulation_2}.
Before calling \ccc{Polyline_simplification_2::simplify} we mark some polyline vertices as not
removable.
This package provides a convenience function \ccc{Polyline_simplification_2::mark_vertices_unremovable} that marks
the vertices with smallest and largest \ccc{x} and \ccc{y} coordinates
of each polyline constraint as non-removable.
The class \ccc{Polyline_constrained_triangulation_2<Tr>}
offers functions to mark individual polyline vertices as non removable.
Finally, we iterate over all vertices of all polyline constraints.
\ccIncludeExampleCode{Polyline_simplification_2/simplify.cpp}
\newpage
\subsection{Keeping Points While Removing Vertices}
In this example we show the version of \ccc{Polyline_simplification_2::simplify}
that simplifies a single polyline constraint, and keeps
the points while removing vertices.
During the simplification the cost functions need the original
sequence of points.
As explained in the introduction the \ccc{Polyline_constrained_triangulation_2<Tr>} allows to remove vertices from a polyline constraint,
and hence from the triangulation, while keeping the
point in the polyline constraint. This explains why there is
a \ccc{Vertex_in_constraint_iterator} and a
\ccc{Point_in_constraint_iterator}.
With the last argument of \ccc{Polyline_simplification_2::simplify} set
to \ccc{true}, we can keep the points even when
the simplification function has returned.
We might want to keep them,
because we want to call \ccc{Polyline_simplification_2::simplify} once again
for the same polyline constraint, while measuring the simplification
error against the original polyline.
The print function traverses each polyline constraint
twice. First to print the points on the simplified polyline, and
then to print the points of the original polyline.
At< the end we remove the points that were kept from the constraints.
\ccIncludeExampleCode{Polyline_simplification_2/points_and_vertices.cpp}
\section{Design and Implementation History}
Dyken et al \cite{cgal:dds-scs-09} combine a classical polyline simplification algorithm
with the triangulation of polylines in order to check if an elementary simplification step can be
performed. In our implementation we simplified this test even further.
Fernando Cacciola made a first prototype implementation for GeometryFactory, and Andreas Fabri
developed the \ccc{Polyline_constrained_triangulation<Tr>} and the final version of this package.

View File

@ -0,0 +1,11 @@
\ccUserChapter{Topology Preserving Polyline Simplification\label{chapter-polylinesimplification}}
\ccChapterAuthor{Andreas Fabri \ and Fernando Cacciola}
% \input{Polyline_simplification_2/PkgDescription.tex}
\minitoc
\input{Polyline_simplification_2/Polyline_simplification_2.tex}

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -0,0 +1,94 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Hybrid_squared_distance_cost.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Polyline_simplification_2
% |
\RCSdef{\RCSHybridsquareddistancecostRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSHybridsquareddistancecostDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Polyline_simplification_2::Hybrid_squared_distance_cost<FT>} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
This class is a cost function which calculates the cost as the square of the distance between the original and simplified polylines, possibly scaled by a factor.
%END-AUTO(\ccDefinition)
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccInclude)
\ccInclude{CGAL/Polyline_simplification_2/simplify.h}
%END-AUTO(\ccInclude)
\ccIsModel
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccIsModel)
\ccc{PolylineSimplificationCostFunction}.
%END-AUTO(\ccIsModel)
\ccCreation
\ccCreationVariable{cost} %% choose variable name
% Reduce left margin
\ccThree{12}{12}{}
\ccThreeToTwo
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccCreation)
\ccConstructor{Hybrid_squared_distance_cost(FT ratio);}
{
Initializes the cost function with the specified {\em ratio}.
}
\ccGlue
%END-AUTO(\ccCreation)
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template <class Tr>
boost::optional<Tr::Geom_traits::FT>
operator()(Polyline_constrained_triangulation_2<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vip,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vir) const;}
{ Returns the maximal square distance between the straight line segment \ccc{(*vip,*vir)}
and all points of the original polyline between \ccc{*vip} and \ccc{*viq},
divided by the smallest of the square of \ccc{ratio}, and the shortest squared distance between that segment
and each of the vertices adjacent to \ccc{*viq}. }
\ccGlue
%END-AUTO(\ccOperations)
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,73 @@
% +------------------------------------------------------------------------+
% | Reference manual page: PolylineSimplificationCostFunction.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Package
% |
\RCSdef{\RCSPolylineSimplificationCostFunctionRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSPolylineSimplificationCostFunctionDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{PolylineSimplificationCostFunction}
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[concept]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
Models of this concept are passed to the polyline simplification algorithm to calculate the {\em cost} of removing a vertex. Such a cost represents some measure of the deviation error between the polyline sets before and after removal. The smaller the error the lower the cost. The algoritm processes vertices in increasing cost order to preserve the overall polyline set shape as much as possible.
%END-AUTO(\ccDefinition)
\ccCreationVariable{cost} %% choose variable name
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{boost::optional<Polyline_constrained_triangulation_2<Tr>::Geom_traits::FT>
operator()(Polyline_constrained_triangulation_2<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vip,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vir) const;}
{
Given three consecutive polyline vertices \ccc{*vip, *viq, *vir}, calculates the cost of removing vertex \ccc{*viq}, replacing edges \ccc{(*vip,*viq)} and \ccc{(*viq,*vir)} with edge \ccc{(*vip,*vir)}.
\ccCommentHeading{Parameters} \\
\ccc{pct}: The underlying polyline constrained triangulation which embeds the polyline set.
\ccCommentHeading{Returns} The cost for removing \ccc{*viq}. A result of {\em \ccc{boost::none}} can be used to indicate an infinite or uncomputable cost.\\
\ccc{Tr::Geom_traits} must provide a functor \ccc{Compute_squared_distance} with an operator \ccc{Tr::Geom_traits::FT operator()(Tr::Point, Tr::Point)}.
}
\ccGlue
%END-AUTO(\ccOperations)
\ccHasModels
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccHasModels)
\ccc{Polyline_simplification_2::Hybrid_squared_distance_cost} \\
\ccc{Polyline_simplification_2::Scaled_squared_distance_cost} \\
\ccc{Polyline_simplification_2::Squared_distance_cost}
%END-AUTO(\ccHasModels)
\end{ccRefConcept}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,77 @@
% +------------------------------------------------------------------------+
% | Reference manual page: PolylineSimplificationStopPredicate.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Package
% |
\RCSdef{\RCSPolylineSimplificationStopPredicateRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSPolylineSimplificationStopPredicateDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefConcept}{PolylineSimplificationStopPredicate}
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[concept]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
Models of this concept are passed to the polyline simplification algorithm to indicate when to stop.
%END-AUTO(\ccDefinition)
\ccCreationVariable{stop} %% choose variable name
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template<class Tr>
bool operator()(Polyline_constrained_triangulation_2<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::FT cost,
std::size_t initial_count,
std::size_t current_count) const;}
{
Indicates if the simplification must be stopped. This method is called right before each vertex is about to be removed
\ccCommentHeading{Parameters} \\
\ccc{cdt}: The underlying polyline constrained Delaunay triangulation which embeds the polyline set.\\
\ccc{viq}: The current vertex about to be removed.\\
\ccc{cost}: The associated cost for removing the current vertex (as given by \ccc{PolylineSimplificationCostFunction}).\\
\ccc{initial_count}: The initial number of vertices in the entire polyline set (including intersection vertices not in any source polyline).\\
\ccc{current_count}: The current number of vertices.
\ccCommentHeading{Returns} \ccc{true} if the algorithm shall stop, \ccc{false} if it shall continue.
}
\ccGlue
%END-AUTO(\ccOperations)
\ccHasModels
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccHasModels)
\ccc{Polyline_simplification_2::Stop_below_count_ratio_threshold} \\
\ccc{Polyline_simplification_2::Stop_below_count_threshold} \\
\ccc{Polyline_simplification_2::Stop_below_cost_threshold}
%END-AUTO(\ccHasModels)
\end{ccRefConcept}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,91 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Scaled_squared_distance_cost.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Polyline_simplification_2
% |
\RCSdef{\RCSScaledsquareddistancecostRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSScaledsquareddistancecostDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Polyline_simplification_2::Scaled_squared_distance_cost} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
This class is a cost function which calculates the cost as a scaled variant of the square of the distance between the original and simplified polylines.
%END-AUTO(\ccDefinition)
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccInclude)
\ccInclude{CGAL/Polyline_simplification_2/simplify.h}
%END-AUTO(\ccInclude)
\ccIsModel
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccIsModel)
\ccc{PolylineSimplificationCostFunction}
%END-AUTO(\ccIsModel)
\ccCreation
\ccCreationVariable{cost} %% choose variable name
% Reduce left margin
\ccThree{12}{12}{}
\ccThreeToTwo
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccCreation)
\ccConstructor{Scaled_squared_distance_cost();}
{
Initializes the cost function.
}
\ccGlue
%END-AUTO(\ccCreation)
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template <class Tr>
boost::optional<Tr::Geom_traits::FT>
operator()(Polyline_constrained_triangulation_2<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vip,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vir) const;}
{ Returns the maximal square distance between the straight line segment \ccc{(*vip,*vir)}
and all points of the original polyline between \ccc{*vip} and \ccc{*viq},
divided by the shortest squared distance between that segment and each of the vertices adjacent to \ccc{*viq}.}
\ccGlue
%END-AUTO(\ccOperations)
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,90 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Squared_distance_cost.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Polyline_simplification_2
% |
\RCSdef{\RCSSquareddistancecostRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSSquareddistancecostDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Polyline_simplification_2::Squared_distance_cost<FT>} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
This class is a cost function which calculates the cost as the square of the distance between the original and simplified polylines.
%END-AUTO(\ccDefinition)
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccInclude)
\ccInclude{CGAL/Polyline_simplification_2/simplify.h}
%END-AUTO(\ccInclude)
\ccIsModel
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccIsModel)
\ccc{PolylineSimplificationCostFunction}
%END-AUTO(\ccIsModel)
\ccCreation
\ccCreationVariable{cost} %% choose variable name
% Reduce left margin
\ccThree{12}{12}{}
\ccThreeToTwo
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccCreation)
\ccConstructor{Squared_distance_cost();}
{
Initializes the cost function.
}
\ccGlue
%END-AUTO(\ccCreation)
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template <class Tr>
boost::optional<Tr::Geom_traits::FT>
operator()(Polyline_constrained_triangulation_2<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vip,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator vir) const;}
{ Returns the maximal square distance between the straight line segment \ccc{(*vip,*vir)}
and all points of the original polyline between \ccc{*vip} and \ccc{*viq}.}
\ccGlue
%END-AUTO(\ccOperations)
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,90 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Stop_above_cost_threshold.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Polyline_simplification_2
% |
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Polyline_simplification_2::Stop_above_cost_threshold<FT>} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
This class is a stop predicate returning true if the cost for simplifying a vertex is larger than a certain threshold.
%END-AUTO(\ccDefinition)
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccInclude)
\ccInclude{CGAL/Polyline_simplification_2/simplify.h}
%END-AUTO(\ccInclude)
\ccIsModel
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccIsModel)
\ccc{PolylineSimplificationStopPredicate}
%END-AUTO(\ccIsModel)
\ccCreation
\ccCreationVariable{stop} %% choose variable name
% Reduce left margin
\ccThree{12}{12}{}
\ccThreeToTwo
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccCreation)
\ccConstructor{template <class FT>
Stop_above_cost_threshold(FT threshold);}
{
Initializes it with the given threshold value.
}
\ccGlue
%END-AUTO(\ccCreation)
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template<class Tr>
bool operator()(Polyline_constrained_triangulation<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
FT cost,
std::size_t initial_count,
std::size_t current_count) const;}
{
Returns true when {\em cost} is larger than \ccc{threshold}.
}
\ccGlue
%END-AUTO(\ccOperations)
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,91 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Stop_below_count_ratio_threshold.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Polyline_simplification_2
% |
\RCSdef{\RCSStopbelowcountratiothresholdRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSStopbelowcountratiothresholdDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Polyline_simplification_2::Stop_below_count_ratio_threshold} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
This class is a stop predicate returning true when the percentage of the remaning vertices is smaller than a certain threshold.
%END-AUTO(\ccDefinition)
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccInclude)
\ccInclude{CGAL/Polyline_simplification_2/simplify.h}
%END-AUTO(\ccInclude)
\ccIsModel
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccIsModel)
\ccc{PolylineSimplificationStopPredicate}
%END-AUTO(\ccIsModel)
\ccCreation
\ccCreationVariable{stop} %% choose variable name
% Reduce left margin
\ccThree{12}{12}{}
\ccThreeToTwo
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccCreation)
\ccConstructor{Stop_below_count_ratio_threshold(double threshold);}
{
Initializes it with the given threshold value.
}
\ccGlue
%END-AUTO(\ccCreation)
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template<class Tr>
bool operator()(Polyline_constrained_triangulation<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::FT cost,
std::size_t initial_count,
std::size_t current_count) const;}
{
Returns \ccc{true} when \ccc{current_count / initial_count} is smaller or equal than \ccc{threshold}.
}
\ccGlue
%END-AUTO(\ccOperations)
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,91 @@
% +------------------------------------------------------------------------+
% | Reference manual page: Stop_below_count_threshold.tex
% +------------------------------------------------------------------------+
% | April 2009 Fernando Cacciola
% | Package: Polyline_simplification_2
% |
\RCSdef{\RCSStopbelowcountthresholdRev}{$Id: header.tex 40270 2007-09-07 15:29:10Z lsaboret $}
\RCSdefDate{\RCSStopbelowcountthresholdDate}{$Date: 2007-09-07 12:29:10 -0300 (Fri, 07 Sep 2007) $}
% |
\ccRefPageBegin
%%RefPage: end of header, begin of main body
% +------------------------------------------------------------------------+
\begin{ccRefClass}{Polyline_simplification_2::Stop_below_count_threshold} %% add template arg's if necessary
%% \ccHtmlCrossLink{} %% add further rules for cross referencing links
%% \ccHtmlIndexC[class]{} %% add further index entries
\ccDefinition
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccDefinition)
This class is a stop predicate returning the number of vertices is smaller than a certain threshold.
%END-AUTO(\ccDefinition)
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccInclude)
\ccInclude{CGAL/Polyline_simplification_2/simplify.h}
%END-AUTO(\ccInclude)
\ccIsModel
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccIsModel)
\ccc{PolylineSimplificationStopPredicate}.
%END-AUTO(\ccIsModel)
\ccCreation
\ccCreationVariable{stop} %% choose variable name
% Reduce left margin
\ccThree{12}{12}{}
\ccThreeToTwo
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccCreation)
\ccConstructor{Stop_below_count_threshold(std::size_t threshold);}
{
Initializes it with the given threshold value.
}
\ccGlue
%END-AUTO(\ccCreation)
\ccOperations
% Reduce left margin
\ccThree{12}{12}{}
% The section below is automatically generated. Do not edit!
%START-AUTO(\ccOperations)
\ccMethod{template<class Tr>
bool operator()(Polyline_constrained_triangulation<Tr> const& pct,
Polyline_constrained_triangulation_2<Tr>::Vertices_in_constraint_iterator viq,
Polyline_constrained_triangulation_2<Tr>::FT cost,
std::size_t initial_count,
std::size_t current_count) const;}
{
Returns \ccc{true} when \ccc{current_count} is smaller or equal than \ccc{threshold}.
}
\ccGlue
%END-AUTO(\ccOperations)
\end{ccRefClass}
% +------------------------------------------------------------------------+
%%RefPage: end of main body, begin of footer
\ccRefPageEnd
% EOF
% +------------------------------------------------------------------------+

View File

@ -0,0 +1,31 @@
\ccRefChapter{Topology Preserving Polyline Simplification \label{ref-chapter-polylinesimplification}}
\ccChapterAuthor{Andreas Fabri \ and Fernando Cacciola}
This chapter introduces the concepts and classes of the polyline simplification package.
The algorithms iteratively remove vertices according to a user defined cost and stop function,
and the algorithm guarantees that no intersections are introduced.
\section{Classified Reference Pages}
\subsection*{Concepts}
\ccRefConceptPage{PolylineSimplificationCostFunction}\\
\ccRefConceptPage{PolylineSimplificationStopPredicate}\\
\subsection*{Cost Functions}
\ccRefIdfierPage{CGAL::Polyline_simplification_2::Squared_distance_cost}\\
\ccRefIdfierPage{CGAL::Polyline_simplification_2::Scaled_squared_distance_cost}\\
\ccRefIdfierPage{CGAL::Polyline_simplification_2::Hybrid_squared_distance_cost}
\subsection*{Stop Predicates}
\ccRefIdfierPage{CGAL::Polyline_simplification_2::Stop_above_cost_threshold<FT>}\\
\ccRefIdfierPage{CGAL::Polyline_simplification_2::Stop_below_count_threshold}\\
\ccRefIdfierPage{CGAL::Polyline_simplification_2::Stop_below_count_ratio_threshold}
\subsection*{Functions}
\ccRefIdfierPage{CGAL::Polyline_simplification_2::simplify}\\
\ccRefIdfierPage{CGAL::Polyline_simplification_2::mark_vertices_unremovable}\\

View File

@ -0,0 +1,20 @@
% +------------------------------------------------------------------------+
% | CBP Reference Manual: main.tex
% +------------------------------------------------------------------------+
% | Automatically generated driver file for the reference manual chapter
% | of this package. Do not edit manually, you may loose your changes.
% +------------------------------------------------------------------------+
\input{Polyline_simplification_2_ref/intro.tex}
\input{Polyline_simplification_2_ref/mark_vertices_unremovable.tex}
\input{Polyline_simplification_2_ref/Hybrid_squared_distance_cost.tex}
\input{Polyline_simplification_2_ref/PolylineSimplificationCostFunction.tex}
\input{Polyline_simplification_2_ref/PolylineSimplificationStopPredicate.tex}
\input{Polyline_simplification_2_ref/Scaled_squared_distance_cost.tex}
\input{Polyline_simplification_2_ref/simplify.tex}
\input{Polyline_simplification_2_ref/Squared_distance_cost.tex}
\input{Polyline_simplification_2_ref/Stop_above_cost_threshold.tex}
\input{Polyline_simplification_2_ref/Stop_below_count_ratio_threshold.tex}
\input{Polyline_simplification_2_ref/Stop_below_count_threshold.tex}
%% EOF

View File

@ -0,0 +1,33 @@
\ccRefPageBegin
\begin{ccRefFunction}{Polyline_simplification_2::mark_vertices_unremovable}
\ccDefinition
The function \ccRefName{} marks vertices of a polyline constrained triangulation
so that they will not get removed.
\ccInclude{/CGAL/Polyline_simplification_2/simplify.h}
\ccGlobalFunction{template <class Tr>
std::size_t
mark_vertices_unremovable(Polyline_constrained_triangulation<Tr>& pct);}
{
Marks the vertices of each polyline constraint with smallest and largest \ccc{x} and \ccc{y}
coordinates, as well as endpoints and intersections of polylines as unremovable.
}
\ccGlobalFunction{template <class Tr>
std::size_t
mark_vertices_unremovable(Polyline_constrained_triangulation<Tr>& pct,
Polyline_constrained_triangulation<Tr>::Constraint_id cid);}
{
Marks the vertices of polyline constraint \ccc{cid} with smallest and largest \ccc{x} and \ccc{y}
coordinates, as well as endpoints and intersections of polylines as unremovable.
}
\ccSeeAlso
\ccc{Polyline_simplification_2::simplify}
\end{ccRefFunction}
\ccRefPageEnd

View File

@ -0,0 +1,64 @@
\ccRefPageBegin
\begin{ccRefFunction}{Polyline_simplification_2::simplify}
\ccDefinition
The function \ccRefName{} can simplify a poylgon as well as polylines embedded in a constrained triangulation.
After a call of \ccRefName{} the \ccc{Vertices_in_constraint_iterator}
allows to traverse the vertices of the simplified polyline,
and the \ccc{Points_in_constraint_iterator} allows to traverse
the points of the original polyline. In order to also remove these
points \ccc{Polyline_constrained_triangulation<Tr>::remove_points_from_constraints} must be called.
\ccInclude{/CGAL/Polyline_simplification_2/simplify.h}
\ccGlobalFunction{template <class PolygonTraits_2, class Container, class CostFunction, class StopFunction>
CGAL::Polygon_2<PolygonTraits_2,Container>
simplify(const CGAL::Polygon_2<PolygonTraits_2,Container>& polygon,
CostFunction cost,
StopFunction stop);}
{
Simplifies the polygon according to \ccc{cost} and \ccc{stop}, which
must be models of the concepts \ccc{PolylineSimplificationStopPredicate}
and \ccc{PolylineSimplificationCostFunction}.
}
\ccGlobalFunction{template <class Tr, class CostFunction, class StopFunction>
std::size_t
simplify(CGAL::Polyline_constrained_triangulation_2<Tr>& pct,
CGAL::Polyline_constrained_triangulation_2<Tr>::Constraint_id cid,
CostFunction cost,
StopFunction stop,
bool keep_points = false);}
{
Simplifies polyline constraint \ccc{cid} in \ccc{pct} according to \ccc{cost} and \ccc{stop}, which
must be models of the concepts \ccc{PolylineSimplificationStopPredicate}
and \ccc{PolylineSimplificationCostFunction}. If \ccc{keep_points} is \ccc{true}
only the vertices but not the points are removed.
}
\ccGlobalFunction{template <class Tr, class CostFunction, class StopFunction>
std::size_t
simplify(CGAL::Polyline_constrained_triangulation_2<Tr>& pct,
CostFunction cost,
StopFunction stop,
bool keep_points = false);}
{
Simplifies \ccc{pct} according to \ccc{cost} and \ccc{stop}, which
must be models of the concepts \ccc{PolylineSimplificationStopPredicate}
and \ccc{PolylineSimplificationCostFunction}. If \ccc{keep_points} is \ccc{true}
only the vertices but not the points are removed.
}
\ccSeeAlso
\ccc{Polyline_simplification_2::mark_vertices_unremovable}
\end{ccRefFunction}
\ccRefPageEnd

View File

@ -0,0 +1,80 @@
// Recommended kernel
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
// The simplification data structure
#include <CGAL/Polyline_simplification_2.h>
// Stop predicate
#include <CGAL/Polyline_simplification_2/Stop_below_count_ratio_threshold.h>
// Cost function
#include <CGAL/Polyline_simplification_2/Scaled_squared_distance_cost.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point ;
typedef CGAL::Simplify_polylines_2<K> PS;
int main( int argc, char** argv )
{
PS ps ;
Point points[] = { Point(0,1)
, Point(1,2)
, Point(2,1)
, Point(3,3)
, Point(4,1)
, Point(5,4)
, Point(6,1)
, Point(3,0)
} ;
// Insert polygon into simplification class
PS::Closed_polyline_handle poly = ps.insert_polygon(points,points+8);
std::cout << "Before simplification" << std::endl ;
std::cout << std::endl ;
// Iterate over the vertices of the inserted polygon before simplification
PS::Closed_polyline::Circulator head = poly->circulator();
PS::Closed_polyline::Circulator cit = head;
do
{
std::cout << cit->point() << std::endl ;
}
while ( ++ cit != head ) ;
// Define the stop predicate to finish when the number of vertices drops
// below half the initial amount
CGAL::Polyline_simplification_2::Stop_below_count_ratio_threshold stop(0.5);
// Use the scaled squared distance cost function
CGAL::Polyline_simplification_2::Scaled_squared_distance_cost<double> cost;
// Proceed with the simplification
ps.simplify(stop, cost) ;
// Continue with the simplification from the previously simplified set
ps.simplify(stop, cost) ;
// And again...
ps.simplify(stop, cost) ;
std::cout << "After simplification" << std::endl ;
std::cout << std::endl ;
// Iterate over the now simplified polyline showing the remaning vertices
head = poly->circulator();
cit = head;
do
{
std::cout << cit->point() << std::endl ;
}
while ( ++ cit != head ) ;
return 0 ;
}

View File

@ -0,0 +1,92 @@
// Recommended kernel
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
// The simplification data structure
#include <CGAL/Polyline_simplification_2.h>
// Stop predicate
#include <CGAL/Polyline_simplification_2/Stop_below_count_ratio_threshold.h>
// Cost functions
#include <CGAL/Polyline_simplification_2/Scaled_squared_distance_cost.h>
#include <CGAL/Polyline_simplification_2/Squared_distance_cost.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point ;
typedef CGAL::Simplify_polylines_2<K> PS;
int main( int argc, char** argv )
{
PS ps ;
Point points[] = { Point(0,1)
, Point(1,2)
, Point(2,1)
, Point(3,3)
, Point(4,1)
, Point(5,4)
, Point(6,1)
, Point(3,0)
} ;
// Insert polygon into simplification class
PS::Closed_polyline_handle poly = ps.insert_polygon(points,points+8);
std::cout << "Before simplification" << std::endl ;
std::cout << std::endl ;
// Iterate over the vertices of the inserted polygon before simplification
PS::Closed_polyline::Circulator head = poly->circulator();
PS::Closed_polyline::Circulator cit = head;
do
{
std::cout << cit->point() << std::endl ;
}
while ( ++ cit != head ) ;
// Define the stop predicate to finish when the number of vertices drops
// below half the initial amount
CGAL::Polyline_simplification_2::Stop_below_count_ratio_threshold stop(0.5);
CGAL::Polyline_simplification_2::Scaled_squared_distance_cost<double> cost1;
CGAL::Polyline_simplification_2::Squared_distance_cost<double> cost2;
// Proceed with the simplification
ps.simplify(stop, cost1) ;
std::cout << "Using the scaled squared distance" << std::endl ;
std::cout << std::endl ;
// Iterate over the now simplified polyline showing the remaining vertices
head = poly->circulator();
cit = head;
do
{
std::cout << cit->point() << std::endl ;
}
while ( ++ cit != head ) ;
// Start again but using the other cost function
ps.simplify_original(stop, cost2) ;
std::cout << "Using the absolute squared distance" << std::endl ;
std::cout << std::endl ;
// Iterate over the now simplified polyline showing the remaning vertices
head = poly->circulator();
cit = head;
do
{
std::cout << cit->point() << std::endl ;
}
while ( ++ cit != head ) ;
return 0 ;
}

View File

@ -0,0 +1,77 @@
// Recommended kernel
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
// The simplification data structure
#include <CGAL/Polyline_simplification_2.h>
// Stop predicate
#include <CGAL/Polyline_simplification_2/Stop_below_count_ratio_threshold.h>
// Cost function
#include <CGAL/Polyline_simplification_2/Scaled_squared_distance_cost.h>
// Helper visitor base
#include <CGAL/Polyline_simplification_2/Visitor_base.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point ;
typedef CGAL::Simplify_polylines_2<K> PS;
// Create a custom visitor using the helper base class and overriding only one function
struct My_visitor : CGAL::Polyline_simplification_2::Visitor_base<PS>
{
void OnSelected( Vertex_handle const& v, boost::optional<FT> const& cost, unsigned icount , unsigned ccount ) const
{
std::cout << "step [" << ccount << "/" << icount << "]: " << "V" << v->id() << " with cost " << cost << " selected" << std::endl ;
}
} ;
int main( int argc, char** argv )
{
PS ps ;
Point points[] = { Point(0,1)
, Point(1,2)
, Point(2,1)
, Point(3,3)
, Point(4,1)
, Point(5,4)
, Point(6,1)
, Point(3,0)
} ;
// Insert polygon into simplification class
PS::Closed_polyline_handle poly = ps.insert_polygon(points,points+8);
std::cout << "Before simplification" << std::endl ;
std::cout << std::endl ;
// Iterate over the vertices of the inserted polygon before simplification
PS::Closed_polyline::Circulator head = poly->circulator();
PS::Closed_polyline::Circulator cit = head;
do
{
std::cout << cit->point() << std::endl ;
}
while ( ++ cit != head ) ;
// Define the stop predicate to finish when the number of vertices drops
// below half the initial amount
CGAL::Polyline_simplification_2::Stop_below_count_ratio_threshold stop(0.5);
// Use the scaled squared distance cost function
CGAL::Polyline_simplification_2::Scaled_squared_distance_cost<double> cost;
// Proceed with the simplification tracking the process
My_visitor visitor ;
ps.simplify(stop, cost, visitor) ;
return 0 ;
}

View File

@ -0,0 +1,67 @@
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Polyline_constrained_triangulation_2.h>
#include <CGAL/Polyline_simplification_2/simplify.h>
namespace PS = CGAL::Polyline_simplification_2;
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Polygon_2<K> Polygon_2;
typedef CGAL::Exact_predicates_tag Itag;
typedef CGAL::Constrained_Delaunay_triangulation_2<K,CGAL::Default, Itag> CDT;
typedef CGAL::Polyline_constrained_triangulation_2<CDT> PCT;
typedef PCT::Point Point;
typedef PCT::Constraint_id Constraint_id;
typedef PCT::Constraint_iterator Constraint_iterator;
typedef PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
typedef PCT::Points_in_constraint_iterator Points_in_constraint_iterator;
typedef PS::Stop_below_count_ratio_threshold Stop;
typedef PS::Squared_distance_cost Cost;
void print(const PCT& pct, Constraint_id cid)
{
std::cout << "simplified polyline" <<std::endl;
for(Vertices_in_constraint_iterator vit =
pct.vertices_in_constraint_begin(cid);
vit != pct.vertices_in_constraint_end(cid);
++vit){
std::cout << vit->point() << std::endl ;
}
std::cout << "original points" <<std::endl;
for(Points_in_constraint_iterator pit =
pct.vertices_in_constraint_begin(cid);
pit != pct.vertices_in_constraint_end(cid);
++pit){
std::cout << *pit << std::endl ;
}
}
int main( )
{
const bool keep_points = true;
PCT pct;
Polygon_2 P;
Constraint_id cid;
int largest = 0;
while(std::cin >> P){
Constraint_id cid2 = pct.insert_constraint(P);
if(P.size() > largest){
cid = cid2;
}
}
PS::mark_vertices_unremovable(pct,cid);
PS::simplify(pct, cid, Cost(), Stop(0.5), keep_points);
print(pct, cid);
PS::simplify(pct, cid, Cost(), Stop(0.5), keep_points);
pct.remove_points_from_constraint(cid);
print(pct, cid);
return 0;
}

View File

@ -0,0 +1,43 @@
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Polyline_constrained_triangulation_2.h>
#include <CGAL/Polyline_simplification_2/simplify.h>
namespace PS = CGAL::Polyline_simplification_2;
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Polygon_2<K> Polygon_2;
typedef CGAL::Constrained_Delaunay_triangulation_2<K,CGAL::Default, CGAL::Exact_predicates_tag> CDT;
typedef CGAL::Polyline_constrained_triangulation_2<CDT> PCT;
typedef PCT::Point Point;
typedef PCT::Constraint_iterator Constraint_iterator;
typedef PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
typedef PCT::Points_in_constraint_iterator Points_in_constraint_iterator;
typedef PS::Stop_below_count_ratio_threshold Stop;
typedef PS::Squared_distance_cost<double> Cost;
int main( )
{
PCT pct;
Polygon_2 P;
while(std::cin >> P){
pct.insert_constraint(P);
}
PS::mark_vertices_unremovable(pct);
PS::simplify(pct, Cost(), Stop(0.5));
for(Constraint_iterator cit = pct.constraints_begin();
cit != pct.constraints.end();
++cit){
std::cout << "simplified polyline" << std::endl;
for(Vertices_in_constraint_iterator vit =
pct.vertices_in_constraint_begin(*cit);
vit != pct.vertices_in_constraint_end(*cit);
++vit)
std::cout << (*vit)->point() << std::endl ;
}
return 0;
}

View File

@ -0,0 +1,26 @@
#include <iostream>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Polyline_simplification_2/simplify.h>
namespace PS = CGAL::Polyline_simplification_2;
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Polygon_2<K> Polygon_2;
typedef PS::Stop_below_count_ratio_threshold Stop;
typedef PS::Squared_distance_cost Cost;
int main( )
{
Polygon_2 polygon;
std::cin >> polygon;
polygon = PS::simplify(polygon, Cost(), Stop(0.5));
std::cout.precision(12);
std::cout << polygon << std::endl;
return 0;
}

View File

@ -0,0 +1,105 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri, Fernando Cacciola
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_HYBRID_SQUARED_DISTANCE_COST_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_HYBRID_SQUARED_DISTANCE_COST_H
namespace CGAL {
namespace Polyline_simplification_2
{
/// This class is a cost function which calculates the cost as the square of the distance between the original and simplified polylines,
/// possibly scaled based on a factor.
///
/// @heading Is Model for the Concepts: 'PolylineSimplificationCostFunction'.
template<class FT>
class Hybrid_squared_distance_cost
{
public:
/// Initializes the cost function with the specified "ratio"
Hybrid_squared_distance_cost( FT ratio ) : mSquaredRatio(ratio*ratio) {}
/// Returns the maximal square distances between each point along the original subpolyline,
/// given by the range [original_subpolyline_vertices_begin,original_subpolyline_vertices_end),
/// and the straight line segment "p->r" divided by the smallest of
/// - the square of the ratio given to the constructor of the cost function,
/// - and the shortest squared distance between that segment and each of the vertices adjacent to "q".
template<class PolylineConstraintTriangulation, class CVI>
boost::optional<typename PolylineConstraintTriangulation::Geom_traits::FT>
operator()( PolylineConstraintTriangulation const& pct
, CVI p
, CVI q
, CVI r) const
{
typedef typename PolylineConstraintTriangulation::Vertex_handle Vertex_handle;
typedef typename PolylineConstraintTriangulation::Vertex_circulator Vertex_circulator;
typedef typename PolylineConstraintTriangulation::Geom_traits Geom_traits ;
typedef Geom_traits::FT FT;
typedef typename Geom_traits::Compute_squared_distance_2 Compute_squared_distance;
typedef typename Geom_traits::Construct_segment_2 Construct_segment;
typedef typename Geom_traits::Segment_2 Segment;
typedef typename Geom_traits::Point_2 Point;
Compute_squared_distance compute_squared_distance = pct.geom_traits().compute_squared_distance_2_object() ;
Construct_segment construct_segment = pct.geom_traits().construct_segment_2_object() ;
Point const& lP = p->point;
Point const& lQ = q->point;
Point const& lR = r->point;
Segment lP_R = construct_segment(lP, lR) ;
FT d1 = 0.0;
++p;
for ( ;p != r; ++p )
d1 = (std::max)(d1, compute_squared_distance( lP_R, p->point ) ) ;
FT d2 = (std::numeric_limits<double>::max)() ;
Vertex_circulator vc = q->vertex->incident_vertices(), done(vc);
do {
if((vc != pct.infinite_vertex()) && (vc != p->vertex) && (vc != r->vertex)){
d2 = (std::min)(d2, compute_squared_distance(vc->point(), q->point));
}
++vc;
}while(vc != done);
return d1 / (std::min)(d2, mSquaredRatio) ;
}
private:
FT mSquaredRatio ;
};
} // namespace Polyline_simplification_2
} //namespace CGAL
#endif // CGAL_POLYLINE_SIMPLIFICATION_2_HYBRID_SQUARED_DISTANCE_COST_H

View File

@ -0,0 +1,98 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri, Fernando Cacciola
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_SCALED_SQUARED_DISTANCE_COST_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_SCALED_SQUARED_DISTANCE_COST_H
namespace CGAL {
namespace Polyline_simplification_2
{
/// This class is a cost function which calculates the cost as a scaled variant of the square of the distance between the original and simplified polylines.
///
/// @heading Is Model for the Concepts: PolylineSimplificationCostFunction
class Scaled_squared_distance_cost
{
public:
/// Initializes the cost function
Scaled_squared_distance_cost() {}
/// Returns the maximal square distances between each point along the original subpolyline,
/// given by the range [original_subpolyline_vertices_begin,original_subpolyline_vertices_end),
/// and the straight line segment "p->r" divided by the shortest squared distance between
/// that segment and each of the vertices adjacent to "q".
template<class PolylineConstraintTriangulation, class CVI>
boost::optional<typename PolylineConstraintTriangulation::Geom_traits::FT>
operator()( PolylineConstraintTriangulation const& pct
, CVI p
, CVI q
, CVI r) const
{
typedef typename PolylineConstraintTriangulation::Vertex_handle Vertex_handle;
typedef typename PolylineConstraintTriangulation::Vertex_circulator Vertex_circulator;
typedef typename PolylineConstraintTriangulation::Geom_traits Geom_traits ;
typedef Geom_traits::FT FT;
typedef typename Geom_traits::Compute_squared_distance_2 Compute_squared_distance;
typedef typename Geom_traits::Construct_segment_2 Construct_segment;
typedef typename Geom_traits::Segment_2 Segment;
typedef typename Geom_traits::Point_2 Point;
Compute_squared_distance compute_squared_distance = pct.geom_traits().compute_squared_distance_2_object() ;
Construct_segment construct_segment = pct.geom_traits().construct_segment_2_object() ;
Point const& lP = p->point;
Point const& lR = r->point;
Segment lP_R = construct_segment(lP, lR) ;
FT d1 = 0.0;
++p;
for ( ;p != r; ++p )
d1 = (std::max)(d1, compute_squared_distance( lP_R, p->point ) ) ;
double d2 = (std::numeric_limits<double>::max)() ;
Vertex_circulator vc = q->vertex->incident_vertices(), done(vc);
do {
if((vc != pct.infinite_vertex()) && (vc != p->vertex) && (vc != r->vertex)){
d2 = (std::min)(d2, compute_squared_distance(vc->point(), q->point));
}
++vc;
}while(vc != done);
return d1 / d2 ;
}
};
} // namespace Polyline_simplification_2
} //namespace CGAL
#endif // CGAL_POLYLINE_SIMPLIFICATION_2_SCALED_SQUARED_DISTANCE_COST_H

View File

@ -0,0 +1,87 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri, Fernando Cacciola
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_SQUARED_DISTANCE_COST_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_SQUARED_DISTANCE_COST_H
namespace CGAL {
namespace Polyline_simplification_2
{
/// This class is a cost function which calculates the cost as the square of the distance between the original and simplified polylines.
///
/// @heading Is Model for the Concepts: 'PolylineSimplificationCostFunction'.
class Squared_distance_cost
{
public:
/// Initializes the cost function
Squared_distance_cost() {}
/// Returns the maximal square distances between each point along the original subpolyline,
/// given by the range [original_subpolyline_vertices_begin,original_subpolyline_vertices_end),
/// and the straight line segment "p->r".
template<class PolylineConstraintTriangulation, class CVI>
boost::optional<typename PolylineConstraintTriangulation::Geom_traits::FT>
operator()( PolylineConstraintTriangulation const& pct
, CVI p
, CVI q
, CVI r) const
{
typedef typename PolylineConstraintTriangulation::Geom_traits Geom_traits ;
typedef Geom_traits::FT FT;
typedef typename Geom_traits::Compute_squared_distance_2 Compute_squared_distance ;
typedef typename Geom_traits::Construct_segment_2 Construct_segment ;
typedef typename Geom_traits::Segment_2 Segment ;
typedef typename Geom_traits::Point_2 Point ;
Compute_squared_distance compute_squared_distance = pct.geom_traits().compute_squared_distance_2_object() ;
Construct_segment construct_segment = pct.geom_traits().construct_segment_2_object() ;
Point const& lP = p->point;
Point const& lR = r->point;
Segment lP_R = construct_segment(lP, lR) ;
FT d1 = 0.0;
++p;
for ( ;p != r; ++p )
d1 = (std::max)(d1, compute_squared_distance( lP_R, p->point ) ) ;
return d1 ;
}
};
} // namespace Polyline_simplification_2
} //namespace CGAL
#endif // CGAL_POLYLINE_SIMPLIFICATION_2_SQUARED_DISTANCE_COST_H

View File

@ -0,0 +1,61 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri, Fernando Cacciola
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_STOP_ABOVE_COST_THRESHOLD_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_STOP_ABOVE_COST_THRESHOLD_H
namespace CGAL {
namespace Polyline_simplification_2
{
/// This class is a stop predicate returning the cost for simplifying a vertex is smaller than a certain threshold.
///
/// @heading Is Model for the Concepts: PolylineSimplificationStopPredicate.
class Stop_above_cost_threshold
{
public :
/// Initializes it with the given threshold value
Stop_above_cost_threshold( double aThreshold ) : mThres(aThreshold) {}
/// Returns true when "cost" is smaller or equal than the threshold
template<class ConstrainedDelaunayTriangulation, class VertexHandle>
bool operator()( ConstrainedDelaunayTriangulation const& cdt
, VertexHandle const& p
, double cost
, std::size_t initial_count
, std::size_t current_count
) const
{
return cost >= mThres ;
}
private:
double mThres ;
};
} // namespace Polyline_simplification_2
} //namespace CGAL
#endif // CGAL_POLYLINE_SIMPLIFICATION_2_STOP_ABOVE_COST_THRESHOLD_H

View File

@ -0,0 +1,61 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri, Fernando Cacciola
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_STOP_BELOW_COUNT_RATIO_THRESHOLD_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_STOP_BELOW_COUNT_RATIO_THRESHOLD_H
namespace CGAL {
namespace Polyline_simplification_2
{
/// This class is a stop predicate returning true when the percentage of remaning vertices is smaller than a certain threshold.
///
/// @heading Is Model for the Concepts: 'PolylineSimplificationStopPredicate'.
class Stop_below_count_ratio_threshold
{
public :
/// Initializes it with the given threshold value
Stop_below_count_ratio_threshold( double threshold ) : mThres(threshold) {}
/// Returns true when "( current_count / initial_count )" is smaller or equal than the threshold
template<class ConstrainedDelaunayTriangulation, class VertexHandle>
bool operator()( ConstrainedDelaunayTriangulation const&
, VertexHandle const&
, double
, std::size_t initial_count
, std::size_t current_count
) const
{
return ( (double)current_count / (double)initial_count ) <= mThres ;
}
private:
double mThres ;
};
} // namespace Polyline_simplification_2
} //namespace CGAL
#endif // CGAL_POLYLINE_SIMPLIFICATION_2_STOP_BELOW_COUNT_RATIO_THRESHOLD_H

View File

@ -0,0 +1,60 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri, Fernando Cacciola
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_STOP_BELOW_COUNT_THRESHOLD_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_STOP_BELOW_COUNT_THRESHOLD_H
namespace CGAL {
namespace Polyline_simplification_2
{
/// This class is a stop predicate returning the number of vertices is smaller than a certain threshold.
///
/// @heading Is Model for the Concepts: 'PolylineSimplificationStopPredicate'.
class Stop_below_count_threshold
{
public :
/// Initializes it with the given threshold value
Stop_below_count_threshold( std::size_t threshold ) : mThres(threshold) {}
/// Returns true when "current_count" is smaller or equal than the threshold
template<class ConstrainedDelaunayTriangulation, class VertexHandle>
bool operator()( ConstrainedDelaunayTriangulation const& cdt
, VertexHandle const& p
, double cost
, std::size_t initial_count
, std::size_t current_count
) const
{
return current_count <= mThres ;
}
private:
std::size_t mThres ;
};
} // namespace Polyline_simplification_2
} //namespace CGAL
#endif // CGAL_POLYLINE_SIMPLIFICATION_2_STOP_BELOW_COUNT_THRESHOLD_H

View File

@ -0,0 +1,70 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_MARK_VERTICES_UNREMOVBLE_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_MARK_VERTICES_UNREMOVBLE_H
namespace CGAL {
template < class Tr >
class Polyline_constrained_triangulation_2;
namespace Polyline_simplification_2 {
// Fix the leftmost, rightmost, topmost and bottommost vertex
template <typename Tr>
void
mark_vertices_unremovable(CGAL::Polyline_constrained_triangulation_2<Tr>& pct,
typename CGAL::Polyline_constrained_triangulation_2<Tr>::Constraint_id cid)
{
typedef typename CGAL::Polyline_constrained_triangulation_2<Tr> PCT;
typedef PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
Vertices_in_constraint_iterator l,r,b,t;
l = r = b = t = pct.vertices_in_constraint_begin(cid);
for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid);
it != pct.vertices_in_constraint_end(cid);
it++){
if(it->point.x() < l->point.x()) l = it;
if(it->point.x() > r->point.x()) r = it;
if(it->point.y() < b->point.y()) b = it;
if(it->point.y() > t->point.y()) t = it;
}
l->fixed = r->fixed = t->fixed = b->fixed = true;
}
// Fix the leftmost, rightmost, topmost and bottommost vertex
template <typename Tr>
void
mark_vertices_unremovable(CGAL::Polyline_constrained_triangulation_2<Tr>& pct)
{
typedef typename CGAL::Polyline_constrained_triangulation_2<Tr> PCT;
typedef typename PCT::Constraint_iterator Constraint_iterator;
typedef typename PCT::Constraint_id Constraint_id;
Constraint_iterator cit = pct.constraints_begin(), e = pct.constraints_end();
for(; cit!=e; ++cit){
Constraint_id cid = *cit;
mark_vertices_unremovable(pct,cid);
}
}
} // namespace polyline_simplification_2
} // namespace CGAL
#endif CGAL_POLYLINE_SIMPLIFICATION_2_MARK_VERTICES_UNREMOVBLE_h

View File

@ -0,0 +1,35 @@
/// Models of this concept are passed to the polyline simplification algorithm to calculate
/// the "cost" of removing a vertex. Such a cost represents some measure of the deviation error between the
/// polyline sets before and after removal. The smaller the error the lower the cost. The algoritm processes
/// vertices in increasing cost order to preserve the overall polyline set shape as much as possible
///
/// @heading Has Models:
/// - CGAL::Polyline_simplification_2::Hybrid_squared_distance_cost
/// - CGAL::Polyline_simplification_2::Scaled_squared_distance_cost
/// - CGAL::Polyline_simplification_2::Squared_distance_cost
class PolylineSimplificationCostFunction
{
public:
/// Given three consecutive polyline vertices "p,q,r", calculates the cost of removing
/// vertex "q", replacing edges "p-q" and "q-r" with edge "p-r".
/// Vertices "p,q,r" are consecutive in the current polyline, "possibly already simplified".
/// @param cdt The underlying constrained Delaunay triangulation which embeeds the polyline set
/// @param p The previous polyline vertex (given as a 'PolylineSimplificationVertex')
/// @param q The current polyline vertex about to be removed
/// @param r The next polyline vertex
/// @param original_subpolyline_points_begin Start iterator for the range of points that describe the original (unmodified) polyline subsequence from "p" to "r" (inclusive)
/// @param original_subpolyline_points_end Past-the-end iterator for the range of points that describe the original (unmodified) polyline subsequence from "p" to "r" (inclusive)
/// @return The cost for removing "q". A result of "boost::none" can be used to indicate an infinite or uncomputable cost.
template<class ConstrainedDelaunayTriangulation, class VertexHandle, class PointIterator>
boost::optional<double> operator()( ConstrainedDelaunayTriangulation const& cdt
, VertexHandle const& p
, VertexHandle const& q
, VertexHandle const& r
, PointIterator original_subpolyline_points_begin
, PointIterator original_subpolyline_points_end
) const ;
};

View File

@ -0,0 +1,22 @@
/// This classcept represent s wrap per are passed to the polyline simplification algorithm to calculate
/// the "cost" of removing a vertex. Such a cost represents some measure of the deviation error between the
/// polyline sets before and after removal. The smaller the error the lower the cost, and the algoritm processes
/// vertices in increasing cost order to preserve the overall polyline set shape as much as possible
/// concept
class PolylineSimplificationNode
{
public:
/// Returns the cost
template<class Tr, class VertexDescriptor, class PointIterator>
boost::optional<double> operator()( Tr const& aTr
, VertexDescriptor const& aPV
, VertexDescriptor const& aQV
, VertexDescriptor const& aRV
, PointIterator aOriginalSubpolyline_VerticesBegin
, PointIterator aOriginalSubpolyline_VerticesEnd
) const ;
};

View File

@ -0,0 +1,27 @@
/// Models of this concept are passed to the polyline simplification algorithm to indicate
/// when to stop the process.
///
/// @heading Has Models:
/// - CGAL::Polyline_simplification_2::Stop_below_count_ratio_threshold
/// - CGAL::Polyline_simplification_2::Stop_below_count_threshold
/// - CGAL::Polyline_simplification_2::Stop_below_cost_threshold
class PolylineSimplificationStopPredicate
{
public :
/// Indicates if the simplification must be stoped.
/// This is called right before each vertex is about to be removed
/// @param cdt The underlying constrained Delaunay triangulation which embeeds the polyline set
/// @param q The current vertex about to be removed (given as a PolylineSimplificationVertex)
/// @param cost The associated cost for removing the current vertex (as given by 'PolylineSimplificationCostFunction')
/// @param initial_count The initial number of vertices in the entire polyline set (including intersection vertices not in any source polyline)
/// @param current_count The current number of vertices
/// @return true if the algorithm should stop, false if it should continue
template<class ConstrainedDelaunayTriangulation, class VertexHandle>
bool operator()( ConstrainedDelaunayTriangulation const& cdt
, VertexHandle const& q
, double cost
, std::size_t initial_count
, std::size_t current_count
) const ;
};

View File

@ -0,0 +1,27 @@
/// An implementation-defined model of this concept is the vertex of the 2D constrained Delaunay triangulation that is used internally
/// by the polyline simplification data structure.
struct PolylineSimplificationVertex : CGAL::Triangulation_vertex_base_with_id_2
{
/// @return true if this vertex correspond to an endpoint of an open polyline
bool is_terminal() const ;
/// @return Sets whether the vertex is terminal or not.
void set_is_terminal( bool is ) ;
/// @return true if this vertex is shared by more than one polyline
bool is_shared() const ;
/// @return Sets whether the vertex is shared or not.
void set_is_shared( bool is ) ;
/// @return true if this vertex has been manually marked as fixed by the user
bool is_fixed() const ;
/// @return Sets whether the vertex is fixed or not.
void set_is_fixed( bool is );
/// @return The simplification cost for the vertex as computed by the 'PolylineSimplificationCostFunction'
boost::optional<double> cost() const ;
};

View File

@ -0,0 +1,45 @@
/// Modles of this concept represent a visitation function object whose methods are called at key steps during
/// the simplification process.
struct PolylineSimplificationVisitor
{
/// Called at the very beggining, before vertices are being collected for processing
void OnStarted() const {}
/// Called at the very end when the simplification finished
void OnFinished() const {}
/// Called when the 'PolylineSimplificationStopPredicate' returned true
void OnStopConditionReached() const {}
/// Called when a vertex that has been alreay classified as "removable" is put in the processing queue.
/// @param vertex the collected vertex (as a 'PolylineSimplificationVertex')
template<class VertexHandle>
void OnCollected( VertexHandle const& vertex ) const {}
/// Called when a vertex has been popped off the processing queue and will be removed
/// @param vertex the processed vertex
/// @param cost the cost of removing the current vertex as calculated by the 'PolylineSimplificationCostFunction'
/// @param initial_count the initial total number of vertices in the polyline set
/// @param current_count the current total number of vertices in the polyline set
template<class VertexHandle>
void OnSelected( VertexHandle const& vertex, boost::optional<double> const& cost, unsigned initial_count, unsigned current_count) const {}
/// Called just before a selected vertex is removed
/// @param p the previous vertex along the polyline
/// @param q the vetex about to be remove
/// @param r the next vertex along the polyline
template<class VertexHandle>
void OnRemoving( VertexHandle const& p, VertexHandle const& q, VertexHandle const& r) const {}
/// Called right after a selected vertex has been removed
/// @param p the remaning vertex along the polyline that was right before "q" (now removed)
/// @param r the remaning vertex along the polyline that was right after "q" (now removed)
template<class VertexHandle>
void OnRemoved( VertexHandle const& p, VertexHandle const& r) const {}
/// Called when a vertex that has been classified as "non-removable"
/// @param vertex the non-removable vertex
template<class VertexHandle>
void OnNonRemovable( VertexHandle const& vertex) const {}
};

View File

@ -0,0 +1,376 @@
// Copyright (c) 2012 Geometry Factory. All rights reserved.
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// $URL$
// $Id$
//
// Author(s) : Andreas Fabri
//
#ifndef CGAL_POLYLINE_SIMPLIFICATION_2_SIMPLIFY_H
#define CGAL_POLYLINE_SIMPLIFICATION_2_SIMPLIFY_H
#include <CGAL/Polyline_simplification_2/Squared_distance_cost.h>
#include <CGAL/Polyline_simplification_2/Scaled_squared_distance_cost.h>
#include <CGAL/Polyline_simplification_2/Hybrid_squared_distance_cost.h>
#include <CGAL/Polyline_simplification_2/Stop_below_count_ratio_threshold.h>
#include <CGAL/Polyline_simplification_2/Stop_below_count_threshold.h>
#include <CGAL/Polyline_simplification_2/Stop_above_cost_threshold.h>
#include <CGAL/Polyline_simplification_2/mark_vertices_unremovable.h>
#include <CGAL/Modifiable_priority_queue.h>
#include <list>
// Needed for Polygon_2
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Constrained_Delaunay_triangulation_2.h>
#include <CGAL/Polyline_constrained_triangulation_2.h>
#include <list>
namespace CGAL {
template < class Tr >
class Polyline_constrained_triangulation_2;
template <class PolygonTraits_2, class Container>
class Polygon_2;
namespace Polyline_simplification_2 {
template <typename PCT, typename CostFunction, typename StopFunction>
class Polyline_simplification_2
{
public:
typedef typename PCT::Point Point;
typedef typename PCT::Constraint_id Constraint_id;
typedef typename PCT::Constraint_iterator Constraint_iterator;
typedef typename PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
//typedef typename PCT::Points_in_constraint_iterator Points_in_constraint_iterator;
typedef typename PCT::Vertex_handle Vertex_handle;
typedef typename PCT::Vertex_circulator Vertex_circulator;
PCT& pct;
bool keep_points;
CostFunction cost;
StopFunction stop;
std::size_t pct_initial_number_of_vertices, number_of_unremovable_vertices;
struct Compare_cost
{
bool operator() ( Vertices_in_constraint_iterator const& x,
Vertices_in_constraint_iterator const& y ) const
{
return x->cost < y->cost;
}
} ;
struct Id_map : public boost::put_get_helper<std::size_t, Id_map>
{
typedef boost::readable_property_map_tag category;
typedef std::size_t value_type;
typedef value_type reference;
typedef Vertices_in_constraint_iterator key_type;
reference operator[] ( key_type const& x ) const { return x->id ; }
} ;
typedef CGAL::Modifiable_priority_queue<Vertices_in_constraint_iterator,Compare_cost,Id_map> MPQ ;
MPQ* mpq;
Polyline_simplification_2(PCT& pct, CostFunction cost, StopFunction stop, bool keep_points)
: pct(pct), cost(cost), stop(stop), keep_points(keep_points), pct_initial_number_of_vertices(pct.number_of_vertices()), number_of_unremovable_vertices(0)
{
std::cerr << pct_initial_number_of_vertices << std::endl;
int m = initialize_indices();
Compare_cost cc;
Id_map idm;
mpq = new MPQ(m, cc, idm);
initialize_costs();
}
Polyline_simplification_2(PCT& pct, Constraint_id cid, CostFunction cost, StopFunction stop, bool keep_points)
: pct(pct), cost(cost), stop(stop), keep_points(keep_points), pct_initial_number_of_vertices(pct.number_of_vertices()), number_of_unremovable_vertices(0)
{
int m = initialize_indices(cid);
Compare_cost cc;
Id_map idm;
mpq = new MPQ(m, cc, idm);
initialize_costs(cid);
}
~Polyline_simplification_2()
{
delete mpq;
}
Vertices_in_constraint_iterator
decrement(Vertices_in_constraint_iterator it)
{
do{
--it;
} while(it->removed);
return it;
}
Vertices_in_constraint_iterator
increment(Vertices_in_constraint_iterator it)
{
do{
++it;
} while(it->removed);
return it;
}
// For all polyline constraints we compute the cost of all non fixed and not removed vertices
int
initialize_costs(Constraint_id cid)
{
int n=0;
for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid);
it != pct.vertices_in_constraint_end(cid);
++it){
if(! it->fixed && ! it->removed){
Vertices_in_constraint_iterator u = decrement(it);
Vertices_in_constraint_iterator w = increment(it);
boost::optional<double> dist = cost(pct, u, it, w);
if(dist){
it->cost = *dist;
(*mpq).push(it);
++n;
} else {
it->cost = (std::numeric_limits<double>::max)();
std::cerr << "could not compute a cost" << std::endl;
}
}
}
return n;
}
void
initialize_costs()
{
int n=0;
Constraint_iterator cit = pct.constraints_begin(), e = pct.constraints_end();
for(; cit!=e; ++cit){
n+= initialize_costs(*cit);
}
std::cerr << "Initialized cost of " << n << " vertices" << std::endl;
}
bool
is_removable(Vertices_in_constraint_iterator it)
{
typedef PCT::Geom_traits Geom_traits;
if( it->removed || it->fixed){
return false;
}
Vertex_handle vh = it->vertex;
Vertices_in_constraint_iterator u = decrement(it);
Vertex_handle uh = u->vertex;
Vertices_in_constraint_iterator w = increment(it);
Vertex_handle wh = w->vertex;
Geom_traits::Orientation_2 orientation_2 = pct.geom_traits().orientation_2_object();
CGAL::Orientation o = orientation_2(uh->point(), vh->point(), wh->point());
if(o == CGAL::COLLINEAR){
return true;
}
if(o == CGAL::LEFT_TURN){
std::swap(uh,wh);
}
// uh, vh, wh perform a right turn
const Point& up = uh->point();
const Point& wp = wh->point();
Vertex_circulator circ = pct.incident_vertices(vh);
while(circ != uh){
++circ;
}
++circ;
while(circ != wh){
o = orientation_2(up, circ->point(), wp);
if(orientation_2(up, wp, circ->point()) != CGAL::RIGHT_TURN){
return false;
}
++circ;
}
return true;
}
int
initialize_indices(Constraint_id cid, int id = 0)
{
for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid);
it != pct.vertices_in_constraint_end(cid);
++it){
it->id = id++;
}
return id;
}
int
initialize_indices()
{
int id = 0;
Constraint_iterator b = pct.constraints_begin(), e = pct.constraints_end();
for(; b!=e; ++b){
id = initialize_indices(*b, id);
}
return id;
}
bool
operator()()
{
if((*mpq).empty()){
return false;
}
Vertices_in_constraint_iterator v = (*mpq).top();
(*mpq).pop();
if(stop(pct, v, v->cost, pct_initial_number_of_vertices, pct.number_of_vertices())){
return false;
}
if(is_removable(v)){
Vertices_in_constraint_iterator u = decrement(v), w = increment(v);
pct.simplify(u,v,w, keep_points);
if(! u->fixed){
Vertices_in_constraint_iterator uu = decrement(u);
boost::optional<double> dist = cost(pct, uu,u,w);
if(! dist){
std::cerr << "undefined cost not handled yet" << std::endl;
} else {
u->cost = *dist;
if((*mpq).contains(u)){
(*mpq).update(u, true);
}
}
}
if(! w->fixed){
Vertices_in_constraint_iterator ww = increment(w);
boost::optional<double> dist = cost(pct, u,w,ww);
if(! dist){
std::cerr << "undefined cost not handled yet" << std::endl;
} else {
w->cost = *dist;
if((*mpq).contains(w)){
(*mpq).update(w, true);
}
}
}
} else {
++number_of_unremovable_vertices;
}
return true;
}
std::size_t
number_of_removed_vertices() const
{
return pct_initial_number_of_vertices - pct.number_of_vertices();
}
};
template <class PolygonTraits_2, class Container, class CostFunction, class StopFunction>
CGAL::Polygon_2<PolygonTraits_2,Container>
simplify(const CGAL::Polygon_2<PolygonTraits_2,Container>& polygon,
CostFunction cost,
StopFunction stop)
{
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef CGAL::Triangulation_vertex_base_2<K> Vb;
typedef CGAL::Constrained_triangulation_face_base_2<K> Fb;
typedef CGAL::Triangulation_data_structure_2<Vb,Fb> TDS;
typedef CGAL::Exact_predicates_tag Itag;
typedef CGAL::Constrained_Delaunay_triangulation_2<K,TDS, Itag> CDT;
typedef CGAL::Polyline_constrained_triangulation_2<CDT> PCT;
typedef PCT::Constraint_id Constraint_id;
typedef PCT::Vertices_in_constraint_iterator Vertices_in_constraint_iterator;
PCT pct;
Constraint_id cid = pct.insert_constraint(polygon);
mark_vertices_unremovable(pct);
bool keep_points = false;
Polyline_simplification_2<PCT, CostFunction, StopFunction> simplifier(pct, cost, stop, keep_points);
while(simplifier()){}
CGAL::Polygon_2<PolygonTraits_2,Container> result;
for(Vertices_in_constraint_iterator it = pct.vertices_in_constraint_begin(cid);
it != pct.vertices_in_constraint_end(cid);
it++){
if(! it->removed){
result.push_back(it->point);
}
}
return result;
}
template <class Tr, class CostFunction, class StopFunction>
std::size_t
simplify(CGAL::Polyline_constrained_triangulation_2<Tr>& pct,
typename CGAL::Polyline_constrained_triangulation_2<Tr>::Constraint_id cid,
CostFunction cost,
StopFunction stop,
bool keep_points = false)
{
typedef CGAL::Polyline_constrained_triangulation_2<Tr> PCT;
Polyline_simplification_2<PCT, CostFunction, StopFunction> simplifier(pct, cid, cost, stop, keep_points);
while(simplifier()){}
if(! keep_points){
pct.remove_points_from_constraints(cid);
}
return simplifier.number_of_removed_vertices();
}
template <class Tr, class CostFunction, class StopFunction>
std::size_t
simplify(CGAL::Polyline_constrained_triangulation_2<Tr>& pct,
CostFunction cost,
StopFunction stop,
bool keep_points = false)
{
typedef CGAL::Polyline_constrained_triangulation_2<Tr> PCT;
Polyline_simplification_2<PCT, CostFunction, StopFunction> simplifier(pct, cost, stop, keep_points);
while(simplifier()){}
if(! keep_points){
pct.remove_points_from_constraints();
}
std::cerr << "unremovable vertices: " << simplifier.number_of_unremovable_vertices << std::endl;
std::cerr << "simplify removed " << simplifier.number_of_removed_vertices() << "vertices" << std::endl;
return simplifier.number_of_removed_vertices();
}
} // namespace polyline_simplification_2
} // namespace CGAL
#endif CGAL_POLYLINE_SIMPLIFICATION_2_SIMPLIFY_H

View File

@ -0,0 +1,473 @@
#pragma warning( disable : 4503 )
#include <fstream>
#include <vector>
// CGAL headers
#include <CGAL/Bbox_2.h>
#include <CGAL/assertions_behaviour.h>
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Timer.h>
#define CGAL_TESTING_POLYLINE_SIMPLIFICATION
#define CGAL_POLYLINE_SIMPLIFICATION_TRACE_LEVEL 15
bool lAppToLog = false ;
void Polyline_simplification_2_external_trace( std::string m )
{
std::ofstream out("polysim_log.txt", ( lAppToLog ? std::ios::app | std::ios::ate : std::ios::trunc | std::ios::ate ) );
out << std::setprecision(19) << m << std::endl << std::flush ;
lAppToLog = true ;
}
#define STR(m) static_cast<std::ostringstream&>( std::ostringstream() << std::string() << m << std::endl ).str()
int sErrors = 0 ;
void error ( std::string msg )
{
std::cerr << msg << std::endl ;
++ sErrors ;
}
void error_handler ( char const* what, char const* expr, char const* file, int line, char const* msg )
{
error( STR( "CGAL error: " << what << " violation!" << std::endl
<< "Expr: " << expr << std::endl
<< "File: " << file << std::endl
<< "Line: " << line << std::endl
<< "Explanation:" << ( msg ? msg : "" )
)
) ;
throw std::runtime_error("CGAL ERROR");
}
#include <CGAL/Polyline_simplification_2/Stop_below_count_threshold.h>
#include <CGAL/Polyline_simplification_2/Squared_distance_cost.h>
#include <CGAL/Polyline_simplification_2.h>
using namespace std ;
namespace PS2 = CGAL::Polyline_simplification_2 ;
typedef CGAL::Exact_predicates_inexact_constructions_kernel K;
typedef K::Point_2 Point_2;
typedef CGAL::Simplify_polylines_2<K> PS;
typedef PS::Vertex_handle Vertex_handle ;
typedef PS::Open_polyline Open_polyline ;
typedef PS::Open_polyline_handle Open_polyline_handle ;
typedef PS::Closed_polyline Closed_polyline ;
typedef PS::Closed_polyline_handle Closed_polyline_handle ;
void dump_polygon( Closed_polyline_handle aPoly )
{
Closed_polyline::Circulator h = aPoly->circulator();
Closed_polyline::Circulator c = h ;
do
{
std::cout << "V" << c->id() << " " ;
}
while ( ++ c != h ) ;
std::cout << std::endl ;
}
typedef std::vector<int> ID_vector ;
typedef std::vector<Point_2> Point_vector ;
Point_vector dump_vertex_point_sequence( Open_polyline_handle aPoly )
{
Point_vector rSeq ;
for ( Open_polyline::Iterator it = aPoly->begin() ; it != aPoly->end() ; ++ it )
{
rSeq.push_back( it->point() ) ;
}
return rSeq ;
}
Point_vector dump_vertex_point_sequence( Closed_polyline_handle aPoly )
{
Point_vector rSeq ;
Closed_polyline::Circulator h = aPoly->circulator();
Closed_polyline::Circulator c = h ;
do
{
rSeq.push_back( c->point() ) ;
}
while ( ++ c != h ) ;
return rSeq ;
}
ID_vector dump_vertex_id_sequence( Open_polyline_handle aPoly )
{
ID_vector rSeq ;
for ( Open_polyline::Iterator it = aPoly->begin() ; it != aPoly->end() ; ++ it )
{
rSeq.push_back( it->id() ) ;
}
return rSeq ;
}
ID_vector dump_vertex_id_sequence( Closed_polyline_handle aPoly )
{
ID_vector rSeq ;
Closed_polyline::Circulator h = aPoly->circulator();
Closed_polyline::Circulator c = h ;
do
{
rSeq.push_back( c->id() ) ;
}
while ( ++ c != h ) ;
return rSeq ;
}
template<class T>
std::string to_string( T const& t )
{
std::ostringstream ss ;
ss << t ;
return ss.str();
}
std::string to_string( Vertex_handle const& v )
{
std::ostringstream ss ;
ss << "[" << v->id() << "@" << v->point() << "]" ;
return ss.str();
}
template<class It>
std::string sequence_to_string( It beg, It end )
{
std::ostringstream ss ;
ss << "[" ;
while ( beg != end )
ss << to_string(*(beg++)) << "," ;
ss << "]";
return ss.str();
}
template<class InputIteratorA, class InputIteratorB>
void check_sequence ( InputIteratorA got_beg, InputIteratorA got_end, InputIteratorB expected_beg, InputIteratorB expected_end )
{
std::size_t got_s = std::distance(got_beg, got_end) ;
std::size_t expected_s = std::distance(expected_beg, expected_end) ;
bool ok = false ;
if ( got_s == expected_s )
{
std::pair<InputIteratorA,InputIteratorB> mr = std::mismatch(got_beg,got_end,expected_beg);
if ( mr.first == got_end || mr.second == expected_end )
ok = true ;
}
if ( !ok )
error( STR("Vertex sequences mismatch:\n Got=" << sequence_to_string(got_beg, got_end) << "\n Expected=" << sequence_to_string(expected_beg, expected_end)) );
}
void test_crosses_case_0()
{
std::cout << "Testing crossing polygons case 0" << std::endl ;
PS ps;
Point_2 lPtsA[4] = { Point_2(0,-10)
, Point_2(10,-10)
, Point_2(10,20)
, Point_2(0,20)
} ;
Point_2 lPtsB[4] = { Point_2(-10,0)
, Point_2(20,0)
, Point_2(20,10)
, Point_2(-10,10)
} ;
Closed_polyline_handle lPolyA = ps.insert_polygon(lPtsA,lPtsA+4) ;
Closed_polyline_handle lPolyB = ps.insert_polygon(lPtsB,lPtsB+4) ;
ps.simplify( PS2::Stop_below_count_threshold(0), PS2::Squared_distance_cost()) ;
ID_vector lSeqA = dump_vertex_id_sequence(lPolyA);
ID_vector lSeqB = dump_vertex_id_sequence(lPolyB);
int lExpectedA[] = {9,10,11,8} ;
int lExpectedB[] = {8,9,10,11};
check_sequence(lSeqA.begin(), lSeqA.end(), lExpectedA, lExpectedA+4);
check_sequence(lSeqB.begin(), lSeqB.end(), lExpectedB, lExpectedB+4);
Point_2 lResA[4] = { Point_2(10,0)
, Point_2(10,10)
, Point_2(0,10)
, Point_2(0,0)
} ;
Point_2 lResB[4] = { Point_2(0,0)
, Point_2(10,0)
, Point_2(10,10)
, Point_2(0,10)
} ;
Point_vector lPA = dump_vertex_point_sequence(lPolyA);
Point_vector lPB = dump_vertex_point_sequence(lPolyB);
check_sequence(lPA.begin(), lPA.end(), lResA, lResA+4);
check_sequence(lPB.begin(), lPB.end(), lResB, lResB+4);
}
void test_crosses_case_1()
{
std::cout << "Testing crossing polygons case 1" << std::endl ;
PS ps;
Point_2 lPtsA[4] = { Point_2(0,0)
, Point_2(10,0)
, Point_2(10,10)
, Point_2(0,10)
} ;
Point_2 lPtsB[4] = { Point_2(5,-5)
, Point_2(15,-5)
, Point_2(15,15)
, Point_2(5,15)
} ;
Closed_polyline_handle lPolyA = ps.insert_polygon(lPtsA,lPtsA+4) ;
Closed_polyline_handle lPolyB = ps.insert_polygon(lPtsB,lPtsB+4) ;
ps.simplify( PS2::Stop_below_count_threshold(0), PS2::Squared_distance_cost()) ;
ID_vector lSeqA = dump_vertex_id_sequence(lPolyA);
ID_vector lSeqB = dump_vertex_id_sequence(lPolyB);
int lExpectedA[] = {9,8,3} ;
int lExpectedB[] = {5,6,8,9};
check_sequence(lSeqA.begin(), lSeqA.end(), lExpectedA, lExpectedA+3);
check_sequence(lSeqB.begin(), lSeqB.end(), lExpectedB, lExpectedB+4);
Point_2 lResA[3] = { Point_2(5,0)
, Point_2(5,10)
, Point_2(0,10)
} ;
Point_2 lResB[4] = { Point_2(15,-5)
, Point_2(15,15)
, Point_2(5,10)
, Point_2(5,0)
} ;
Point_vector lPA = dump_vertex_point_sequence(lPolyA);
Point_vector lPB = dump_vertex_point_sequence(lPolyB);
check_sequence(lPA.begin(), lPA.end(), lResA, lResA+3);
check_sequence(lPB.begin(), lPB.end(), lResB, lResB+4);
}
void test_crosses_case_2()
{
std::cout << "Testing crossing polylines case 0" << std::endl ;
PS ps;
Point_2 lPtsA[4] = { Point_2(0,0)
, Point_2(10,10)
, Point_2(20,0)
} ;
Point_2 lPtsB[4] = { Point_2(10,20)
, Point_2(10,0)
} ;
Open_polyline_handle lPolyA = ps.insert_polyline(lPtsA,lPtsA+3) ;
Open_polyline_handle lPolyB = ps.insert_polyline(lPtsB,lPtsB+2) ;
ps.simplify( PS2::Stop_below_count_threshold(0), PS2::Squared_distance_cost()) ;
ID_vector lSeqA = dump_vertex_id_sequence(lPolyA);
ID_vector lSeqB = dump_vertex_id_sequence(lPolyB);
int lExpectedA[] = {0,1,2} ;
int lExpectedB[] = {3,1,4} ;
check_sequence(lSeqA.begin(), lSeqA.end(), lExpectedA, lExpectedA+3);
check_sequence(lSeqB.begin(), lSeqB.end(), lExpectedB, lExpectedB+3);
Point_2 lResA[3] = { Point_2(0,0)
, Point_2(10,10)
, Point_2(20,0)
} ;
Point_2 lResB[3] = { Point_2(10,20)
, Point_2(10,10)
, Point_2(10,0)
} ;
Point_vector lPA = dump_vertex_point_sequence(lPolyA);
Point_vector lPB = dump_vertex_point_sequence(lPolyB);
check_sequence(lPA.begin(), lPA.end(), lResA, lResA+3);
check_sequence(lPB.begin(), lPB.end(), lResB, lResB+3);
}
struct Visitor
{
Visitor( ID_vector* aSeq ) : mSeq(aSeq) {}
void OnStarted() const {}
void OnFinished() const {}
void OnStopConditionReached() const {}
template<class VH>
void OnCollected( VH const& ) const {}
template<class VH>
void OnSelected( VH const&, boost::optional<double> const&, unsigned, unsigned ) const {}
template<class VH>
void OnRemoving( VH const&, VH const& aV, VH const& ) const { mSeq->push_back(aV->id()) ; }
template<class VH>
void OnRemoved( VH const&, VH const&) const {}
template<class VH>
void OnNonRemovable( VH const& ) const {}
ID_vector* mSeq ;
} ;
void test_removal()
{
std::cout << "Testing removal sequence" << std::endl ;
PS ps;
Point_2 lPts[10] = { Point_2(0,0)
, Point_2(1,1)
, Point_2(3,-3)
, Point_2(9,9)
, Point_2(0,18)
} ;
Open_polyline_handle lPoly = ps.insert_polyline(lPts,lPts+5) ;
ID_vector lRemovedSeq ;
Visitor vis(&lRemovedSeq) ;
ps.simplify( PS2::Stop_below_count_threshold(7), PS2::Squared_distance_cost(), vis) ;
int lExpected[] = {1,2,3} ;
check_sequence(lRemovedSeq.begin(), lRemovedSeq.end(), lExpected, lExpected+3);
Point_2 lRes[7] = { Point_2(0,0)
, Point_2(0,18)
} ;
Point_vector lPP = dump_vertex_point_sequence(lPoly);
check_sequence(lPP.begin(), lPP.end(), lRes, lRes+2);
}
void test_fixed()
{
std::cout << "Testing fixed vertices" << std::endl ;
PS ps;
Point_2 lPts[10] = { Point_2(0,0)
, Point_2(1,1)
, Point_2(2,0)
, Point_2(6,0)
, Point_2(7,2)
, Point_2(8,0)
, Point_2(13,0)
, Point_2(14,4)
, Point_2(15,0)
, Point_2(19,0)
} ;
Open_polyline_handle lPoly = ps.insert_polyline(lPts,lPts+10) ;
for ( Open_polyline::Iterator it = lPoly->begin() ; it != lPoly->end() ; ++ it )
if ( it->point().y() == 0 )
it->set_is_fixed(true);
ID_vector lRemovedSeq ;
Visitor vis(&lRemovedSeq) ;
ps.simplify( PS2::Stop_below_count_threshold(7), PS2::Squared_distance_cost(), vis) ;
int lExpected[] = {1,4,7} ;
check_sequence(lRemovedSeq.begin(), lRemovedSeq.end(), lExpected, lExpected+3);
Point_2 lRes[7] = { Point_2(0,0)
, Point_2(2,0)
, Point_2(6,0)
, Point_2(8,0)
, Point_2(13,0)
, Point_2(15,0)
, Point_2(19,0)
} ;
Point_vector lPP = dump_vertex_point_sequence(lPoly);
check_sequence(lPP.begin(), lPP.end(), lRes, lRes+7);
}
int main(int argc, char **argv)
{
int rOK = 1 ;
CGAL::set_error_handler (error_handler);
CGAL::set_warning_handler(error_handler);
try
{
test_crosses_case_0();
test_crosses_case_1();
test_crosses_case_2();
test_removal();
test_fixed();
rOK = sErrors == 0 ;
}
catch(exception& e)
{
cerr << e.what() << "\n";
}
return rOK ;
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
2
4
-0.8 -0.4
0.8 -0.4
0.8 0.4
-0.8 0.4
4
-0.4 -0.2
0.4 -0.2
0.4 0.2
-0.4 0.2

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,995 @@
1
993
142.528622059284 267.551290109461
142.102196751295 267.420185967987
141.749529509006 267.113055064981
141.577471850572 266.658760651653
141.692875294147 266.086165979212
142.131916029511 265.612058832949
142.278340367733 265.137320115869
142.218843473254 264.659066632097
142.040120510517 264.174415185755
141.671777038036 263.174385621851
141.655546857176 262.653241112535
141.866871265827 262.114165857141
142.434497265278 260.878669336145
142.644948987423 260.228667333429
142.759869007526 259.53216512472
142.249853758274 259.066325500315
141.621244816242 258.82417066366
140.27787437862 258.563170984095
139.469840882478 259.21368731529
138.855295328556 259.973622396295
138.383319912611 260.81505013973
138.002996830402 261.710044458216
137.313636450229 263.549028470819
136.902763543783 264.437165990179
136.379871754108 265.267165735071
136.418364795057 265.931673623329
136.370615182577 266.459297433203
136.25165368071 266.860692463522
136.076511053501 267.146514013117
135.617805479227 267.414057865446
135.114744572101 267.347171380823
134.687574444471 267.031096949881
134.456541208683 266.551076963251
134.541890977083 265.992353811567
135.063869862018 265.440169885462
134.789603738247 263.620169236963
134.846972895919 262.729410364931
135.029744533954 261.865417077845
135.334719402848 261.038642838304
135.758698253093 260.259541108911
136.298481835185 259.538565352266
136.950870899616 258.88616903097
136.456704614816 259.032862379854
136.023042349277 258.975027635401
135.262745289264 258.498290613001
134.521010546146 257.960991456812
134.110551176725 257.827454045122
133.648868946491 257.868163659876
131.771746067463 259.540917947596
131.013418344913 260.511077239817
130.784190772234 261.07742540509
130.694874195514 261.716170862024
130.095355777202 262.825296953028
129.623996166645 263.978671624964
128.757870106159 266.334167077845
128.466633049904 266.544768348043
128.103653339802 266.666153981989
127.319872288166 266.656795099085
126.977774111686 266.533808961218
126.721339611469 266.337123945063
126.589920370041 266.07061924011
126.622867969928 265.738174035852
127.182927785574 265.450063451832
127.536338953434 265.065872028177
127.732578037439 264.608298584526
127.82112160152 264.100041940515
127.873028425632 263.022274329966
127.935344813524 262.498161002701
128.087871937214 262.014159753626
128.509574560581 261.012352302378
129.059246448932 260.049916818445
130.272869495807 258.216170862024
129.391635088382 257.907841041391
128.419744877277 257.669541909998
127.461916593967 257.692056491678
127.020999966322 257.860738619869
126.622867969928 258.166167810266
124.611995129047 261.362794473474
123.676355151592 262.984404399698
122.898868946491 264.671172693079
122.211719242988 265.073309406345
121.712104229389 265.135779216593
121.393777934967 264.938163801735
121.250494388996 264.560044839685
121.27600762075 264.081004008358
121.464071659504 263.580622985666
121.80844053453 263.138483449524
122.302868275104 262.834167077845
122.189766077457 261.832194074696
122.181979565082 261.021435573404
122.282919077335 260.356762692039
122.495994953571 259.79304654867
123.272197155414 258.787968948191
123.842144159733 258.256349727219
124.537868885456 257.645171716516
123.748511819301 257.374903753107
122.896247295795 257.195293023889
122.020543841778 257.159872129267
121.160869984089 257.322173669641
120.386869324504 258.088989481037
119.718418864666 259.185653522318
118.521497158466 261.83279187948
117.904690219222 263.115398987835
117.21676209396 264.19211991102
116.413544936238 264.929021045273
115.954900518192 265.128184940373
115.450870899616 265.192168786829
115.166447786747 264.860210492914
115.035494236408 264.45353658468
115.103870777546 263.603164270227
115.627354351936 263.351257219618
115.963794617115 263.002400472467
116.161179868637 262.580770030325
116.267498402057 262.110541894739
116.398888496814 261.120996549433
116.519936649261 260.65003134281
116.741871265827 260.227172448938
117.68249836391 258.746419503992
118.752872852741 257.396163537805
118.087013749538 256.878038719004
117.316247372089 256.564664438074
116.494293002544 256.474790408914
115.674869923053 256.627166345423
114.843030652164 257.505357637709
114.159901945053 258.523809507196
112.940620331226 260.66729314596
112.254889479039 261.635223999327
111.41871329969 262.429213598078
110.357302820442 262.970711484259
109.718763164377 263.122229017024
108.995869068561 263.181167199915
109.045528045057 262.41154618532
109.332010833679 261.738698556726
109.782579278706 261.131522848909
110.324495224415 260.558917596643
111.391416994987 259.393012597864
111.770946508406 258.7375099209
111.950870899616 257.992171838587
112.334840206562 257.454123571222
112.82587185329 256.962295129602
113.96187248653 256.155166223352
112.279371170459 255.593667581385
111.447777358947 255.509416892832
110.485870747028 255.683166101282
109.948712555824 256.31251813442
109.536417631565 257.010728910273
108.905995754657 258.517165735071
108.233761457859 260.009354665583
107.769201008735 260.689755573576
107.158871082721 261.294173791712
106.588244347034 261.194913461512
106.091869739948 260.87216146261
106.650041489063 259.970709398096
106.873244671283 258.985538080042
106.984871296344 256.801162317102
107.596792666374 256.120214298075
108.285495666919 255.562543466394
109.715870289264 254.566161706751
109.036246208606 253.821662500208
108.226871876178 253.077163293665
107.088714210449 253.755198552912
106.104120163379 254.572917535608
105.708725651859 255.057421222036
105.398901431022 255.60476119787
105.190373962877 256.224242582624
105.09886970943 256.925170495813
104.89808408743 257.382904275959
104.625275163112 257.724856212442
103.914868740497 258.128915384119
103.070213107525 258.272349670237
102.193870930134 258.290160730188
102.207573322712 257.926836088007
102.435494808613 257.598292901819
102.71010389751 257.274436071222
102.863869099079 256.925170495813
102.9505883736 255.782791211908
103.298119930683 254.731166436975
103.925026087223 253.814541890924
104.849869160114 253.077163293665
106.069870380817 252.794416024988
106.585464386402 252.48682196409
106.935871509968 252.009170129602
106.525791151582 251.672740116423
106.100042848049 251.515244558161
105.22249546474 251.596290185755
103.509869007526 252.357162072962
102.911275712906 252.846228435343
102.408120064197 253.458669259851
101.622871784626 254.839171960657
101.872937647758 255.136575206821
101.959527162967 255.47541697294
101.737620739399 256.161164834803
101.147839693485 256.663913085764
100.774585930763 256.774005338257
100.380871204792 256.751159265345
100.088104514538 256.564915731256
99.9744943661077 256.266917779749
99.958870319782 255.55917318136
100.489122500776 255.143538489645
100.732511131225 254.659244611566
100.765994934498 253.591788842981
100.759738704322 253.062181725805
100.873916117607 252.571024968927
101.210351472853 252.145095959013
101.870869068561 251.811172082727
104.278870014606 250.296172693079
104.104886202274 250.019433334177
103.779495624958 249.793790414637
103.374791769443 249.689085796183
102.962868122516 249.77516134054
102.208858577667 250.200904115742
101.589228062092 250.737787082498
101.082449166237 251.36429481179
100.666994480549 252.058911874597
100.023948101459 253.566412284677
99.4878696483953 255.088164880579
98.9816197437627 255.389165475672
98.4198688549382 255.336165979212
98.1039165539129 255.06768377096
98.0694946331365 254.715293481653
98.2958683056218 254.020171716516
98.9904201162441 253.354261353319
99.3969011587484 252.537027910059
99.7856201214177 250.718543603723
99.98784263259 249.852268650835
100.341963557659 249.104622438257
100.957975192128 248.543092921083
101.398562617732 248.35321190924
101.945869831501 248.235168054407
101.701554922519 247.874419644182
101.673228649555 247.307608201807
101.827691702305 246.610389902895
102.131744770466 245.858420923059
102.552188543735 245.127357437914
103.055823711811 244.492855623072
103.60945096439 244.030571654146
104.179870991169 243.816161706751
104.821291951595 243.291337564295
105.528245357929 242.966292932337
106.250011710582 242.942182138269
106.935871509968 243.320159509485
106.428417114673 243.690194919413
105.818495182453 243.860166147058
105.190010933338 243.983637168711
104.62686958736 244.214171960657
103.983510164676 244.865406349008
103.260744480549 245.657544687097
103.010824499784 246.077361151283
102.910541204868 246.497493579691
103.016390679537 246.906305297916
103.384869007526 247.292159631555
103.708803465722 246.658101185863
104.11390170282 246.091728999918
105.119871048389 245.135419442957
106.307340113579 244.369983032053
107.580871967731 243.742171838587
108.428620247303 243.863162591761
108.806838361679 244.004006936853
109.070869831501 244.338164880579
108.634932903705 244.65714986593
108.136371044574 244.899539544886
107.108871845661 245.331161096399
105.874355880676 246.016150548761
105.115245727955 246.813541009729
104.732448069511 247.81924255163
104.62686958736 249.12916524679
105.026422647892 249.286486819094
105.310229448734 249.278479173487
105.502137689052 249.140064671343
105.625995068012 248.906165674036
105.764948038517 248.291603639429
105.917869953571 247.714171960657
106.734900741039 246.87446530134
107.630869297443 246.134790017908
108.619838265835 245.651053264444
109.153592480479 245.553882822102
109.715870289264 245.579162195032
109.955151168762 245.776885583704
110.250120071827 245.895667627161
110.470464198051 246.060947015589
110.485870747028 246.398162439173
109.150214342533 246.998321130579
108.524187026678 247.478201105898
107.965120701252 248.050166681116
107.50233566588 248.69338174135
107.165152220188 249.387010171717
106.982890663801 250.110215857332
106.984871296344 250.842162683313
107.28324547237 251.283044412439
107.439228920398 251.463591888254
107.655868915973 251.537170007532
108.361431269108 250.257667615717
109.318619160114 249.119914605921
110.462182669101 248.154286458795
111.726871876178 247.391158654993
112.044730572162 247.358228042429
112.313745884357 247.478669717615
112.620869068561 247.938170984095
112.518357662616 248.46957902581
112.271588472782 248.843323066538
111.915459899364 249.09955166251
111.48487034267 249.278413369959
110.53990188068 249.564630344217
110.095319775997 249.752282723492
109.715870289264 250.023162439173
109.457870749889 250.557148530786
109.309370426594 251.149539544886
109.070869831501 252.257171228235
109.683401553093 252.911874130075
110.414620308338 253.452294900721
111.224964229522 253.866902187174
112.074871448932 254.144164636438
112.236324196814 253.38570000202
112.29718324369 252.600445821588
112.366120247303 251.065913751429
112.498698210476 250.374808326071
112.779682485519 249.773258283441
113.27132307565 249.290349855726
114.035869984089 248.95516927511
114.926620869098 249.141662195032
115.275340227543 249.388567045038
115.500873951374 249.77516134054
115.345216302334 250.314134671991
115.001120953022 250.774169519251
114.596650866924 251.206452443903
114.259869007526 251.662170007532
113.930493740497 253.126666620081
113.787868885456 254.666167810266
114.407808808742 255.137154414957
115.100121883808 255.401044442957
116.617870716511 255.55917318136
116.552996067463 254.137775972193
116.844370274006 252.788287713831
117.4942449612 251.582989290064
117.954323617874 251.056999042337
118.504871754108 250.59416158468
118.987525658814 250.749370734846
119.334183631597 250.935227676933
119.678433565555 251.387505843943
119.655465124307 251.928237899845
119.383121876178 252.534665658777
118.561685232578 253.853575542276
118.248278973757 254.520541295116
118.156872181354 255.162170007532
118.198937488852 255.707615956371
118.527714042125 256.111358478372
119.063443942128 256.379631921356
119.726369289814 256.518670633142
120.436732186137 256.534708961552
121.114774732052 256.433981254404
121.680739028512 256.22272185952
122.054867176471 255.90716512472
122.273181347309 254.544834688013
122.405619053303 253.126536920374
122.561040846763 252.460472896402
122.84068146175 251.857304170435
123.293103544174 251.342659786051
123.966869739948 250.942168786829
124.242917684971 250.84708960325
124.500496296344 250.929292276209
124.884869007526 251.364165857141
124.676432995258 252.56772907049
124.27712097591 253.824916436975
124.146980492531 254.452525391882
124.138433842121 255.068227842157
124.307918636261 255.663586273497
124.71187248653 256.230163171595
125.925123600422 256.800792291468
126.593435673176 256.935120656794
127.268871693073 256.925170495813
127.53687633401 256.271852150267
127.505291728435 255.618511274164
127.001744656025 254.330417230432
126.758977128325 253.704991712873
126.675010232387 253.098198964899
126.864441437779 252.514702811544
127.441868214069 251.959167077845
128.177995113788 251.922290399378
128.528479365764 251.966617181604
128.85786858028 252.183166101282
128.98015409535 252.590843215292
128.939337877689 252.963586881464
128.599869160114 253.64154012472
128.302400259433 254.291558339899
128.314083812891 254.629383220976
128.509869007526 254.988174035852
128.869701264559 255.294798507994
129.167213110386 255.667810514276
129.68936958736 256.459292962854
129.971061227976 256.800911321943
130.304526476322 257.055213048761
130.718288837133 257.183772101705
131.240871815143 257.148162439173
133.226871876178 256.925170495813
132.851370243488 255.115415170496
132.727650551258 254.204914882486
132.82986870235 253.250167444055
133.091044349728 252.910889371937
133.300199536739 252.484823062723
133.689246563373 251.574918344324
133.932537419854 251.192376240795
134.250605849682 250.925638511484
134.675151361285 250.825353309219
135.237873463093 250.942168786829
135.508543638645 251.095620229547
135.579246906696 251.351539209192
135.510263590275 251.626020505732
135.361874012409 251.835158899134
134.872424913703 252.263231768911
134.588980464397 252.754713132685
134.473138136922 253.293888464277
134.486495403705 253.865043237513
134.747198609768 255.040433004206
135.063869862018 256.155166223352
135.361319033561 256.775079354351
135.785776524006 257.248227908914
136.30928119844 257.581595822876
136.903871921955 257.782167032068
138.194466976581 257.812855079477
138.834549037872 257.65693978936
139.4338726086 257.396163537805
138.868745235859 255.168416574305
138.812167672573 254.07291729719
139.085873035846 252.903167321985
139.044638542591 252.392777755564
139.046247868 251.752542093103
139.12185934013 251.503234669273
139.278670219837 251.364868953531
139.540176658092 251.385246023243
139.929874805866 251.612166955774
140.28958196765 251.907282724684
140.507293967663 252.227102353876
140.712247280536 252.900165155237
140.935764340816 253.549979284113
141.176681025086 253.840738072699
141.568874744831 254.095168664759
141.720872311054 256.062415674036
141.907216100155 257.055323198145
142.337871937214 257.992171838587
143.279169110714 258.384171321695
144.392497448383 258.575917795008
145.515013961254 258.488288238352
146.028829349337 258.314981504982
146.483875660358 258.042159631555
145.711528806148 257.068646028345
145.069121746479 256.006537988489
144.780341414867 254.851240709131
144.838463438807 254.237210228746
145.068874744831 253.598159387415
144.62053732401 253.264739796226
144.459684876857 252.851175620859
144.528801633177 252.423009857243
144.770371822773 252.045785501306
145.126879675446 251.785045548981
145.540809421001 251.706332996195
145.954645289241 251.875190838879
146.310871509968 252.357162072962
146.270370869098 253.089292123621
146.061870960651 253.74716146261
147.05221465057 254.618043020075
147.837621120868 255.668170526331
148.548402099071 256.788044050043
149.314869312702 257.868163659876
150.162512330471 258.175461604898
151.105496792255 258.240792825525
152.034417895733 258.064061477487
152.839870838581 257.645171716516
151.852308062969 256.818670585459
151.195121197162 255.78291852743
150.863809136806 254.579541995829
150.853870777546 253.250167444055
150.512499241291 253.061166360681
150.207874683796 252.779159143274
150.171656040607 252.433212831324
150.326124576984 252.15504415304
150.778873829303 251.662170007532
151.200938372074 251.829241409605
151.515952019153 252.092746808832
151.927248386799 252.819293573206
152.217606453357 253.662278249567
152.591869739948 254.442168786829
153.099512962757 255.30118449003
153.767748264728 256.099542215174
155.371876148639 257.570159509485
156.390905289112 257.400103166407
157.395872501789 257.157668664759
158.38209143108 257.077980592554
159.344875721393 257.396163537805
158.960578231273 256.033835246866
158.338998226581 254.746038034265
157.494105367122 253.542054488962
156.439869312702 252.431167199915
156.46501584178 252.139253213709
156.646278647838 251.903555467432
156.941025180875 251.730132177179
157.306622890888 251.625041559046
158.079841641842 251.644091203516
158.40219758278 251.78034789831
158.62487450069 252.009170129602
158.54236125773 252.482238456314
158.593090681492 252.870967223947
158.984871296344 253.467546060388
159.581403879581 253.943186595743
160.163875965534 254.442168786829
162.000873951374 257.322173669641
162.817122845112 257.433791711634
163.763874439655 257.471160486048
164.849997906147 257.747163369959
165.404544143139 257.830604389017
165.972874073444 257.744170739954
166.212240455805 257.1427897659
166.032310156284 256.555810287302
165.559786258398 255.978603705471
164.921371845661 255.406541421717
163.653683809696 254.259335353678
163.277816353498 253.674934372013
163.24287071651 253.077163293665
162.494248775898 252.474795892542
162.240077523647 252.113185956781
162.248875050007 251.612166955774
162.658563761173 251.318376555746
163.012576965748 251.219527318781
163.315707592426 251.282279386824
163.572748569904 251.473292901819
163.967733292041 252.106744840448
164.235874561725 252.853164270227
165.4554057402 253.414371087854
166.491374401508 254.287292077845
167.318092135845 255.374148919886
167.909870533405 256.577163293665
168.634591607509 256.87496359617
169.424373058735 256.853543832605
170.938869862018 256.403167321985
170.951590566097 255.731665447061
170.687373547016 255.069165780847
170.306906012951 254.434415176218
169.970875172077 253.846160486048
169.002249149738 253.061290338343
168.678670553623 252.551151349848
168.629871754108 251.959167077845
168.239928586541 251.888723507231
167.903574971615 251.701244428461
167.446996120868 251.118289544886
167.35445074564 250.794368639295
167.370854644237 250.496522023981
167.510047746955 250.26052714855
167.785869984089 250.12216146261
168.688621906696 250.289916589563
169.045873073993 250.541513040369
169.274876026569 250.942168786829
169.192808149515 251.253115430181
169.241967348514 251.443745687311
169.607122806965 251.587291314905
170.116654066501 251.619274213617
170.516872791706 251.786162927454
171.42362215942 252.665900304621
172.148871807514 253.703792169397
172.827622680126 254.788370206659
173.594875721393 255.808166101282
174.510047583042 256.121151759928
175.478750614582 256.096543863123
177.418873218952 255.73316915304
177.42771589583 255.235086336439
177.275671629368 254.792586400812
176.646000294147 254.017287805384
175.844015268741 253.293178632563
175.1838726086 252.506164148157
174.476498035846 252.415916040247
174.171512512623 252.306762292688
173.991871265827 252.009170129602
174.302623180805 251.450791909998
174.83687248653 251.11517293722
175.578072143851 251.025549366777
176.26965406364 251.223749711817
176.906344933568 251.646504595583
177.482871441303 252.230544641321
178.434338120876 253.629402711695
178.798731668053 254.31768198282
179.081867603718 254.914168908899
180.51237526363 254.615792825525
181.235690025745 254.431961372202
182.035877613483 254.318160608118
181.624607948719 253.218849017923
181.073746113239 252.226415231531
180.401948837696 251.336357429331
179.627872852741 250.544173791712
179.605296997486 250.234263017481
179.745750812946 249.982665613001
180.198871998249 249.700164392298
180.750604508577 249.826381101911
181.199843553959 250.098823621576
181.930624393879 250.895167901819
182.670780806003 251.714760854547
183.131739316641 252.016264214819
183.699879078327 252.183166101282
184.084246067463 252.726041391199
184.202042250095 253.017494037455
184.170872120319 253.325164392298
185.685871509968 253.250167444055
185.750922905414 252.813052732205
185.730164824186 252.436332091396
185.476765303074 251.831055476969
185.016763089357 251.368302508896
184.441248325763 250.982038095301
183.841311155019 250.606227144306
183.308041719852 250.174834564035
182.932530162988 249.621825262611
182.805866627155 248.881164148157
183.324567375837 248.508855357473
183.941387800632 248.516258313959
184.614293215929 248.812364950483
185.301248936115 249.306167199915
186.54917254871 250.522826268976
187.026071069895 251.063666954344
187.348881153522 251.438170984095
188.103248981891 251.646287515467
188.838871387897 251.612166955774
188.731433330236 250.958199605053
188.468933729587 250.412244632547
188.084841011224 249.947219773834
187.612623600422 249.53604276449
186.537688402591 248.766903236216
185.511875538288 247.888167932337
185.52449837154 247.329417779749
185.602856068073 247.106014325922
185.834873585163 246.994170739954
186.376623748003 247.007386699026
186.873923448978 247.122978284662
187.780500797687 247.558913781946
188.645264295994 248.097228124445
189.5588726086 248.533172204798
190.169998554645 249.315415933435
190.448889641224 249.6857302931
190.799869923053 249.949172571009
191.085573760925 249.308977588718
190.991483597217 248.759510829752
190.619681803642 248.272810980385
190.072250751911 247.820916726892
188.858830360828 246.909699752634
188.3970057649 246.394454404419
188.167881397663 245.80216939718
187.007627872883 245.389916971033
186.52734580463 245.030978515451
186.181873707233 244.51116903097
186.160422710834 244.279924198692
186.302965549885 244.143964126413
186.559837727009 244.098449215
186.881374744831 244.13853986532
187.519785313068 244.45617945463
187.737329868732 244.724049195354
187.820881275593 245.058166101282
188.068867115436 245.058166101282
188.093994526325 244.545545175379
188.180949119983 244.278967216318
188.416874317585 244.089171960657
188.734436420856 244.118274762934
189.021625904499 244.263537957971
189.229690937458 244.501618459528
189.309879688678 244.80917318136
189.269563732801 245.043443992441
189.336311010776 245.216930940454
189.688619999347 245.445537164514
190.16205611652 245.622959688013
190.551868824421 245.877166345423
191.659370808063 247.180543496912
192.562870411335 248.633163049524
192.938801637052 248.406994819348
193.171949712692 248.143950417345
193.266796974598 247.534010484522
192.961213318763 246.856898024385
192.368999866901 246.166167810266
191.603957740722 245.515374615496
190.779888061939 244.958073213404
190.010591952263 244.547818377321
189.409870533405 244.338164880579
189.667120365558 243.689410760706
190.129871754108 243.096160486048
190.799869923053 243.146163537805
191.781840233265 244.15039785177
192.807873157917 245.147788598841
193.680154709278 246.242866113489
193.996821848808 246.859703138178
194.200870899616 247.540160730188
194.564129261432 247.37578923971
194.796879200397 247.044173791712
194.737574575601 246.223557337826
194.41095366901 245.600825145548
193.901075301824 245.113140746658
193.291998295246 244.697667672937
192.667781470476 244.291569456165
192.112483648716 243.832009628122
191.710163651167 243.256151720589
191.54488029903 242.501159265345
191.800878672062 242.576400115793
192.010378269611 242.547292306726
192.285129217563 242.699868038004
192.48189586228 242.933672293728
192.736881641803 243.320159509485
193.698282627521 243.978118970697
194.604374317585 244.928294732874
195.277967838703 246.030156209772
195.472206263004 246.594053283041
195.541874317585 247.143172815149
195.572453169285 247.09313972265
195.731001285969 247.059417321985
195.774400346172 247.071406071589
195.977004675327 247.29952509672
197.174879459797 248.038537576502
197.244438985716 248.080712723111
197.463313726841 248.254011943643
197.704878239094 248.449918344324
197.764942316471 248.594449355905
197.850880054889 248.95516927511
197.922702429949 249.171430572575
198.066795496402 249.591587856119
198.426996616779 250.742791726892
198.570706127344 251.323438986843
198.641889242588 251.807183578318
198.604346690832 252.118825837677
198.421879200397 252.183166101282
198.001622466503 251.940796985929
197.824517635761 251.594950750177
197.776249317585 250.643920495813
197.693328647075 250.064283266371
197.430045513569 249.432262494867
196.880521325527 248.760631575888
195.938877491413 248.062163904016
195.21887627071 248.062163904016
195.906389204918 248.655477598017
196.492733864246 249.328290536707
196.969742385803 250.066915586298
197.329246906696 250.857665613001
197.563079564033 251.686853483026
197.663072494922 252.540792062586
197.621057836471 253.40579421789
197.428867725788 254.268172815149
196.764150856195 253.59375093848
196.32404628223 252.69385988981
195.722002415119 250.702920511072
195.362227318941 249.854497298305
194.831392912327 249.265855148142
194.470916623382 249.106862146115
194.03058129376 249.058306619232
193.498022185771 249.135352637326
192.860874561725 249.353164270227
193.557114301382 249.653296723669
194.042532591282 250.101788595026
194.369184492288 250.663155689543
194.589125065265 251.301913812464
194.917092470585 252.669666364496
195.129229424654 253.327692404097
195.442875294147 253.921172693079
195.420877842365 254.920167520349
195.306192068516 255.401385143106
195.04488029903 255.808166101282
194.630868313966 255.366066708868
194.39022269672 254.84161956579
194.182375339924 253.663291528528
193.928027777134 252.508400991266
193.629256902395 252.013250723188
193.133869556843 251.612166955774
192.307993320881 250.854920938318
191.79975810474 250.662671401804
191.221866993366 250.768172815149
190.921475229917 251.187075093096
190.903540281711 251.560403421228
191.096800683199 251.902958586519
191.42999496883 252.22954137594
192.231139330326 252.893992975061
192.556566475092 253.261463358705
192.736881641803 253.672164514368
193.030611125885 254.221695854967
193.096060661731 254.798789575403
192.894619373737 255.978663995569
192.803978292404 256.55294461519
192.837556747852 257.097787454431
193.083479611335 257.598942473238
193.629871754108 258.042159631555
193.825622944294 258.824292733972
193.863871960102 259.194588973825
193.629871754108 259.53216512472
193.128486303745 259.272023275202
192.764254002033 258.849040582483
192.140873341022 257.868163659876
191.858859716116 257.236263170546
191.742701200901 256.582460477655
191.693746952472 255.289538934534
191.603849945722 254.690615310972
191.36560550159 254.150179937189
190.900462983309 253.688330426519
190.129871754108 253.325164392298
189.534089950977 252.986663177317
188.770122913776 252.70666272909
188.009531883655 252.661412074869
187.684115259109 252.781895741527
187.423878101764 253.027160241907
187.985561518131 254.643897130793
188.754621891437 256.186290338343
189.416808752475 257.775369718378
189.609621344267 258.625238552397
189.657871632038 259.53216512472
189.931126026569 260.133918359583
189.905872730671 260.773162439173
189.606054308025 261.033577825581
189.354146419225 261.173382207458
188.977861074863 261.144027068918
188.744614360986 260.790835246151
188.622003940998 260.219544961756
188.579082636295 258.845621898477
188.593967078386 258.254465564793
188.589878467975 257.868163659876
187.544744877277 255.97228772909
186.405872730671 254.095168664759
186.042839257179 254.30370391876
185.610218910633 254.358325078791
184.677124409137 254.265418603723
184.247103659569 254.247687712019
183.888402847706 254.335636213129
183.636248676239 254.59416247875
183.525867847858 255.088164880579
184.153951494156 255.721615537708
184.585101990162 256.422261073893
184.845792023597 257.178171917503
184.962494282184 257.977418496912
184.869826225696 259.658200576609
184.518879322468 261.369170739954
184.764768986164 261.777758434122
185.126999287067 262.107411935633
185.377666859089 262.465192153757
185.389944819866 262.688086315697
185.288868336139 262.958159997766
184.52162399715 263.252666070764
184.118590502201 263.219450071161
183.773868946491 263.007171228235
183.363065598665 262.359424903696
183.242933420597 261.716964319055
183.510370640217 260.431541040247
183.847556738315 259.118182733362
183.814610658346 258.440803363626
183.525867847858 257.744170739954
182.96124496883 256.884542062586
182.284870533405 256.081161096399
181.335290102421 256.105054214304
180.388243107258 255.994042947596
179.501761106907 256.032093837564
179.09936684197 256.195757135456
178.733875660358 256.503173425501
179.21279707378 257.15484563977
179.524374393879 257.853686645334
179.68520155376 258.586301669186
179.71187248653 259.339295938318
179.429121403156 260.852843120401
178.8088726086 262.287170007532
178.525298057256 262.62677670986
178.560590414463 262.969278409784
179.094370274006 263.628043725794
179.346154986082 263.926845803564
179.423401026188 264.193619802301
179.202756999193 264.419634952848
178.560871509968 264.596160486048
178.035511760174 264.563493802851
177.561246303974 264.37004049093
177.17079308456 264.041398122614
176.896870045124 263.603164270227
176.941793112217 261.976012304132
176.791246799885 260.416171624964
176.631513742862 258.87957961828
176.648876575885 257.322173669641
175.749484686313 257.454337671106
174.74049988216 257.523788049524
173.698702005802 257.597930505579
172.700870899616 257.744170739954
173.172788111625 258.562743052547
173.304826168476 259.424123599832
173.211043683944 260.310558482712
173.005499271808 261.204293802088
172.802251545845 262.087575658863
172.715359119831 262.94265015394
172.858880607544 263.751763388222
173.34687462276 264.49716146261
173.357450990139 264.881884172266
173.265746502338 265.192168786829
173.053105143963 265.390701844995
172.700870899616 265.440169885462
172.176987407861 265.247643366163
171.842232374607 264.914902761286
171.65295356339 264.473951831167
171.565498737751 263.956794336145
171.521452097355 262.821874692743
171.360874561725 261.766173913782
171.15526419705 261.243981525009
171.061685232578 260.694203689402
170.997621921955 259.578172281092
170.920637784658 259.045059010094
170.742685465275 258.55064089567
170.410515068231 258.111488088673
169.870876697956 257.744170739954
169.146780995784 257.629702403849
168.452872662006 257.741170480555
167.828714637218 258.034138992136
167.313869862018 258.464171960657
167.652372745929 259.900922372644
167.708465723453 260.695046737497
167.561870960651 261.468169763391
165.898876575885 264.596160486048
166.333123592792 265.586164071863
166.526905087887 266.066257789438
166.543873218952 266.558166101282
166.284463701902 266.821791156834
165.98921790546 266.907291248148
165.358623890339 266.68566663534
164.786904005466 266.176792457407
164.408871082721 265.664168908899
164.336720092354 265.278974070852
164.39434197372 264.965919568842
164.756873516498 264.472419336145
165.212404040752 264.016043737238
165.386274648963 263.749395027464
165.476871876178 263.429168298548
164.871872333942 261.384542062586
164.691340832172 260.270026042765
164.731869129596 259.060165002649
163.022122768818 258.476790979212
162.110060243068 258.382776334589
161.181873707233 258.563170984095
160.829952417074 258.927526190584
160.610124735294 259.312201097315
160.443375019489 260.140166833704
160.434874205051 261.042381837671
160.337871937214 262.014159753626
158.872875599323 265.093169763391
159.290068848191 265.03528051049
159.603247193752 265.196884467905
159.808801187335 265.519505008762
159.903121380268 265.944665506189
159.88259832388 266.413889333313
159.7436225695 266.86869986326
159.482584668456 267.250620469158
159.095875172077 267.501174524134
158.660744659735 267.307568020826
158.317081911622 267.05679465801
157.865030793606 266.408766820734
157.661463989077 265.607129946058
157.628123669086 264.701922967737
157.759091166912 262.780954435175
157.766883326827 261.865270748442
157.631870655475 261.046172693079
158.025495914875 259.593917444055
158.312074570118 258.909507825678
158.698871998249 258.290160730188
158.000340132175 258.064226463144
157.206371693073 258.101167276209
155.545872120319 258.563170984095
155.345503358303 258.863169058865
155.0881694836 259.053105190103
154.453747181354 259.202916696375
153.744886784015 259.212855651682
153.063869862018 259.283172204798
152.859058080373 260.261898621624
152.524496225773 261.182746723001
151.691872028766 262.935792520349
151.017496733127 264.71227867872
150.880746005235 265.662427231377
150.952869800983 266.682174279993
150.930521501361 267.001462861603
150.794137744365 267.248435333078
150.294248012958 267.503541543787
149.683168916164 267.403712108438
149.407798452435 267.207015022343
149.190868763385 266.905166223352
149.185464171825 266.52893002302
149.280372051655 266.203790262049
149.537868885456 265.614165857141
149.565997509418 262.386787011927
149.799857406078 260.880302980249
150.054301036654 260.182368471926
150.431873707233 259.53216512472
150.003790183125 259.241331919735
149.497764615474 259.049732044046
148.340247539936 258.914170816248
147.1360428614 259.025358512705
146.061870960651 259.283172204798
145.276723532139 259.940378203695
144.751309780536 260.700277402704
144.410301832615 261.532904520338
144.178371815143 262.40829427511
143.740434078632 264.167500570124
143.383770613132 264.991386547392
142.834873585163 265.738174035852
143.059286611287 266.207230668222
143.181931195913 266.599809452598
143.175340799747 267.169965102976
142.921953914819 267.477504238193

View File

@ -0,0 +1,643 @@
3
597
134.736468231438 354.909490555232
134.616513168572 354.396959811156
134.337839996575 353.944991558497
133.909729873894 353.726273208564
133.642536318062 353.758347563153
133.341463958977 353.913492172664
132.697050368546 354.325671970551
132.004227554558 354.521992414897
130.522337829827 354.523742645686
128.99376193261 354.432117670482
128.242581403015 354.511719107335
127.516467010735 354.760492294734
125.549338257073 354.940866917079
124.603133117913 354.809288650458
124.155654942749 354.600325546866
123.731463348625 354.262491196101
124.425782943277 353.153720496861
125.248209064959 352.227169058924
126.184441896288 351.46897799213
127.220181619881 350.865288406318
128.341128418354 350.402241411326
129.532982474325 350.065978116994
130.78144397041 349.842639633162
132.072213089226 349.718367069667
134.723474925516 349.711584143048
137.37236944413 349.93475821585
139.904498106001 350.277018166786
142.205462372063 350.627492874568
142.787519401072 350.658617444044
143.174740946053 350.484992056792
143.400947338103 350.153866730338
143.499958908318 349.712491482203
143.451678907631 348.687991290992
143.300463592766 347.789491623347
142.949247067927 346.910989165013
142.441680109261 346.130537718242
141.812754636763 345.429469287103
141.097462570427 344.789115875667
139.54774633622 343.615882128184
138.072466766594 342.461492508357
135.705545818566 343.662773161834
133.329340851067 344.975991695826
132.111536478756 345.476237810855
130.859946644066 345.76646056742
129.564083194493 345.767324022656
128.213457977532 345.399492233699
127.570575242995 345.502064436381
126.917133009194 345.753382652705
125.611336624382 346.363866775935
124.975365763663 346.55383750767
124.361601984261 346.554163902705
123.778236931322 346.280248373454
123.233462249993 345.647493332332
122.561512565373 345.583762243097
121.890067493675 345.678773492282
120.551081573723 346.046241730159
119.884735917805 346.169308080976
119.221285259484 346.152335494464
118.561327194927 345.920628651684
117.905459320305 345.399492233699
115.913454925774 345.996492355769
115.79042542739 345.440820270856
115.517208149789 344.893915399616
114.647710358856 343.824069350665
112.508962547539 341.763866394465
111.74971293485 340.764157697266
111.559181790931 340.269855839839
111.537213122605 339.778476327365
111.715681955351 339.289434672972
112.126463314651 338.802146389788
112.801432225986 338.31602699094
113.772463714836 337.830491989558
115.940058147667 337.991304367488
118.079714691399 337.886241882747
120.144744312523 337.417054146235
121.134683704136 337.015210061973
122.088457977532 336.485490768855
123.356441503523 336.61404316098
124.521194135903 336.505724757617
125.600798076151 336.203695609873
126.613335525749 335.751115768855
128.509539758919 334.566944211429
130.354464447258 333.298490494197
130.62741676545 332.495709865992
130.746338760613 331.5809917149
130.669323599098 330.666273563807
130.354464447258 329.863492935603
129.567917978523 329.425930112307
128.69258967614 329.203242271846
127.826448118447 328.924680083697
127.427437549589 328.679836943453
127.067461883782 328.319494217341
127.516467010735 326.32748982281
126.60335675454 326.248816579287
125.704588806389 326.03486344189
124.890009319542 325.606223433917
124.229464447258 324.883489578669
124.280025160073 324.522789209788
124.419261848686 324.220506637996
124.889090454338 323.763116806453
126.071459686516 323.24049183697
128.045588171242 322.72757002682
130.061715042351 322.200866669124
131.005254274367 321.811204045718
131.862964784859 321.272724598353
132.602737134455 320.536971181338
133.192461883782 319.555486648982
133.097791349648 318.915316790049
132.918839370964 318.354364365046
132.590447580574 317.895973890727
132.047457611321 317.563489883845
131.321379011629 317.762583940928
130.693444406746 318.138490646785
129.61983576989 319.212991684382
128.602288877724 320.371492355769
128.044431453703 320.852398603862
127.416460907219 321.198492020076
126.08184299445 321.365844979589
124.740147983788 321.398444026416
122.100962555168 321.37911507458
120.836190080403 321.487054422205
119.629776394127 321.779974549716
118.498080467938 322.337809130257
117.45746127343 323.24049183697
116.706987016035 323.172709356701
116.051539948343 322.94990545482
115.476459931715 322.599144581412
114.967086827515 322.147491186564
114.086820801852 321.049764632886
113.293460762261 319.873241394465
112.469725599645 318.834437071984
112.009817000611 318.434340629434
111.49833420491 318.149867266124
110.920617073907 318.008081432139
110.262005468963 318.036047577565
109.507839251442 318.260830152487
108.643458282707 318.70949360699
107.756882107018 319.34239837498
107.075335418938 320.078241318171
106.864036416767 320.499354481404
106.767100727318 320.963710039561
106.805563664196 321.477143943017
107.000460541008 322.045492142146
107.344176164029 322.500684171622
107.834867989777 322.941849678462
108.930461799858 323.838115662043
109.372004559396 324.321223407691
109.633805072067 324.846319168513
109.634183725475 325.427406578963
109.291460907219 326.078489273494
108.689460998533 326.651365786498
108.00458637452 327.160692184871
106.614962494133 328.126365631526
106.024587994574 328.651548176711
105.580088293312 329.250851601069
105.338650768755 329.958693653052
105.357462799309 330.809492081111
106.100542104004 331.533521681731
106.670839226006 332.383739918178
106.820947921036 333.28083386988
106.6611171571 333.722173951273
106.303461944817 334.145490616267
105.779321586846 334.778944283431
105.133587753533 335.178865879481
103.664462005852 335.689489334529
103.405463135002 335.158490150874
103.272463714836 334.580990761226
103.216463958977 333.547491043513
102.405018603562 332.811808637982
101.738275921105 332.031161457007
100.689461624382 330.37936350674
99.7711471674425 328.680878668731
98.6844586489184 327.024488419002
98.9340847936852 326.306736111348
99.3925855514986 325.754709452098
100.539461052178 324.895740478938
101.029460867999 324.462751865094
101.33158544278 323.943396299785
101.346647312997 323.274650633042
101.215533651544 322.864561777269
100.975459015129 322.3934917149
100.025632446764 322.368326157039
99.0804115889055 322.620239227717
97.2038334963305 323.458238571589
96.2724995074255 323.79579350323
95.3458177206499 323.913364380305
94.4237997589094 323.686685532039
93.5064572451098 322.991491287654
93.6115043518526 322.355770080989
93.7865828630907 321.678237884944
93.8215985653383 321.010081261104
93.5064572451098 320.402486771052
92.7935083267672 319.936223119204
92.0620879290087 319.362614601558
91.5176024792177 318.686442702716
91.3796498683674 318.311389699285
91.3654584047777 317.912488907283
92.1932086107714 317.370864838069
92.9084576723559 316.717489212459
92.5112406370623 315.185365289157
92.0437096712572 313.611239403193
91.913478976248 312.824480756824
91.921552812813 312.046487658923
92.1198921856863 311.283682122534
92.560458099602 310.542486160701
93.0658665058596 310.878865211909
93.6929606554491 310.990991562312
94.3388045189364 310.878865211909
94.9004620668871 310.542486160701
95.3024705705626 310.114232271617
95.5860253927691 309.655004948085
95.865462219475 308.669364899104
95.8741490004046 307.637035816615
95.7474621889574 306.609487503474
95.5843506754769 305.749551547398
95.311168065427 304.973391607111
94.4984917995913 303.624534457629
93.4372378793938 302.467185422485
92.2552107927782 301.405613869136
91.0802150276882 300.344089165037
90.0400550720675 299.186880677646
89.6104774252904 298.542479192545
89.2625354138596 297.838257774418
89.0122045987679 297.062250094195
88.8754605410082 296.20248982281
91.2154645082934 294.309492081111
91.7065436152203 294.535263240045
92.1456036922915 294.901038378184
92.9400881884081 295.753866165584
93.3317233232243 296.091551601594
93.7437608597262 296.270506590312
94.1943061557991 296.216047525113
94.7014645693285 295.853490799373
95.7035845873339 292.78486344189
95.8563523200733 291.998809769457
95.8848197815401 291.19697102875
95.7463892904503 290.375234052246
95.3984631655199 289.529485672419
96.1518851873858 289.32328328461
96.7930878756029 288.813612907832
97.8884610292895 287.537488907283
98.3364590761645 284.25148579449
99.1744443533404 283.872392505114
100.073084747551 283.535487144893
100.850412046669 283.095832436984
101.136718219279 282.792181178635
101.324458038567 282.408491104548
100.610771333931 282.004879802173
99.7992104647143 281.792612999385
98.9782740232928 281.813784211581
98.2364606020434 282.110486954158
96.9580056277497 283.1566387412
95.9631326553805 284.337004869883
95.199330022691 285.627081572717
94.6140860674364 287.00236508221
93.7692275402529 289.910537451213
93.0084637758715 292.86549183697
92.6221810785515 292.528913810556
92.0941489098055 292.366804450457
90.8112105486376 292.274241417354
90.1554915515167 292.197912588423
89.556397473572 292.004302113955
89.0635219124539 291.620472415989
88.7264584658129 290.97348591656
88.7943413165791 290.256545856302
88.9520836231692 289.503956645434
89.2617091295702 287.992238014644
89.2758735922558 287.283312216108
89.1044600365145 286.639144509738
88.6786090937836 286.084836706226
87.9294613955004 285.645490616267
87.2951375303252 285.480674653953
86.7314306852801 285.215909927791
86.2447393593771 284.861590891784
85.8414620516283 284.428111999934
85.5279972610457 283.925867706244
85.3107434866411 283.365252464717
85.1904629824145 282.110486954158
86.9207123873217 281.512738197749
87.6691180822832 281.073801368182
88.2774609682543 280.466489761775
88.7490849850161 280.311129420703
89.2859610674364 280.305113762324
89.8040874359591 280.243034928744
90.2194623110277 279.919485062068
90.1425675955994 279.33384042949
89.9309304115755 278.773941248362
89.2177104113085 277.740613907283
88.3083658573611 276.837972372477
87.4314602968676 276.084485977595
87.7721794006808 275.891661256259
87.9921483156664 275.624128788417
88.1842106935961 274.93961331219
88.2363976595385 274.180284946864
88.3774594423754 273.495489090388
90.1637114641649 271.460238426631
92.0624646303637 269.462484329646
92.2078211662752 269.898314684337
92.1805857775194 270.371362656062
92.1812897083742 270.862972944682
92.4104642031176 271.354490250056
93.3327575383169 271.290117308205
94.1120707151873 270.960818379825
94.7921732721312 270.442448928659
95.4168347475512 269.810864418452
96.6749126074297 268.511472075885
97.3958680686934 267.995375171011
98.2364606020434 267.669485062068
100.363017460464 267.228535413449
102.428226744889 266.624753683513
106.484336769341 265.211114853328
108.530104598163 264.5424681899
110.624259030579 263.993410318797
112.794233610986 263.634546458428
115.067461883782 263.536481827205
115.390959655998 261.737865417903
115.753429329155 260.938723772471
116.054323589562 260.611157655423
116.461459076164 260.349485367244
117.009563719986 261.097417711919
117.166588699578 261.8792526421
117.055112397431 262.686798512643
116.797713196038 263.511863678401
116.335459625481 265.181785314982
116.375762021301 266.010258495515
116.760455047844 266.823484390681
117.880459701775 267.513988464778
118.314649259804 267.978299826091
118.414485102652 268.270900070374
118.403460418938 268.615484207576
118.456658816097 269.211302578156
118.27760258889 269.824018686717
117.656836426018 270.999738663142
117.432181572674 271.512539803689
117.409382259606 271.94183322758
117.696966027973 272.262517571156
117.991066424309 272.374287161683
118.403460418938 272.449491470759
119.355099087713 272.088581278627
120.330057775734 272.072472899859
122.275216018913 272.530863731807
123.208055978773 272.733464017218
124.089496767281 272.737068265384
124.900858586786 272.405727013653
125.274422446398 272.071967618247
125.623461639641 271.603490799373
125.765258228539 270.812893837398
125.71083728051 270.022485702937
125.275469696282 268.516485184138
124.662077581642 268.27523538441
124.104840194939 267.931236236995
123.622415697335 267.493861883586
123.233462249993 266.972486465877
123.200286125897 265.863791316455
123.321692859886 264.713049858516
123.78783313012 262.341489761775
124.151039516686 259.969929665034
124.143778896092 258.819188207095
123.930468475579 257.710493057673
124.506095415114 256.65383416385
125.182608282326 255.633912771647
126.588589584587 253.608612030452
127.193206912039 252.555397450631
127.649007951973 251.443249910777
127.893567150591 250.248251795476
127.864458954094 248.946485489314
128.696370845793 247.681423216765
129.319993650673 246.285661190455
130.360215103386 243.382116287654
130.985735302923 242.014372616713
131.820809519051 240.796007603114
132.34957337579 240.264723218685
132.969898527621 239.797040849631
133.694842571525 239.401712946301
134.537463104485 239.087491959041
135.359450733422 238.379456728404
135.924841797112 237.456737488215
136.294292843102 236.440643042033
136.528460418938 235.452482193416
136.243180668114 235.042577713435
136.18646517968 234.525236099666
136.180468475579 233.410490005916
135.26453339508 233.214220575695
134.434079712389 233.174596219962
133.680064918606 233.275573886638
132.99344650483 233.501110523646
132.365181962161 233.835163078909
131.786228781698 234.26168850035
130.740086471794 235.327985733455
128.841667806862 237.864360302394
127.844711309431 239.077748804992
126.719469940422 240.083478897517
126.531453346966 240.714140623515
126.475918209313 241.449826210444
126.451838409661 243.021486252253
126.328066801785 243.750069349711
126.026322757958 244.368893593257
125.468992805241 244.824263304179
125.070228902755 244.973872810309
124.578463470696 245.062482803767
124.180497562645 245.926267832225
123.824717437981 246.81798931927
123.31031075692 247.541708677714
122.930868601559 247.779336750214
122.43646517968 247.901487320369
121.98335186219 248.052297085231
121.459835922478 248.063234299128
121.001382505654 248.167549580043
120.838887101172 248.32761481375
120.743456756829 248.598493545955
120.535072242974 249.749992102092
120.15859118676 250.901489227717
119.883964931725 251.413019358819
119.539295112847 251.847487657969
119.115241920708 252.179206967061
118.602465545891 252.382490127986
117.658194696663 252.250335186427
116.797833359001 251.884740799373
115.956037199257 251.444519489711
115.067461883782 251.08848378033
114.553394859789 251.777962922757
114.317179834603 252.609250276988
114.220711624382 254.442859619563
114.131661361216 255.317986607259
113.86286894059 256.080531805461
113.299935823439 256.666897713845
112.872416960208 256.874139215504
112.328463470696 257.013486832087
112.047541508584 256.553165059244
111.747588222979 256.224925338929
111.098462736366 255.895551413005
110.396837121008 255.887083768552
109.658461487053 256.061241119807
108.134460603951 256.404305666392
107.380335575102 256.296650290196
106.652460968254 255.818494766658
105.467931425331 256.950054377025
104.124962723015 258.034740417903
102.800742304085 259.194050520366
101.672457611321 260.549482315486
101.287194049118 260.341211408084
100.942148601769 260.013936966365
100.309712326287 259.217111557429
99.6491493341906 258.588474243586
99.2689454910738 258.471434920733
98.8344601747973 258.557493179744
98.6903377139402 259.153280336117
98.4706643429978 259.643540024465
97.8478367683871 260.36611768574
97.0523212460263 260.842507540887
96.1704615709765 261.189990967219
95.2886015382988 261.525849342053
94.4930849430544 261.967364042705
93.8702555803044 262.631816446488
93.6505810470713 263.084294717466
93.5064572451098 263.63648793072
92.4776162115319 264.388501181906
91.3075993416292 264.919346183246
88.8380850908739 265.721360176509
87.6856112090332 266.194443538492
86.6860084888918 266.85018739075
86.266506236179 267.278106121054
85.9127886799557 267.789548918312
85.6340447889102 268.397135430654
85.4394635317309 269.113485306209
85.2064154056294 270.158124923413
85.2738366482241 271.252346247142
85.7569617388232 273.45186230511
85.896102836488 274.488321184819
85.78258780217 275.436690061992
85.5878713057769 275.867085147356
85.2781352606995 276.262551009362
84.8360944950415 276.618785407101
84.2444638369066 276.931486099666
84.3983449099047 278.105893507307
84.3456486818774 279.249362796252
83.8959607241137 281.506487816279
83.44627276635 283.828862756198
83.3935765383227 285.053894445007
83.5474576113207 286.342489212459
83.6790998784287 286.819214164918
83.9006479141695 287.251536577647
84.4687117693407 288.048364609187
84.962150132416 288.863754957622
85.0904163030369 289.319280266469
85.091463958977 289.828489273494
84.2736814377291 290.3713310656
83.3672122118456 290.699486702388
82.451368844269 290.878392785495
81.6054638979418 290.97348591656
81.4909137116207 291.484100274449
81.4730037955029 291.921193986838
81.6655402538759 292.616831272548
82.0599442330582 293.144421368545
82.5330866930468 293.587987869685
82.9618385938389 294.031554370826
83.2230708954317 294.559144466823
83.1936545578224 295.254781752532
83.0314753243161 295.691875464921
82.7504605410082 296.20248982281
82.2821846512539 297.108771934812
82.2253189442141 298.057066291278
82.6945838091357 299.986363380855
82.895097246526 300.920701935594
82.8557865974886 301.803724378055
82.6953195632828 302.218700779309
82.413843294738 302.612098619049
81.9910067209435 302.981001386126
81.4064587709887 303.322492569392
81.3823336718065 303.772132485812
81.5869588015063 304.119116753047
81.875583564995 304.428788989489
82.1034573671801 304.766492813533
81.6217738000138 305.776545405095
81.2655513641817 306.879926889842
81.0435321835263 308.043965279763
80.9644583818896 309.235988586848
81.0370720831139 310.423324823087
81.2701154110415 311.573302000468
81.6723304895146 312.653248130982
82.2524594423754 313.630491226619
82.8035173696859 313.91096124955
83.1994366404993 314.210094853943
83.6008357164843 314.85969457001
83.6066096780283 315.569973900621
83.3667115328295 316.331616371577
82.7497109529955 317.971724837726
82.6725145337565 318.83155788452
82.9494580385668 319.705488174861
83.6357809809429 320.650364011233
84.4708500263674 321.271427124446
85.4120674935562 321.664958804553
86.4168357012255 321.927240341609
88.4466336128695 322.443178146785
89.3864679542763 322.889396995013
90.2194623110277 323.589490860408
91.3953618464453 324.716746836608
92.3717266676409 325.922787874644
93.187052732466 327.193024187987
93.8798359987719 328.512865990107
95.051757967232 331.243006914561
96.1954602358324 333.996492355769
95.9317112324221 334.526803761428
95.5044612047655 334.954740971034
94.5524624941332 335.689489334529
93.0758246538622 334.968386918013
91.5076169130785 334.46847555012
88.2342099306566 333.803116768306
86.5978697893603 333.473114758437
85.0076779482348 333.035194605296
83.4980639574511 332.407079010909
82.1034573671801 331.506490677302
81.2246101704819 332.075711697047
80.2261145470125 332.391069143718
78.0639590380175 332.645365684932
76.9971896616204 332.776890963023
76.0045528767092 333.039725035136
75.1344939378483 333.530160993045
74.435458099602 334.344491928523
75.2668571790142 335.315232764637
76.1526764688475 336.176464795773
78.071819936989 337.589961021846
80.16137701845 338.624097764199
82.3898362276537 339.317992180293
84.7256860790236 339.710761427586
87.1374150869829 339.841522663539
89.5935117659552 339.749393045609
92.0624646303637 339.473489731257
93.9671496508105 339.05889663071
95.9464615938647 338.882241218989
97.8882741091234 339.088460772937
98.8100785968287 339.380441561048
99.680460846184 339.822492569392
101.149694955109 341.386757880156
102.618835365532 343.114616840785
103.41170065677 343.910079605585
104.27453879094 344.590663581794
105.230681857227 345.104443035727
106.303461944817 345.399492233699
106.713770190386 346.531288570432
107.228679960726 347.543267987376
107.838417844979 348.44512921263
108.533210432289 349.246570974296
109.3032843118 349.95729200047
110.138866072653 350.586991019254
111.967459594963 351.642117947047
113.940803712366 352.48954158247
115.980711138008 353.206851750319
118.008994585036 353.87163827539
119.947466766594 354.561490982478
121.624440407513 355.409717604225
123.420511638878 355.988366216128
125.30065331435 356.317264869516
127.22983828759 356.416241615718
129.173039412258 356.305124506061
131.095229542015 356.003741591876
132.961381530522 355.53192092449
13
108.793459808586 338.178491562312
108.761770149825 337.639546550517
108.58868149495 337.261429339354
108.302295437215 337.016718141442
107.930713569878 336.877991169398
107.044368779419 336.808802753394
106.154459869621 336.834489792293
106.073443925141 337.246115654414
106.179084694145 337.69974133343
106.434163844345 338.143991440242
106.80146304345 338.52749058575
107.909212982414 338.52099177212
108.411899959801 338.464210301345
29
119.598467743157 332.850492447322
119.900662278889 332.501130439048
120.315978443382 332.184475689834
121.229334747551 331.555865734523
121.599054431675 331.197199411397
121.825254833458 330.777818113273
121.843775725125 330.274366281634
121.590456878899 329.663488357966
119.923148309944 328.726753681605
118.18571177697 327.95811268658
116.4576508162 327.170909374659
114.81846896386 326.178487747615
114.151621258019 326.174669325059
113.554150497673 326.31612846226
112.471712982414 326.831863373225
111.379902755974 327.319660395091
110.770716106652 327.426197170918
110.087466156243 327.373487442439
109.962305700539 328.554472475951
110.056710159538 329.838114231532
110.515239870308 331.084443241065
110.92622680044 331.649875007277
111.482455169914 332.153490036433
112.429406380413 332.649089932149
113.401539242027 332.906599968379
114.395912980793 332.986711561387
115.409586822746 332.950116127437
117.48307172036 332.769569843715
118.537001228092 332.74700182647

View File

@ -0,0 +1,351 @@
7
148
259.300 501.200
268.500 495.800
277.700 490.800
286.800 486.200
295.900 481.900
305.000 478.000
314.000 474.500
323.000 471.400
332.000 468.600
341.000 466.200
350.000 464.200
358.900 462.600
367.900 461.300
376.800 460.400
385.700 459.800
394.600 459.600
401.200 459.700
408.300 460.000
415.800 460.400
423.800 461.100
432.400 462.100
441.500 463.400
443.800 459.600
335.700 373.500
346.800 370.300
357.500 366.900
367.700 363.200
377.400 359.100
386.600 354.700
395.300 350.000
403.500 345.000
411.300 339.600
418.500 334.000
425.200 328.000
431.400 321.700
437.100 315.100
442.300 308.200
447.100 301.000
451.300 293.400
455.000 285.500
458.300 277.300
461.000 268.800
463.200 260.000
465.000 250.800
466.200 241.400
467.000 231.600
467.200 221.500
467.000 213.300
466.300 205.100
465.100 196.800
463.400 188.500
461.300 180.200
458.800 171.800
455.800 163.500
452.400 155.200
448.500 146.900
444.200 138.700
439.500 130.600
434.300 122.500
428.800 114.600
422.800 106.800
416.500 99.200
409.700 91.700
402.500 84.300
395.000 77.200
387.100 70.300
380.100 64.700
373.000 59.300
365.500 54.100
357.900 49.100
350.100 44.300
342.000 39.700
333.800 35.400
325.400 31.200
316.800 27.400
308.100 23.700
299.200 20.300
290.200 17.200
281.100 14.300
271.900 11.600
262.600 9.200
253.200 7.100
243.700 5.200
234.200 3.700
224.600 2.400
215.000 1.300
205.300 0.600
195.600 0.100
186.000 0.000
175.300 0.300
164.800 1.000
154.500 2.300
144.500 4.100
134.700 6.400
125.100 9.100
115.800 12.300
106.800 15.900
98.100 20.000
89.700 24.500
81.600 29.400
73.800 34.800
66.300 40.500
59.200 46.600
52.400 53.000
46.000 59.800
40.000 67.000
34.300 74.500
29.100 82.300
24.200 90.400
19.700 98.800
15.700 107.500
12.100 116.500
9.000 125.700
6.300 135.200
4.000 144.900
2.300 154.900
1.000 165.000
0.300 175.400
0.000 186.000
0.200 194.600
0.700 203.300
1.500 211.900
2.700 220.500
4.200 229.000
6.100 237.500
8.200 246.000
10.700 254.400
13.600 262.800
16.700 271.100
20.200 279.300
24.000 287.500
28.100 295.600
32.500 303.700
37.300 311.700
42.400 319.600
47.700 327.400
53.400 335.100
59.400 342.800
65.700 350.300
72.300 357.800
79.300 365.100
86.500 372.400
94.000 379.500
101.800 386.600
109.900 393.500
118.400 400.300
127.100 407.000
136.100 413.500
40
249.500 212.400
258.200 207.900
266.800 203.900
275.300 200.400
283.700 197.400
292.000 194.900
300.300 193.000
308.500 191.600
316.800 190.800
325.100 190.500
333.400 190.800
341.700 191.700
350.100 193.300
358.500 195.500
366.900 198.300
375.400 201.800
384.000 206.000
392.700 210.800
401.400 216.200
399.600 225.500
396.900 234.500
393.400 242.900
389.100 250.900
384.100 258.400
378.300 265.300
371.800 271.600
364.700 277.300
357.000 282.300
348.700 286.700
339.900 290.400
330.600 293.300
320.900 295.400
310.700 296.700
300.100 297.100
292.400 296.800
284.500 296.100
276.200 294.700
267.600 292.800
258.700 290.400
249.500 287.300
36
259.000 36.500
268.300 37.300
277.500 38.500
286.500 40.200
295.300 42.300
303.900 45.000
312.200 48.100
320.400 51.600
328.400 55.700
336.100 60.100
343.600 65.100
350.800 70.400
357.800 76.300
364.500 82.500
371.000 89.200
377.100 96.400
383.000 103.900
388.600 111.900
380.900 115.900
373.100 119.400
365.300 122.400
357.300 124.800
349.200 126.800
341.100 128.200
332.800 129.000
324.300 129.300
316.900 129.100
309.300 128.400
301.600 127.300
293.500 125.800
285.300 123.900
276.800 121.700
268.000 119.000
258.900 116.000
249.500 112.600
249.500 36.300
34
231.300 279.000
223.100 276.400
215.200 273.200
207.400 269.300
199.600 264.600
199.600 206.400
199.400 196.400
198.700 187.300
197.000 179.000
193.900 171.500
189.000 164.800
185.900 161.600
181.900 157.700
177.200 153.300
171.600 148.200
165.200 142.500
158.000 136.200
141.100 121.600
131.400 113.300
121.000 104.300
128.300 96.000
135.700 88.200
143.200 81.000
150.800 74.300
158.500 68.100
166.300 62.500
174.200 57.400
182.100 52.800
190.100 48.800
198.200 45.400
206.400 42.500
214.600 40.100
222.900 38.300
231.300 37.000
36
116.600 363.400
111.100 357.500
106.100 351.100
101.400 344.300
97.100 337.000
93.200 329.300
89.700 321.200
86.600 312.700
83.900 303.800
81.600 294.500
79.700 284.800
78.200 274.600
77.200 264.100
76.600 253.200
76.400 241.900
76.500 231.200
77.100 220.800
78.000 210.600
79.300 200.800
80.900 191.300
82.900 182.100
85.200 173.200
87.900 164.700
90.900 156.500
94.300 148.600
98.000 141.200
102.100 134.000
106.400 127.300
111.100 121.000
115.600 124.500
118.800 129.200
120.800 135.200
121.900 142.700
122.400 151.700
122.500 162.500
122.500 368.900
46
249.500 130.000
258.200 133.100
266.800 135.900
275.300 138.300
283.600 140.400
291.900 142.100
300.000 143.400
308.200 144.400
316.300 145.000
324.300 145.200
333.800 144.900
343.100 144.100
352.000 142.800
360.800 141.000
369.300 138.600
377.700 135.600
385.900 132.000
393.900 127.800
397.200 135.000
399.900 142.400
402.100 150.000
403.800 157.900
405.000 166.000
405.700 174.300
406.000 182.900
405.900 188.200
405.700 193.500
405.200 198.800
395.200 194.000
385.500 189.800
376.000 186.000
366.800 182.800
357.900 180.200
349.200 178.100
340.900 176.600
332.800 175.700
325.100 175.400
317.200 175.600
309.200 176.300
301.100 177.400
292.900 179.000
284.500 181.000
276.000 183.500
267.300 186.400
258.500 189.700
249.500 193.500
3
320.500 386.300
199.600 434.700
199.600 288.800

View File

@ -0,0 +1,244 @@
6
140
115.300 0.000
115.300 112.700
107.000 112.700
99.500 112.600
91.800 112.000
84.000 111.100
75.900 109.800
67.700 108.200
59.300 106.200
50.700 103.800
41.900 101.100
32.800 98.000
23.600 94.600
14.100 90.900
4.400 86.800
0.000 94.400
4.600 101.300
9.700 108.100
15.200 114.500
21.100 120.700
27.400 126.700
34.200 132.400
41.400 137.800
49.000 143.000
57.000 148.000
65.400 152.600
74.300 157.100
83.600 161.300
93.300 165.200
103.400 168.900
114.000 172.300
112.800 181.200
111.100 189.800
108.800 198.300
106.000 206.600
102.700 214.800
98.900 222.700
94.500 230.400
89.600 237.900
84.200 245.200
78.300 252.300
71.900 259.200
65.000 265.900
57.500 272.300
49.600 278.600
41.100 284.700
32.100 290.500
22.700 296.100
12.700 301.500
12.700 304.000
115.300 375.000
115.300 415.500
114.600 425.000
112.600 433.500
109.400 441.000
105.100 447.500
99.600 453.000
93.000 457.300
85.500 460.400
77.100 462.300
67.800 463.000
60.500 462.700
52.300 461.800
43.400 460.400
33.800 458.500
23.400 456.000
23.400 464.900
31.100 471.200
38.800 476.900
46.700 481.900
54.500 486.300
62.500 490.000
70.400 493.000
78.300 495.400
86.300 497.100
94.100 498.100
102.000 498.500
111.800 498.000
121.200 496.500
130.100 494.000
138.400 490.700
146.100 486.400
153.100 481.300
159.400 475.300
165.000 468.600
169.800 461.100
173.700 452.800
176.700 443.800
178.800 434.100
179.900 423.700
209.000 441.500
209.000 498.500
223.600 498.500
223.600 452.200
290.700 499.100
299.600 493.000
308.200 486.900
316.400 480.900
324.200 475.000
331.700 469.100
338.800 463.200
345.600 457.400
352.000 451.600
358.000 445.700
363.600 439.900
368.800 434.100
373.700 428.300
378.100 422.500
383.500 414.500
387.900 406.500
391.500 398.500
394.300 390.400
396.400 382.200
398.000 373.900
399.100 365.400
399.700 356.700
400.100 347.800
400.300 338.700
400.300 155.200
307.800 77.900
297.700 82.300
288.100 86.400
278.700 90.100
269.800 93.500
261.200 96.500
253.000 99.100
245.100 101.300
237.600 103.000
230.400 104.300
223.600 105.100
223.600 0.000
215.600 0.300
207.500 0.500
199.300 0.800
191.000 1.000
165.300 1.300
151.800 1.100
143.900 0.900
135.100 0.600
125.600 0.300
3
115.300 359.100
68.400 327.500
115.300 288.800
4
209.000 17.700
209.000 426.900
182.400 409.200
182.400 17.700
28
233.200 175.400
242.600 173.400
252.000 171.200
261.200 169.000
270.200 166.600
279.200 164.000
288.000 161.300
296.600 158.500
305.200 155.400
313.600 152.200
321.800 148.700
330.000 145.000
330.000 227.400
323.100 232.900
316.000 237.500
308.700 241.200
301.000 244.100
293.000 246.100
284.500 247.300
275.500 247.600
267.500 247.300
259.700 246.400
252.100 244.800
244.700 242.600
237.500 239.700
230.400 236.100
223.600 231.800
223.600 177.300
32
328.700 352.700
326.700 362.900
324.000 372.700
320.500 381.900
316.300 390.500
311.500 398.600
306.000 406.000
300.000 412.900
293.400 419.000
286.300 424.500
278.600 429.300
270.600 433.300
262.100 436.600
253.200 439.000
243.900 440.700
234.300 441.500
223.600 435.800
223.600 342.700
228.600 337.500
234.700 333.000
241.900 329.100
250.000 326.000
258.800 323.700
268.200 322.200
278.000 321.800
287.100 322.200
295.900 323.600
304.100 325.700
311.800 328.700
318.700 332.500
324.800 336.900
330.000 342.000
30
230.300 249.200
237.400 252.700
244.800 255.600
252.500 257.900
260.500 259.600
268.800 260.600
277.400 260.900
284.300 260.600
291.300 259.700
298.600 258.100
306.000 255.900
313.700 253.000
321.700 249.400
330.000 245.100
330.000 323.700
323.300 319.600
316.500 316.200
309.300 313.400
301.800 311.200
294.000 309.700
285.900 308.800
277.400 308.400
268.600 308.700
260.300 309.600
252.200 311.000
244.600 313.000
237.200 315.700
230.300 319.000
223.600 323.000
223.600 245.100

View File

@ -0,0 +1,76 @@
1
74
10175.200 1178.600
10255.100 1458.500
10238.900 1458.500
10230.900 1458.400
10223.400 1458.100
10216.300 1457.600
10209.600 1457.000
10203.400 1456.100
10197.600 1455.000
10192.300 1453.700
10187.400 1452.300
10182.900 1450.600
10178.900 1448.700
10174.700 1446.300
10170.600 1443.400
10166.600 1440.000
10162.700 1436.100
10158.800 1431.700
10155.000 1426.800
10151.300 1421.500
10147.700 1415.600
10144.100 1409.300
10136.700 1395.200
10126.100 1397.500
10136.000 1439.200
10146.100 1481.100
10421.900 1481.100
10409.800 1438.700
10398.000 1396.200
10386.100 1397.700
10386.900 1400.700
10387.200 1409.000
10387.000 1416.600
10386.400 1423.500
10385.200 1429.600
10383.600 1435.000
10381.500 1439.700
10378.900 1443.700
10375.900 1447.000
10372.900 1449.200
10369.400 1451.100
10365.300 1452.900
10360.600 1454.400
10355.400 1455.600
10349.500 1456.700
10343.100 1457.500
10336.100 1458.100
10328.500 1458.400
10320.300 1458.500
10306.200 1458.500
10231.700 1197.400
10229.300 1188.600
10227.600 1180.700
10226.600 1173.800
10226.200 1167.800
10226.500 1162.900
10227.500 1159.000
10230.500 1154.300
10235.300 1150.600
10242.200 1147.800
10250.900 1145.900
10271.400 1144.200
10268.000 1131.300
10117.300 1131.300
10120.700 1144.200
10133.300 1145.700
10140.300 1146.700
10146.700 1148.200
10152.300 1150.100
10157.200 1152.400
10161.400 1155.200
10165.800 1159.400
10169.500 1164.700
10172.700 1171.100

View File

@ -0,0 +1,159 @@
1
157
355.500 113.000
347.000 104.800
338.100 97.200
328.800 90.300
319.100 84.000
309.100 78.300
298.900 73.300
288.400 68.900
277.800 65.100
267.000 62.000
256.200 59.400
245.300 57.500
234.400 56.200
223.600 55.400
212.700 55.300
202.000 55.700
191.500 56.600
181.000 58.100
170.800 60.200
160.800 62.700
151.000 65.800
141.600 69.400
132.400 73.400
123.500 77.900
115.000 82.900
106.800 88.200
99.000 94.000
91.600 100.200
84.700 106.700
78.100 113.500
72.100 120.700
66.400 128.200
61.300 135.900
56.600 143.900
52.400 152.200
48.700 160.600
45.500 169.200
42.800 177.900
40.600 186.700
38.900 195.600
37.700 204.600
37.000 213.600
36.800 222.600
37.200 231.500
38.000 240.400
39.300 249.100
41.100 257.700
43.300 266.100
46.000 274.300
49.200 282.200
52.800 289.800
56.800 297.100
61.200 304.000
66.000 310.500
71.900 319.100
78.300 327.300
85.000 335.000
92.100 342.300
99.600 349.000
107.300 355.300
115.400 361.100
123.700 366.400
132.300 371.100
141.100 375.400
150.000 379.100
159.200 382.300
168.400 384.900
177.800 387.100
187.300 388.700
196.800 389.800
206.400 390.400
216.000 390.500
225.600 390.200
235.100 389.300
244.600 388.000
253.900 386.200
263.200 383.900
272.300 381.300
281.300 378.200
290.100 374.800
298.600 371.000
306.900 366.900
315.000 362.400
322.800 357.700
330.200 352.700
337.400 347.500
344.100 342.100
350.500 336.500
342.700 331.600
335.100 326.500
327.500 321.300
320.000 316.000
312.600 310.600
305.300 305.000
298.100 299.300
291.000 293.500
286.600 303.100
281.400 312.000
275.400 320.000
268.900 327.200
261.800 333.500
254.300 338.900
246.500 343.400
238.400 346.900
230.100 349.600
221.800 351.200
213.400 352.000
205.100 351.700
197.000 350.600
189.000 348.500
181.400 345.600
174.000 341.700
167.000 337.000
160.400 331.500
154.300 325.300
148.800 318.200
143.800 310.500
139.400 302.200
135.600 293.300
132.400 283.900
130.000 274.000
128.200 263.700
127.200 253.200
127.000 242.400
127.400 231.400
128.700 220.400
130.700 209.500
133.400 198.700
136.900 188.100
141.200 177.900
146.200 168.200
152.000 159.000
159.400 149.600
167.100 141.100
175.000 133.600
183.200 126.900
191.600 121.100
200.100 116.200
208.800 112.200
217.600 109.100
226.500 106.700
235.300 105.200
244.200 104.600
253.000 104.700
261.700 105.700
270.300 107.400
278.800 110.000
287.100 113.300
295.100 117.300
303.000 122.200
310.500 127.700
317.700 134.000
324.500 141.000
330.200 134.900
336.200 129.100
342.400 123.500
348.900 118.100

View File

@ -0,0 +1,175 @@
2
114
197.100 305.000
197.100 67.900
197.300 54.000
197.500 48.800
197.700 44.600
198.100 41.500
198.500 39.400
200.000 35.000
202.200 31.400
205.100 28.700
208.100 27.100
211.900 25.800
216.700 24.800
222.400 24.200
222.400 17.000
135.700 0.000
135.700 32.600
131.900 28.100
128.200 23.900
124.500 20.100
121.000 16.700
117.600 13.700
114.300 11.000
111.100 8.700
108.000 6.800
103.900 4.700
99.500 3.000
95.000 1.700
90.400 0.800
85.500 0.200
80.500 0.000
75.000 0.200
69.600 0.700
64.400 1.600
59.400 2.900
54.500 4.500
49.900 6.500
45.300 8.800
41.000 11.500
36.800 14.600
32.800 18.000
29.000 21.800
25.300 25.900
21.800 30.400
18.400 35.300
15.900 39.400
13.500 43.700
11.400 48.100
9.400 52.700
7.600 57.400
6.000 62.200
4.600 67.200
3.400 72.300
2.300 77.500
1.500 82.800
0.800 88.300
0.400 93.900
0.100 99.700
0.000 105.600
0.100 111.100
0.300 116.500
0.700 121.800
1.300 127.000
2.000 132.100
2.900 137.100
3.900 142.000
5.100 146.900
6.400 151.600
7.900 156.200
9.600 160.700
11.400 165.200
13.800 170.300
16.300 175.200
19.000 179.800
21.900 184.200
24.900 188.300
28.100 192.100
31.500 195.700
35.100 199.100
38.800 202.100
42.700 205.000
47.100 207.800
51.600 210.300
56.200 212.400
60.900 214.300
65.600 215.700
70.400 216.900
75.300 217.700
80.300 218.200
85.300 218.400
91.100 218.200
96.500 217.500
101.800 216.300
106.700 214.700
111.400 212.700
115.200 210.500
119.200 207.900
123.200 204.800
127.300 201.200
131.500 197.200
135.700 192.600
135.700 262.100
135.500 268.400
135.200 273.700
134.900 277.900
134.400 281.100
133.800 283.200
130.500 288.800
125.900 292.700
122.700 294.000
118.300 295.000
112.800 295.600
106.100 295.800
106.100 305.000
58
132.400 171.200
129.000 176.600
125.400 181.200
121.600 185.300
117.700 188.800
113.700 191.600
109.500 193.800
105.100 195.300
100.700 196.300
96.100 196.600
91.000 196.100
86.500 194.600
82.700 192.200
79.500 189.000
76.700 185.100
74.000 180.200
71.600 174.600
69.400 168.200
68.500 164.900
67.700 161.300
67.000 157.400
66.300 153.200
65.800 148.700
65.300 144.000
64.900 138.900
64.600 133.500
64.400 127.800
64.300 121.800
64.300 109.100
64.400 103.000
64.600 97.200
65.200 86.500
65.700 81.500
66.200 76.900
66.800 72.500
67.500 68.400
68.200 64.500
69.000 61.000
70.000 57.700
72.000 51.800
74.200 46.400
76.700 41.600
79.400 37.400
82.400 33.700
85.500 30.600
89.300 28.300
93.900 26.900
99.300 26.400
103.600 26.800
107.800 27.900
112.000 29.800
116.100 32.500
120.100 35.800
124.100 40.000
128.000 44.800
131.900 50.500
135.700 56.900
135.700 165.300

View File

@ -0,0 +1,119 @@
2
61
7321.400 504.900
7334.500 553.900
7303.900 553.900
7311.200 578.600
7341.700 578.600
7355.600 624.300
7345.400 614.900
7338.100 609.800
7330.100 606.200
7322.800 603.300
7315.600 601.800
7309.000 600.400
7302.500 599.600
7287.900 599.600
7278.500 600.400
7269.800 602.500
7266.100 603.300
7261.800 604.700
7255.200 608.300
7251.600 612.000
7248.700 615.600
7246.500 618.500
7244.300 622.100
7241.400 627.200
7239.200 634.500
7237.000 644.600
7235.600 657.700
7235.600 670.000
7236.300 681.700
7237.800 691.100
7246.500 717.200
7258.100 744.800
7266.100 757.900
7274.100 769.500
7283.600 778.900
7295.900 789.100
7309.000 797.800
7322.100 804.300
7335.200 810.200
7348.300 813.800
7357.700 815.200
7367.900 816.000
7382.500 816.000
7391.900 815.200
7401.400 812.300
7409.400 808.700
7418.100 802.200
7421.000 800.000
7425.400 794.900
7429.700 787.700
7431.900 782.600
7432.600 777.500
7433.400 767.300
7432.600 759.300
7431.900 752.100
7427.500 737.600
7380.300 578.600
7410.100 578.600
7403.500 551.700
7374.500 551.700
7361.400 504.500
55
7390.500 745.500
7391.200 751.400
7391.200 757.200
7390.500 761.500
7388.300 765.900
7386.100 768.800
7383.200 770.200
7380.300 771.700
7377.400 772.400
7373.000 773.900
7367.900 774.600
7357.700 774.600
7354.100 773.900
7349.700 773.100
7345.400 772.400
7339.600 771.000
7336.700 769.500
7333.000 767.300
7329.400 764.400
7322.800 760.100
7314.800 752.100
7310.500 746.300
7306.800 741.200
7303.900 735.400
7300.300 729.600
7297.400 723.800
7294.500 717.200
7291.600 712.200
7289.400 705.600
7287.200 699.800
7285.800 694.700
7282.900 688.200
7279.900 676.600
7278.500 669.300
7277.800 664.200
7277.800 658.400
7278.500 651.900
7279.900 648.300
7280.700 643.200
7282.100 639.600
7284.300 635.900
7287.200 632.300
7290.800 628.700
7293.800 627.200
7299.600 625.800
7304.700 625.000
7315.600 625.000
7319.900 626.500
7325.000 627.900
7330.100 630.100
7333.700 632.300
7339.600 636.700
7345.400 640.300
7354.100 649.000
7363.400 658.900

View File

@ -0,0 +1,58 @@
1
56
260.600 37.500
182.500 37.500
182.500 82.500
176.600 73.700
170.100 65.800
163.000 58.600
155.500 52.200
147.500 46.700
139.200 41.900
130.600 38.000
121.800 34.800
112.900 32.400
103.800 30.800
94.800 30.000
85.800 30.000
76.900 30.800
68.100 32.300
59.600 34.600
51.500 37.700
43.600 41.600
36.300 46.200
29.400 51.600
23.100 57.800
17.400 64.700
12.500 72.400
8.300 80.900
4.900 90.100
2.400 100.100
0.900 110.800
0.400 122.300
0.400 328.700
78.500 328.700
78.500 160.200
77.900 145.600
78.800 132.700
81.000 121.400
84.400 111.700
88.800 103.600
94.100 97.000
100.100 91.800
106.700 88.000
113.800 85.700
121.300 84.600
128.800 84.900
136.400 86.300
143.900 89.000
151.200 92.900
158.000 97.800
164.300 103.900
169.900 110.900
174.600 119.000
178.400 128.000
181.100 137.900
182.500 148.600
182.500 328.700
260.600 328.700

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,6 @@
1
4
-0.8 -0.4
0.8 -0.4
0.8 0.4
-0.8 0.4

View File

@ -0,0 +1,7 @@
1
5
-0.8 -0.8
0.0 -0.6
0.8 -0.8
0.8 0.8
-0.8 0.8

View File

@ -0,0 +1,6 @@
1
4
-0.8 -0.8
0.8 -0.8
0.8 0.8
-0.8 0.8

View File

@ -0,0 +1,13 @@
1
8
-100 -100
0 -1200
100 -100
1200 0
100 100
0 1200
-100 100
-1200 0

View File

@ -0,0 +1,5 @@
1
3
-0.8 -0.8
0.8 -0.8
0.0 0.8