【问题标题】:Algorithm for regularizing or normalizing a polygon which is supposed to be rectangular用于正则化或规范化应该是矩形的多边形的算法
【发布时间】:2018-07-18 13:42:13
【问题描述】:

我的应用程序通过让用户将相机对准地板角落,然后进行大量数学运算,最终得到一个多边形来捕捉房间的形状。

假设墙壁是直的(不是弯曲的)。大多数角落是由相互垂直的墙壁形成的,但在某些情况下可能不是。

根据用户指向相机的准确度,我为角导出的 (x,y) 坐标可能超出实际角,或者在实际相机前面,或者不太可能在左侧或右侧.显然,在这种情况下,当我连接点时,我会得到奇怪的平行四边形或菱形形状。见例子。

我正在寻找一种程序或算法来规范化或正则化这些形状,前提是我们知道哪些角应该是直角。

我最初的尝试涉及找到角度彼此“接近”的线段,将它们全部调整到相同的角度,然后重新计算顶点。然而,这个算法被证明是不稳定的。

我目前的想法是找到最钝的角度(由于一个点被错误地放置在实际拐角之外),或者最尖锐的角度(由于一个点被错误地放置在实际拐角的前面) ,并找到使其成为直角的角点。然而,问题在于,这样的调整可能会对其他角产生副作用,例如使它们离直角更远。我觉得我需要某种算法来获取所有信息并立即优化/解决它——这是一种线性规划问题吗?——但我被卡住了。

【问题讨论】:

  • "假设墙壁是直的(不是弯曲的)。 " 可能,但你永远不知道。 “大部分角落是由相互垂直的墙壁形成的”不太可能。客房建设不是火箭科学。
  • @Ripi2 感谢您的评论,但我并没有对建筑的本质做出笼统的陈述。我正在为解决这个特殊问题设定条件。换句话说,至少就目前而言,任何解决方案都可以处理直墙和直角的角。

标签: geometry polygon


【解决方案1】:

没有唯一的解决方案。

例如,取一条边的中点到两条相邻边的垂线。这会给你两个新的角落。

或者取一条边的端点到其他边的垂线。

或者计算边缘端点的平均角度。使用这个平均值和边缘的中点来计算新的角点。

或者……

要获得最忠实的合规性,请捕获(或计算)每个角到其他三个角的距离。用这些距离构建三角形。然后使用您从 2 个或 3 个三角形计算出的角坐标的平均值。
生成的角度不会正好是 90 度,但多边形会公平地代表房间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多