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)

ОБНОВИТЬ:

Вот мой код. Я использую gcc 4.7.2 с boost 1.53.0 на 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");

}

6

Решение

Мое лучшее предположение заключается в том, что это связано с указанием точек в направлении против часовой стрелки, когда по умолчанию polygon ожидает, что точки будут в порядке по часовой стрелке. Таким образом, вам нужно изменить его следующим образом:

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

Вы можете прочитать больше об этой проблеме Вот

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]