我对使用这些形状很感兴趣:
通常是 tangram由 7 个形状(5 个三角形、1 个正方形和 1 个平行四边形)组成。
我想做的是只用七巧板形状填充一个形状,所以在这一点上, 形状的大小和重复应该无关紧要。
这是我手动尝试的:
我对如何处理这个问题有点迷茫。
假设我有一条路径(轮廓点的有序列表/数组), 我想我应该尝试做某种三角测量。
有没有三角形限制为 45 度的 Deulanay 三角剖分 直角三角形?
更“粗暴”的方法是添加一堆三角形(45 度)并使用 SAT 用于碰撞检测以“修复”重叠,并希望避免间隙。
因为正方形和平行四边形也可以由三角形(45度)组成,所以我想 会是一个很好的干净几何解决方案,对吧?
如何在任意形状内打包三角形(45 度)?
欢迎提出任何想法。
最佳答案
如果您只使用形状的原始尺寸,一些随意的想法(也许它们可以帮助您找到更好的解决方案):
正如您所指出的,七巧板中的所有形状都可以由例如黄色或粉红色三角形 (d-g-c),因此也请尝试考虑自下而上的方法,例如首先尝试将尽可能多的黄色三角形放入您的形状中,然后尽可能将它们组合成更大的形状。在最坏的情况下,您最终会得到一组这些最小的三角形。
任何类型的非多边形三角剖分(例如您的示例中的半月)可能效果不佳...
您似乎要求形状只能有几个不连续的方向。为了找到这些三角形与给定形状的最佳拟合,我提出了以下近似解决方案:在整个形状上绘制一个三角形网格(即带有对角线的正方形网格),然后取那些完全包含的三角形。这很可能不会为您提供最佳覆盖范围,但您可以在水平和垂直方向上重复移动网格大小的十分之一,看看您是否会找到覆盖原始形状的大部分的东西(或者您本着二进制搜索的精神,可以以原始网格大小的 1/2 然后 1/4 等步进)。
如果您允许对形状进行任意缩放,您可以通过添加越来越小的形状来将任何(合理平滑?)形状近似到任意精度。例如。如果你有一个光栅图像,你可以,例如选择黄色三角形的大小,使它们中的两个在图像上形成一个像素,然后您就可以表示任何此类光栅图像。
关于algorithm - 如何使用预定义的七巧板形状填充轮廓?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717178/