【发布时间】:2014-06-09 11:42:08
【问题描述】:
对于给定的矩形R1,我试图找出可以与之相交的其他矩形IF我画了一条垂直线段。 p>
与R1 相交的矩形标记为红色。
每个矩形都以其(top, left) 和(bottom, right) 坐标为特征。
R1 = [top, left, bottom, right],...,Rn = [top, left, bottom, right]
通过使用坐标和垂直线。我想找到与 R1 相交的矩形
解决方案
我发现以下库与 icl boost 库的工作相同,但必须更简单: 下载地址:[https://github.com/ekg/intervaltree][2]
#include <iostream>
#include <fstream>
#include "IntervalTree.h"
using namespace std;
struct Position
{
int x;
int y;
string id;
};
int main()
{
vector<Interval<Position>> intervals;
intervals.push_back(Interval<Position>(4,10,{1,2,"r1"}));
intervals.push_back(Interval<Position>(6,10,{-6,-3,"r2"}));
intervals.push_back(Interval<Position>(8,10,{5,6,"r3"}));
vector<Interval<Position> > results;
vector<string> value;
int start = 4;
int stop = 10;
IntervalTree<Position> tree(intervals);
// tree.findContained(start, stop, results);
tree.findOverlapping(start, stop, results);
cout << "found " << results.size() << " overlapping intervals" << endl;
}
示例
- 左 = 4;
- 右 = 10;
- 结构 {1,2,"rc1"};
intervals.push_back(Interval(4,10,{1,2,"r1"}));
【问题讨论】:
-
您有什么问题?你试过什么?
-
我正在尝试找出这个问题是否存在以及是否有特定的算法来解决它@JoachimPileborg
-
我正在研究扫描线算法的想法。但对我来说听起来太复杂了。我想找到一种更简单的方法来做到这一点
-
你的意思是“找到所有与任何可以通过 R1 绘制的垂直线相交的矩形”?我问是因为这完全是重叠线段的一维问题。
-
@Agent_L 是的,这就是我想要的。与可通过 R1 绘制的任何垂直线相交的所有矩形"
标签: c++ computational-geometry intersection rectangles