Ich benutze Clipper und möchte feststellen, ob zwei (Multi-) Polygone sich schneiden.Wie kann ich feststellen, ob sich zwei Polygone mit Clipper überschneiden?
Meine Erwartung war, dass die Bibliothek eine schöne, abstrakte Art hätte, diese Frage zu stellen, aber das scheint sie nicht zu tun.
Ich dachte, dass die Area()
Verfahren nützlich sein könnte, aber es funktioniert nur auf Path
und die Execute()
Methode gibt Paths
.
Ich habe die folgende M (fast) bauten wir das Problem demonstriert:
#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);
}