提升交叉口不起作用

时间:2013-03-08 23:55:51

标签: c++ boost boost-geometry

我对增强交叉点有一个很大的问题。我想将三角形​​与四边形相交,但我得到一个剪辑:

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)

更新

这是我的代码。我在Ubuntu 12.10上使用gcc 4.7.2和boost 1.53.0

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

}

1 个答案:

答案 0 :(得分:7)

我最好的猜测是,这与按逆时针顺序指定点有关,默认情况下polygon期望点按顺时针顺序排列。所以你需要改变它如下:

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

您可以详细了解此问题here