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でブースト1.53.0でgcc 4.7.2を使用しています

#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 に答える