Boost Intersection gehts nicht

shinpei

Grünschnabel
Hallo,

ich nutze boost 1.54.0 mit gcc 4.7 unter Ubuntu 12.10.
Wenn ich boost intersection auf ein Dreicke und ein Rechteck anwendet verhält sich es wir ein Cut
UlyA5.png

Kann mir jemand sagen, wo der Fehler liegt? Die Orientierung der Geometrie hab ich schon ohne Erfolg geändert.

Hier den Code, den ich verwende :
Code:
#include <deque>
#include <fstream>

#include <boost/geometry.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/io/wkt/wkt.hpp>
#include <boost/geometry/extensions/io/svg/svg_mapper.hpp>

using namespace boost::geometry;

int main()
{
    typedef model::polygon<model::d2::point_xy<double> > polygon;
    typedef typename model::d2::point_xy<double> point_type;

    polygon quad, triangle;

    read_wkt("POLYGON((-213.57 -2.131 , -350.0 37.5 , -350.0 -2.842 , -213.57 -2.131))", triangle);
    read_wkt("POLYGON((-300.0 2 , -300 170 , -165 170 , -165 2 , -300 2))", quad);

    std::deque<polygon> output;
    intersection(quad, triangle, output);

    std::string filename = "intersectiontest.svg";
    std::ofstream svg(filename.c_str());
    svg_mapper<point_type> mapper(svg, 600, 600);

    mapper.add(output[0]);
    mapper.map(output[0], "fill-opacity:0.5;fill:rgb(153,204,0);stroke:rgb(255,0,0);stroke-width:5");

}
 
Hi.

Nettes Programm. Das gab mir Gelegenheit mal Boost.Geometry auszuprobieren.

Es liegt im Grunde an der Orientierung der Objekte.

Das Dreieck hast du im Uhrzeigersinn definiert, das Rechteck hingegen entgegen des Uhrzeigersinns. (Wenn du schreibst du hast die Orientierung geändert, vermute ich das du im typdef den zweiten Paramter auf false gesetzt hast?)

Es gibt wie immer mehrere Möglichkeiten; die einfachste:

C++:
read_wkt(..., triangle);
read_wkt(..., quad);

correct(quad);
correct(triangle);
 
Zurück