2013-03-08 2 views
6

У меня есть большая проблема с перекрестком перекрестка. я хотел бы пересекать треугольник с четверного, но я получаю клип:Boost Пересечение не работает

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:

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

} 
+0

я редактировал мой пост – shinpei

ответ

7

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

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

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

+1

ТНХ. да, это была ориентация. – shinpei

Смежные вопросы