矢量形状差异&路口

时间:2012-12-27 21:50:30

标签: vector-graphics

让我解释一下我的问题:

我有一个黑色矢量形状(让我们说它现在是一系列连接的直线,但如果我还能支持二次曲线那就很好。)

我还有一个预定宽度和高度的矩形。我要把它放在黑色的顶部,然后取两者的结合。

我的第一个问题是我不知道如何快速提取矢量联合,但我认为我能为自己找出一个定义明确的公式。

我的第二个也是更棘手的问题是如何有效地检测矩形需要的位置(即矩阵需要什么平移和旋转),以便最大化黑色,在结合后保留(见图,下面)。

下面的红色轮廓形状为~33%黑色;绿色是85%;并且有这种形状和位置的位置。矩形,其中任何一个可以有100%的覆盖率。

optimal rectangle positioning

显然,我可以通过尝试每个至少部分矩形接触黑色形状的点的每个平移和旋转值来强制执行此操作,然后跟踪具有最大黑色覆盖范围的那个。问题是,我只能尝试有限数量的位置(因此可能会错过最大值)。除此之外,感觉非常低效!

你能想到更有效的方法来解决这个问题吗?

我的Uni时代的某些东西告诉我傅立叶变换可能会提高效率,但我无法弄清楚我是如何用矢量形状做到的!

3 个答案:

答案 0 :(得分:2)

有三个想法比蛮力搜索更快和/或更精确:

  1. 假设您有一个3d物理引擎。定义一个&#34;锥形&#34;顶点所在的表面(0,0,-1),z = 0平面上的黑色多边形边界,其原点位于原点,锥形表面是通过将顶点与半无限光线连接而形成的。多边形边界。想想一个颠倒的派对帽子,并将其弄皱成黑色多边形的形状。现在将矩形约束为与z = 0平面平行,并且最初在锥体(大z值)上方如此之高,以至于很容易找到它绝对是#34;内部&#34的地方;。然后让矩形在重力作用下向下倾斜,绕z旋转并仅在接触锥体时在x-y中平移,一直向下保持直到它停止并且不能再向前移动。物理引擎的碰撞检测和力分辨率处理复杂性。当它结束时,它将处于局部意义上的黑色多边形的最大覆盖范围的位置。 (如果它以z <0结算,则覆盖率为100%。)对于凸状情况,它可能是全局最大值。为了概率地改善非凸情况的结果(如你的例子),你可以随机化起始位置,多次丢弃多边形,取得最佳结果。请注意,您并不需要一个完整的物理引擎(尽管they certainly exist in open source)。它足以使用碰撞分辨率来告诉您如何以伪物理方式旋转和平移矩形,因为它尽可能地沿z轴均匀地扭转和滑动。

  2. 不同的物理模型。假设黑色区域在2d中是一个有吸引力的场发生器,遵循通常的反平方规则,如重力和磁力。现在让矩形在响应该场的阻尼介质中漂移。它应该与黑色区域重叠的最大区域稳定下来。 &#34; nulls&#34;存在问题。就像在甜甜圈的中心,但我不认为这些可以是稳定的equillibria。他们可以吗?通过将两个形状建模为粒子群,可以轻松完成模拟。或者由于矩形是一个简单的形状而且你是一个物理学家,你可以想出一个封闭的形式,用于点和矩形之间的吸引力的积分。这种方式只有黑色形状需要表示为粒子。想想看,如果你能想出一个由两个三角形引起的扭矩和线性吸引力的闭合形式,那么你可以用(例如Delaunay)三角剖分分解这两个形状并获得精确的答案。不幸的是,this discussion意味着它不能通过分析完成。因此粒子云可能是最终的解决方案。好消息是现代处理器,特别是GPU,以惊人的速度进行非常大的粒子计算。 修改:我实施了这个快速而又脏的方法。它适用于凸形,但凹形会产生不符合您需要的稳定点。使用示例:Here's a screen shot

  3. 此问题与robot path planning有关。看看这些文献可能会提出一些想法在RPP中你有障碍物和机器人,想要找到一个机器人可以行进的路径,同时避开和/或沿着它们滑动。如果机器人是不对称的并且可以旋转,则在3d(环形)配置空间(C空间)中进行二维规划,其中一个维度是旋转的(因此自身闭合)。我们的想法是'#34;成长&#34; C空间中的障碍,同时将机器人缩小到一定程度。通过计算Minkowski差异来实现障碍的增长。)如果将所有多边形分解为凸形,那么就会有一个简单的边缘合并&#34;用于计算MD的算法。)当C空间表示完成时,任何1d路径都不会刺穿&#34;增长&#34;障碍对应于机器人在世界空间中的连续平移/旋转,避免了原始障碍。对于您的问题,白色区域是障碍物,矩形是机器人。你正在寻找任何开放点。这相当于100%的覆盖率。对于不到100%的情况,C空间必须是3d上的函数,反映了&#34;坏&#34;机器人的交叉点与障碍物而不仅仅是二进制值。你正在寻找最不好的一点。 C空间表示是一个开放的研究课题。八叉树可能在这里工作。

  4. 在这两种情况下都要考虑很多细节,而且它们可能根本不会出现问题,但至少这些是更多地考虑问题的框架。物理概念有点像使用模拟弹簧系统进行图形布局,这非常成功。

答案 1 :(得分:1)

我不相信能够找到此问题的精确最大值,因此您需要使用近似值。

你可能会将矢量图像渲染成位图并使用Haar特征 - 它们提供了一种非常快速的O(1)方法来计算矩形区域的平均颜色。

对于不同的旋转和位置,您仍然需要多次执行此操作,但这会使算法复杂度从天真的O(n ^ 5)降低到O(n ^ 3),这可能是可接受的快速。 (这里的n是你正在扫描的不同自由度的大小)

答案 2 :(得分:-1)

你有没有想过用空格来跟踪块内剩余的空白区域!== 0?