【问题标题】:Efficiently project 2D plane onto 1D line高效地将 2D 平面投影到 1D 线上
【发布时间】:2014-05-06 03:53:32
【问题描述】:

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

一个例子:

必须像这样投影:

但问题是积木堆得不整齐,但可以是任何形状和位置

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

重要的是维护一个列表(向量),其中包含其他块被投影块遮挡的列表。这些块带有重要的元数据,所以我应该能够回答“这个块投影到哪个线段?”这个问题。

那么具体而言,如何将 2D 平面有效地投影到一条线上,从某种意义上说是“投射阴影”,以一种保持查看线段中哪些块(阴影)的方法的方式?

编辑:虽然问题比较笼统,但具体的问题是我有一个包含多列和浮动图像的文档,我想为其生成一个“小地图”,指示在哪里找到某些注释(颜色)

【问题讨论】:

  • 你如何决定哪些块被投射,哪些不被投射?你想保留每个区块的历史吗?目前还不完全清楚你想要什么......
  • @ChrisMaes 在示例中我假设为“第一大”。在编辑中,我更具体地解释了这个问题。我有一个文档(如 html),我想为其生成一个能够显示注释的“小地图”。我认为,美学上较大的街区比一堆较小的街区更漂亮。

标签: algorithm graph line projection plane


【解决方案1】:

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

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

  2. 按 y 递增顺序扫描列表,保持一组矩形代表包含当前 y 值的矩形。对于矩形 r 的每个顶部,将 r 添加到 S。类似地,对于 r 的每个底部,从 S 中删除 r。每次执行此操作时,都会关闭一个段并开始一个新段。如果此时检查 S,您将拥有参与分段的所有矩形,因此这里是应用策略以选择分段颜色的地方。

如果您以后需要知道矩形属于哪些段,您可以在矩形和段列表之间建立映射,并在扫描期间对其进行更新。

【讨论】:

    猜你喜欢
    • 2017-10-06
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多