2013-03-08 8 views
6

Ich habe ein großes Problem mit Boost-Kreuzung. ich möchte ein Dreieck mit einem Quad schneiden, aber ich bekomme einen Clip:Boost Intersection funktioniert nicht

i46.tinypic.com/2nvuo01.png

Kann mir jemand helfen?

Ich habe versucht, die Ausrichtung der Geometrie geändert, nichts passiert. Die Kreuzung arbeitet mit anderen Dreiecken, aber nicht mit diesen.

typedef model::polygon<model::d2::point_xy<double> > polygon 
std::deque<polygon> tmp; 
bool ok = intersection(quad, triangle, tmp) 

Das Dreieck:

-213.57 -2.13163e-14 0 
-350  37.5   0 
-350  -2.84217e-14 0 

Die Box:

BoundingBox(-300, -165, 2, 170, -0.1, 0.1) 

UPDATE:

Hier mein Code. Ich benutze gcc 4.7.2 mit Boost 1.53.0 auf Ubuntu 12,10

#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"); 

} 
+0

i bearbeiten mein Beitrag – shinpei

Antwort

7

Meine beste Vermutung ist, dass diese mit Angabe der Punkte in entgegen dem Uhrzeigersinn, wenn standardmäßig zu tun haben polygon die Punkte erwarten im Uhrzeigersinn zu sein. So müssen Sie es wie folgt zu ändern:

read_wkt("POLYGON((-213.57 -2.131 , -350.0 -2.842 , -350.0 37.5 , -213.57 -2.131))", triangle); 

Sie mehr zu diesem Thema lesen here

+1

thx. Ja das war die Orientierung. – shinpei