多边形,多晶体和拼图

直到最近,我才知道polyshape对象。现在我可以用聚形来模拟一个非凡的谜题。

内容

谜题

网站游戏的艺术来自圣地亚哥的一些人,有超过200个谜题。最近,他们最受欢迎的谜题之一,强大的奶酪,引起了我的注意。这个想法是在框架内移动塑料奶酪片,以便创造一个足够大的洞来容纳小塑料老鼠。然而,当我最后一次检查时,强力奶酪已经卖光了。我不想被谜题本身的不可获得性所劝阻,也不知道解决方案,所以我开始创建一个模拟器。

不是T

我原以为强力奶酪是那种T-puzzle那是我几年前喜欢的但是,与T不同的是,奶酪的几何形状不能用简单的矩形块来建模。我需要帮助。Steve Eddins回答了我的请求,并告诉了我MATLAB的“多晶体”。这导致了这篇博文。

一片奶酪

奶酪片的“自拍照”提供了一个例子polyshape.它有弯曲的边界和一个洞。的MATLAB文档polyshape这是a。多边形.在我的数学世界里,多边形不能有弯曲的边界或洞。但是,我想我太迂腐了。

我从这张强力奶酪拼图的照片开始。

拼图= imread(“Cheese_puzzle.png”);

两行代码和L * a * b颜色模型中找到的区域照片那看起来像奶酪。

[L,a,b] = imsplit(rgb2lab(puzzle));掩码= a > 30;间谍(面具)

史蒂夫提供了一个旋转的功能面具成一个polyshape对象。

Slice = my_polyshapes(mask);

一个重载情节函数然后生成自拍照

Sliceplot = plot(切片,“facecolor”cheese_yellow,“facealpha”1);

我的第一个解决方案

我没有使用人工智能或模拟退火或任何其他现代技术来寻找解决方案。我只是在学习多形体和编程模拟器时四处闲逛。只有我和一个真正的鼠标。不,一点也不真正的现实鼠标。你知道我指的是那种。

这个解决方案正确吗?

我几乎写了一篇博客文章,声称这是Mighty Cheese的设计师一定想到的解决方案。但我不确定。我的解决方案是利用切片外边缘的空白。这些差距有多宽?我还没有真正的物理难题来测量公差。

剧透!

我现在很高兴我没有发布那个“解决方案”。它不正确,也不漂亮。

这个谜题不像看上去那么容易。事实上,这个解决方案很难找到,而且非常优雅。如果你想尝试自己解决这个问题,停止阅读这篇文章,把这个地方收藏起来,以后再来。

我的第二个解决方案

我应该知道,这个谜题在互联网上已经不是什么秘密了,它在很多地方售价约为10美元,YouTube提供了几种解决方案。金宝搏官方网站但我很高兴直到几周前我才见到他们中的任何一个。

当我对“Cheese_puzzle.png”进行更仔细的测量并有了更精确的模型来模拟时,很明显,我宝贵的第一个解决方案并不适合。

方孔里的圆钉子

没有人说老鼠必须整齐地塞进一个直径合适的圆孔里。一旦你意识到你可能正在寻找一个非圆孔,你就在寻找解决方案的路上了。

θ

拼图几何的关键是这张图中的紫色轴。它们在突出的切片尖端的中心孔的一点上以直角相交。紫色轴和橙色垂直/水平轴之间的角度可以在照片上精确测量,其他的都可以。角度是

= atand((y(b)-y(a))/(b-a)) = 11.62°

Polyshapes

我在第一个解决方案中使用的面膜让我开始使用多晶硅,但我最终放弃了它。直接从边界周围的点列表中创建一个多晶体是很容易的,就像这样。

解决方案

原来的奶酪片上的三个洞似乎没有任何用途。所以,我移动了它们,让它们在模拟中扮演重要的角色。将左上角的两个三角形切片合并为一个切片。将得到的四个切片中的每一个围绕其中心旋转180-theta = 168.38度。中心洞的四个直角连接到拼图的各个角落,而外围的四个角则形成一个刚好可以容纳鼠标的中央正方形。

这真的很优雅。

这个谜题起源于哪里?它的设计涉及到什么数学?

软件

我的代码在这里:Mighty_Polyshape.m




用MATLAB®R2022a发布

|
  • 打印
  • 发送电子邮件

コメント

コメントを残すには,ここをクリックしてMathWorksアカウントにサインインするか新しいMathWorksアカウントを作成します。