【问题标题】:Finding Top Left and Bottom Right Points (C++)查找左上角和右下角 (C++)
【发布时间】:2012-11-22 07:16:28
【问题描述】:

我正在为我正在进行的项目寻求帮助。

我正在做的是一个多边形逼近算法。我已经得到了边界的所有点,但是为了启动算法,我需要从点集中找到左上角和右下角的点。所有点都存储在一个结构数组中,该数组具有每个点的 x 和 y 坐标。关于循环点数组的简单方法的任何想法?

任何帮助将不胜感激。如果您需要更多信息,请询问,我会尽力提供。

【问题讨论】:

  • 是的,我知道如何“遍历点数组”——使用for 语句或while
  • 显然会有某种循环。我需要弄清楚如何确定左上角和右下角的点。如果它是左下角和右上角,它只是最小的 x+y 和最大的 x+y,但这不是我要找的。​​span>
  • 左上角的定义是什么?是最高 y 最低 x 的点吗?当您有竞争标准时会发生什么,例如两点,一个具有最高的 y,但不是最低的 x,另一个具有最低的 x 但不是最高的 y。你如何选择获胜者。
  • 说清楚;你需要你的边界矩形的角吗?还是多边形集中的一个点?
  • 最大的 x+y 几乎不是“右上角”。如果您沿一个轴拉伸多边形,“顶部”和“右侧”保持不变,但您的“右上角”会发生变化。目前尚不清楚为什么“右上角”对于多边形近似很重要。无论如何,如果这是您想要的,请考虑翻转 x 坐标的符号反转“左”和“右”。

标签: c++ polygon


【解决方案1】:

根据您的评论,左下角是min(x+y),右上角是max(x+y)

左上角:min(x+max(y)-y)

右下:max(max(x)-x+y)

其中的内部max 是一个常量。

虽然这可能并不总是给出与你的眼睛一致的结果。

可以根据与对象边界框角的距离或距离的平方等构建替代度量。

另一种技术是围绕原点平移多边形,然后左上角是离原点最远但在左上象限的点......这提供了一大堆选择(0,0)的位置可能是总而言之,可以根据某些规则进行加权平均,等等。您选择的方式有很多可变性,如果多边形与眼睛会选择的多边形不同,每个结果都可能会有所不同。

最后,你总是可以训练一个神经网络来选择答案......这可能会导致(插入训练的置信度限制)% 可能给出你同意的答案......但你和我可能不同意

【讨论】:

  • 如果max(y)是一个常数,你不妨从集合中的所有数字中减去它。
  • 我刚收到教授的一封电子邮件,我们可以使用左下角和右上角的作业。所以我会继续使用它。感谢大家的帮助。在接下来的几天里,我可能会在这里提出更多与该项目相关的问题。响应时间给我留下了深刻的印象。
【解决方案2】:

左上角:min(x+max(y)-y)

右下:min(max(x)-x+y)

内部最大值是一个常数。

【讨论】:

    【解决方案3】:

    对于角,我使用了 2 个指示变量 left 和 up ,它们的值可以是 {-1,1}。

    对于上角(即左上角和右上角)向上:= 1,
    如果它的下角(即左下角和右下角)向上:= -1 .

    左变量类似:
    left:= 1 表示左上角和左下角
    left := -1 表示右上角和右下角

    然后可以通过最大化term来找到角点

    左 * point.x + up * point.y

    所有坐标。

    【讨论】:

      猜你喜欢
      • 2021-08-21
      • 2013-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2015-09-22
      • 2022-06-25
      • 2016-06-08
      相关资源
      最近更新 更多