【问题标题】:Find largest rectangle inside an SVG path查找 SVG 路径内的最大矩形
【发布时间】:2012-05-08 23:36:24
【问题描述】:

给定一个由 SVG 路径构成的不规则形状,如何计算可以容纳在其中的最大矩形(只有水平和垂直边框)?

【问题讨论】:

  • 定义最大:面积?周长?最大的单一维度?
  • 最大 = 面积最大的矩形。
  • 您是指形状周围的边界框吗?即一个矩形形状,延伸到形状所接触的 minX、minY、maxX 和 maxY 笛卡尔坐标?
  • 它基本上是“最大矩形问题”。是不是更清楚了?

标签: algorithm math svg geometry


【解决方案1】:

我认为在一般情况下您找不到最大的矩形。您应该更好地考虑找到适合在网格上绘制的形状内的最大矩形的问题,它会给您一个很好的近似值,通过减少网格的步长,您可以提高精度你的近似值。

在网格上,问题可以在 O(n) 中解决,其中 n 是网格中的单元数。

【讨论】:

    【解决方案2】:

    SVG 路径由线段、三次贝塞尔路径、二次贝塞尔路径和椭圆弧组成。因此它是分段可微的。它由有限数量的段组成,而不是无限循环。别笑,像 Haskell 这样的“懒惰”编程语言可以很容易地表示这样的事情,但在 SVG 中是不允许的。特别是,尽管 SVG 路径在我们看来可能看起来像分形,但它在数学上不可能是分形。此外,常量只能是整数或 IDL 浮点数,它们是 IEEE 单精度浮点数。因此,在网格点处具有所有这些数字的网格的分辨率可能被认为很大,但它肯定是有限的。

    使用这些事实,我声称,一般来说,如果 SVG 路径包含一个区域,那么路径中包含的矩形存在最大区域;并且有一种易于处理的算法可以找到(至少)一个面积最大的矩形。

    任何算法都需要考虑困难的情况,例如(近似)空间填充曲线,它可能有大量小但仍然“最大”的矩形。我不知道算法,所以我们可以在这里考虑如何开发一个。你能解决仅由线段构成的路径的问题吗?网格生成算法会有帮助吗?考虑具有相同中心和面积的矩形的角在一对双曲线上是否有帮助?了解凸包算法是否有帮助?您是否需要称为 max-min 的微分方法,或者可能不需要?那么,您将如何扩展您的算法以允许其他类型的路径段?将这些路径段近似为多边形路径是否有必要、有帮助或没有必要?

    【讨论】:

    • 哇 - 这看起来真的很复杂。我目前正在玩 raphael.js。这个想法是定义一个最小尺寸的矩形(150 / 100)并将它们平铺。完成后我会在这里发帖。
    • 你真的相信它可以产生一个可用的算法吗?
    • 没有冒险,没有收获? :-)
    • 我要实现这个想法。它并不完美,但希望足够好。 stackoverflow.com/questions/7332065/…
    猜你喜欢
    • 2022-01-22
    • 1970-01-01
    • 2010-09-05
    • 2017-04-13
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多