2010-09-15 152 views
2

我对使用的形状像这些:如何用预定义的七巧板形状填充轮廓?

tangram

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

我想要做的只是填充一个形状只有七巧板形状,所以在这一点上,形状的大小和重复应该不重要。

这里的东西我手动尝试:

crescent with tangram shapes

我有点失去了对如何处理这一点。

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

有没有这样的事情,如三角形Deulanay三角形约束为45度 直角三角形?

一个更加“粗暴”的方法是添加一束三角形(45度),并使用碰撞检测来修复重叠,并希望避免间隙。因为正方形和平行四边形也可以由三角形(45度)组成,所以我想 会是一个不错的干净几何解决方案,对不对?

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

欢迎任何想法。

回答

1

一些随机的想法(可能他们帮你找到一个更好的解决方案)如果你只使用形状的原始尺寸:

  • 正如你指出,在七巧板各种形状可由...组成,例如:黄色或粉红色的三角形(d-g-c),所以也可以考虑使用自下而上的方法,例如首先尝试将多个黄色三角形放入形状中,然后尽可能将它们组合成更大的形状。在最糟糕的情况下,你会得到一组这些最小的三角形。

  • 非多边形(如半月形在你的例子)的任何种类的三角测量可能并不能很好地工作......

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

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

+1

非常好的意见。这是一个使用正方形网格的粗略测试:http://lifesine.eu/tangram/45BitmapTest3.html每个网格正方形被分成4个区域,根据每个网格“四分之一”的平均亮度绘制一个三角形(http: //lifesine.eu/tangram/algorithm.svg) – 2010-12-14 12:14:11

+0

看起来很不错(测试)! – 2010-12-15 07:32:48