6

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

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

}
4

1 回答 1

7

我最好的猜测是,这与按逆时针顺序指定点有关,而默认情况下polygon希望这些点按顺时针顺序排列。因此,您需要按如下方式进行更改:

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

您可以在此处阅读有关此问题的更多信息

于 2013-03-11T02:18:23.777 回答