在SVG路径中查找最大的矩形

时间:2012-05-08 23:36:25

标签: algorithm math svg geometry

考虑到SVG路径造成的不规则形状,如何计算最大的矩形(只有水平和垂直边框)?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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