나는 부스트 :: 지오메트리와 몇 개의 직사각형을 교차시키는 작은 테스트 어플리케이션을 가지고 있습니다.Boost :: 지오메트리 교차가 예상대로 작동하지 않습니다.
typedef boost::geometry::model::point
<
double, 2, boost::geometry::cs::cartesian
> point;
typedef boost::geometry::model::polygon<point > polygon;
polygon Intersect(polygon p1, polygon p2) {
std::vector <polygon> result;
boost::geometry::intersection(p1, p2, result);
return result.front();
}
polygon IntersectionTest() {
polygon one, two, three, four;
boost::geometry::read_wkt("POLYGON((35 25, 35 35, 15 35, 15 25, 35 25))", one);
boost::geometry::read_wkt("POLYGON((45 30, 45 50, 25 50, 25 30, 45 30))", two);
boost::geometry::read_wkt("POLYGON((50 0, 50 40, 10 40, 10 0, 50 0))", three);
boost::geometry::read_wkt("POLYGON((40 20, 40 60, 0 60, 0 20, 40 20))", four);
return Intersect(Intersect(Intersect(one, two), three), four);
}
나는 결과는 아직 내가 할을
(35 30, 35 40, 25 40, 25 30, 35 30)
같은 될 것으로 기대 때문에 내가 뭔가 잘못을 수행해야합니다
병렬 사각형의 교차는 항상 4 + 1 점 50 0
으로 사각형을해야합니다 동안 50 0
같은 점을 포함 10 점 긴 다각형 그것은 교차점에 있어서는 안된다. SVG에 넣으면 직사각형이 예상 한 것처럼 보입니다.
무엇이 잘못 될 수 있습니까? boost::geometry
의 버그 인 경우 어떻게 확인할 수 있습니까? (현재 1.48을 사용하고 있습니다.) 버그 일 경우 문제를 피할 수있는 방법이 있습니까? true로 두 번째 템플릿 매개 변수의 기본값을 참조로
template
<
typename Point,
bool ClockWise = true,
bool Closed = true,
template<typename, typename> class PointList = std::vector,
template<typename, typename> class RingList = std::vector,
template<typename> class PointAlloc = std::allocator,
template<typename> class RingAlloc = std::allocator
>
class polygon {...}
:
우후! 올바른 (기하학) 내 문제를 해결! 고맙습니다! –