2013-03-08 1 views
6

Ho un grosso problema con l'intersezione boost. vorrei intersecano un triangolo con un quad, ma ho una clip:Boost Intersezione non funzionante

i46.tinypic.com/2nvuo01.png

Qualcuno può aiutarmi?

Ho provato a cambiare l'orientamento della geometria, non è successo nulla. l'intersezione funziona con altri triangoli, ma non con questo.

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

Il triangolo:

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

La scatola:

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

UPDATE:

Ecco il mio codice. Io uso gcc 4.7.2 con boost 1.53.0 su 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

ho modificato il mio post – shinpei

risposta

7

La mia ipotesi migliore è che questo ha a che fare con che precisa i punti in ordine antiorario quando per default polygon aspetta i punti per essere in senso orario. Così si avrebbe bisogno di cambiare come segue:

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

Si può leggere di più su questo problema here

+1

thx. sì, era l'orientamento. – shinpei