有效地将2D平面投影到1D线上

时间:2014-03-27 09:23:37

标签: algorithm graph line projection plane

我有一组[width, height, x, y]向量,如下所示:[[width_1, height_1, x_1, y_1],...,[width_n, height_n, x_n, y_n]]表示块的2D平面。该向量可能很长(n> 10k)。

一个例子:

enter image description here

必须像:

一样

enter image description here

然而问题是块体没有整齐堆叠,但可以处于任何形状和位置

enter image description here

块应该是项目的标准并不重要。在示例中,我采用了第一个(在x轴上)最大的;这似乎是合理的。

重要的是保持列表(向量)其他块被投影块遮挡。这些块具有重要的元数据,因此我应该能够回答“这个块投射到哪个线段?”的问题。

具体地说,如何将2D平面有效地投射到线上,在某种意义上“投射阴影”,这种方式可以保持一种方法来查看哪些块在线段(阴影)中分离?

编辑:虽然问题相当普遍,但具体问题是我有一个文档有多列和浮动图像我想生成一个“小地图”,指示在哪里找到某些注释(颜色)

1 个答案:

答案 0 :(得分:1)

假设矩形始终与轴对齐,如示例所示,我会使用sweep line方法:

  1. 根据y值对矩形顶部/底部进行排序。对于每个元素,请保留对完整矩形数据的引用。

  2. 按递增y顺序扫描列表,保持一组矩形表示包含当前y值的矩形。对于矩形r的每个顶部,将r添加到S.同样,对于r的每个底部,从S中删除r。每次执行此操作时,将关闭一个段并启动一个新段。如果此时检查S,则您拥有参与该段的所有矩形,因此这是应用策略来选择段颜色的位置。

  3. 如果您稍后需要知道矩形属于哪些段,您可以在矩形和段列表之间构建映射,并在扫描期间更新它。