2013-03-08 138 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