2013-03-08 80 views
6

我有一個提升交叉點的大問題。我想相交四三角形,但我得到一個片段:Boost Intersection不能正常工作

i46.tinypic.com/2nvuo01.png

有人可以幫我嗎?

我試圖改變幾何的方向,什麼也沒有發生。該交叉點與其他三角形一起工作,但與此不同。

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

三角形:

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

盒:

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

UPDATE:

這裏我的代碼。我在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

我編輯我的職務 – shinpei 2013-03-09 13:39:40

回答

7

使用gcc 4.7.2與升壓1.53.0我最好的猜測是,這與按逆時針順序指定點時默認polygon預計該點是順時針順序做。所以,你需要進行如下更改:

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

你可以閱讀更多有關此問題的here

+1

THX。是的,這是方向。 – shinpei 2013-03-11 18:18:54