2016-03-01 98 views
3

我有一组“块”(用红线和绿线表示)放置在“容器”(用蓝线表示)内。查找一组点的特定轮廓

enter image description here

所有块(绿色和红色的点)和容器的所有相关信息的交叉点的(角度,梯度,开始,结束点等)是已知的。

我想在块放置后(由绿线和点表示)提取结果图的“最顶部”轮廓。

我试图使用的方法,例如凸包,但它不给出确切的线(由紫线下图中示出。)

enter image description here

我的问题是任何人都可以指向我一个解决方案或某种算法,我可以用来解决这类问题?

+0

我也出现了凸包,你能解释它为什么不起作用吗 – shole

+0

你知道哪些点(从全点列表)是“绿色”吗? – MBo

+0

@shole凸包将生成如第二张图片所示的紫色轮廓,而我所寻找的输出是绿色轮廓。我猜这是因为凸包将直接加入边界点。 –

回答

1

用所有点填充列表(数组)。 (T形节点中的重复点,如图片中的第2个绿色点)
按Y坐标对此列表排序
扫描列表(从顶点开始)像扫描线算法。
在每一个阶段你都会得到一组具有相同Y坐标(一对或多对)的点。
从左侧和右侧移除包括间隔(见下文)的点。
根据这些点对的间隔(通过X坐标)。
在区间(分段)树中添加这些区间。
加入邻居间隔。
重复,直到单个间隔覆盖所有顶部。

+0

嗨我不能完全明白你的意思,通过删除从左右两个区间覆盖的点。你能详细解释一下吗? –

+0

你没有考虑过红点(他们上面有绿色部分) – MBo

+0

所以我的想法和扫描线一样,如果有绿点下的点,我会移除所有这些点? –