如何用预定义的七巧板形状填充轮廓?

时间:2010-09-15 11:33:53

标签: algorithm geometry computational-geometry packing

我对使用这些形状感兴趣:

tangram

通常tangram由7个形状(5个三角形,1个正方形和1个平行四边形)组成。

我想要做的只是用七巧板形状填充一个形状,所以在这一点上, 形状的大小和重复无关紧要。

以下是我手动尝试的内容:

crescent with tangram shapes

我对如何解决这个问题感到有点迷茫。

假设我有一条路径(一个有序列表/大纲的点数组), 我想我应该尝试进行某种三角测量。

是否有Deulanay三角测量这样的东西,三角形约束到45度 直角三角形?

更“粗暴”的方法是添加一堆三角形(45度)并使用SAT 用于碰撞检测以“修复”重叠,并希望避免间隙。

由于方形和平行四边形也可以由三角形(45度)组成,我想象中 这将是一个很好的干净几何解决方案,对吗?

如何在任意形状内包装三角形(45度)?

欢迎任何想法。

1 个答案:

答案 0 :(得分:1)

如果你只使用形状的原始尺寸,那么一些随机的想法(也许它们可以帮助你找到更好的解决方案):

  • 正如你所指出的那样,七巧板中的所有形状都可以由例如黄色或粉红色三角形(d-g-c),所以还要考虑自下而上的方法,例如首先尝试将尽可能多的黄色三角形放入你的形状,然后尽可能将它们组合成更大的形状。在最坏的情况下,你最终会得到一组这些最小的三角形。

  • 任何非多边形的三角测量(例如你的例子中的半月)可能都不能很好地运作......

  • 看起来你要求形状只能有一些离散的方向。为了找到这些三角形在给定形状中的最佳拟合,我建议采用以下近似解:在整个形状上绘制三角形网格(即具有对角线的方形网格)并获取完全包含的三角形。这很可能不会给你最佳的覆盖范围,但是你可以反复将网格在水平和垂直方向上移动十分之一的网格尺寸,看看你是否会找到覆盖原始形状的大部分的东西(或者你可以按照二元搜索的精神,以原始网格大小的1/2和1/4等步进。)

如果您允许任意缩放形状,您可以通过添加更小和更小的形状将任何(合理平滑?)形状近似为任意精度。例如。如果你有一个光栅图像,你可以例如选择黄色三角形的大小,使其中两个在图像上形成一个像素,然后就可以表示任何这样的光栅图像。