i have a big problem with boost intersection. i would like to intersect a triangle with a quad, but i get a clip:
Can somebody help me?
I tried to changed the orientation of the geometry, nothing happened. the intersection work with other triangles, but not with this.
typedef model::polygon<model::d2::point_xy<double> > polygon
std::deque<polygon> tmp;
bool ok = intersection(quad, triangle, tmp)
The triangle:
-213.57 -2.13163e-14 0
-350 37.5 0
-350 -2.84217e-14 0
The box:
BoundingBox(-300, -165, 2, 170, -0.1, 0.1)
UPDATE:
Here my code. I use gcc 4.7.2 with boost 1.53.0 on 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");
}
My best guess is that this has to do with specifying the points in counterclockwise order when by default polygon
expects the points to be in clockwise order. So you would need to change it as follows:
read_wkt("POLYGON((-213.57 -2.131 , -350.0 -2.842 , -350.0 37.5 , -213.57 -2.131))", triangle);
You can read more about this issue here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With