首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定两个多边形是否使用剪刀相交?

如何确定两个多边形是否使用剪刀相交?
EN

Stack Overflow用户
提问于 2016-07-14 19:34:05
回答 1查看 1.7K关注 0票数 2

我正在使用剪刀,并希望确定两个(多)多边形相交。

我的期望是,图书馆会有一个很好的,抽象的方式来问这个问题,但它似乎没有。

我认为Area()方法可能很有用,但它只在Path上工作,Execute()方法返回Paths

我构建了以下M(几乎)--我们演示了这个问题:

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-14 19:35:32

似乎最简单的方法是计算由Paths方法返回的Execute()对象中的路径数。Paths是一个简单的向量,所以,如果它有size()==0,就没有交集。

代码语言:javascript
复制
#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);
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38382777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档