【发布时间】:2016-07-14 19:34:05
【问题描述】:
我正在使用 Clipper 并想确定两个(多)多边形是否相交。
我的期望是图书馆会有一种很好的抽象方式来提出这个问题,但似乎没有。
我认为Area() 方法可能有用,但它只适用于Path,而Execute() 方法返回Paths。
我已经构建了以下 M(几乎)WE 来演示该问题:
#include <iostream>
#include "clipper.hpp"
using namespace ClipperLib;
Paths MakeBox(int xmin, int xmax, int ymin, int ymax){
Paths temp(1);
temp[0] << IntPoint(xmin,ymin) << IntPoint(xmax,ymin) << IntPoint(xmax,ymax) << IntPoint(xmin,ymax);
return temp;
}
bool Intersects(const Paths &subj, const Paths &clip){
ClipperLib::Clipper c;
c.AddPaths(subj, ClipperLib::ptSubject, true);
c.AddPaths(clip, ClipperLib::ptClip, true);
ClipperLib::Paths solution;
c.Execute(ClipperLib::ctIntersection, solution, ClipperLib::pftNonZero, ClipperLib::pftNonZero);
return Area(solution);
}
int main(){
Paths subj = MakeBox(0,10,0,10);
Paths clip1 = MakeBox(1,2,1,2);
Paths clip2 = MakeBox(15,20,15,20);
Intersects(subj,clip1);
Intersects(subj,clip2);
}
【问题讨论】:
标签: c++ intersection clipperlib