2013-03-08 15 views
6

Mam duży problem z przecięciem doładowania. chciałbym przecinają trójkąt z quad, ale ja dostać klipu:Zwiększenie przecięcia nie działa

i46.tinypic.com/2nvuo01.png

Czy ktoś mógłby mi pomóc?

Próbowałem zmienić orientację geometrii, nic się nie stało. przecięcie działa z innymi trójkątami, ale nie z tym.

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

Trójkąt:

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

okno:

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

UPDATE:

Oto mój kod. Używam gcc 4.7.2 z doładowania 1.53.0 na 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

edytowany mój post – shinpei

Odpowiedz

7

Mój najlepszy przypuszczenie to, że ma to związek z wyszczególnieniem punktów w lewo, aby po domyślnie polygon spodziewa punkty się być w porządku do ruchu wskazówek zegara. Więc trzeba by zmienić ją w następujący sposób:

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

Możesz przeczytać więcej na ten temat here

+1

thx. tak, to była orientacja. – shinpei