我正在使用剪刀,并希望确定两个(多)多边形相交。
我的期望是,图书馆会有一个很好的,抽象的方式来问这个问题,但它似乎没有。
我认为Area()方法可能很有用,但它只在Path上工作,Execute()方法返回Paths。
我构建了以下M(几乎)--我们演示了这个问题:
#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);
}发布于 2016-07-14 19:35:32
似乎最简单的方法是计算由Paths方法返回的Execute()对象中的路径数。Paths是一个简单的向量,所以,如果它有size()==0,就没有交集。
#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 solution.size()!=0;
}
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);
}https://stackoverflow.com/questions/38382777
复制相似问题