基本情况介绍:索玛立方体(3*3*3),可由7块不同形状的积木拼成,且积木标以不同的颜色,即yellow, green, purple, orange, red, dark blue, baby blue(如手绘图左上方所示)。
为了索玛立方体所有组合/排列,并进行可视化,码者的工作分为以下3步:
一是问题建模,并获取每块积木在3*3*3的空间中的所有可行分布;
【结论】yellow-72, green-72, purple-64, orange-144, red-144, dark blue-96, baby blue-96
【重要细节】
1.对于平面积木,如red,只要得到其在一个平面(3*3)的所有可行分布,则通过自定义”投影变换函数“,即可得到在整个3*3*3空间的可行分布
2.对于立体积木(占据2个平面,包括, purple,dark blue和 baby blue),他们均是由red在其平面“向上”或“向下”增加一个1*1*1的方块生成得到的,因而他们的可行分布可基于red的分布获取,并排除重复方案
3.dark blue和 baby blue的区别在于,baby blue在red的基础上基于左右螺旋定则生成,dark blue则基于右手螺旋定则。具体而言,red的3个1*1*1的方块分别称为start pixel、middle pixel和end pixel。当用左手,从start pixel沿middle向end方向时,拇指指向(向上或向下)增加一个1*1*1的方块得到的积木为baby blue;右手按此法得到的为dark blue;而从middle pixel无论向上还是向下,增加一个1*1*1的方块,生成的都是purple。
二基于第一步,将7块积木在3*3空间中进行“装配”,便利得到索玛立方体的所有不同的可行组合(排除经旋转变换后的相同情况);
【结论】240
【重要细节】
1.将yellow作为第一块装配的积木(对称性最好),purple作为第二块。
2.yellow只需考虑4种情况,如手绘图中[6,15,24,12],[3,12,21,15],[4,13,22,16],[7,16,25,13],例如[6,15,24,12]指yellow占据图中left1平面(见手绘图)的四个位置为6,15,24,12。由于这4种情况具有上下方向的对称性,所以purple只需考虑位于top2和top3(见手绘图)。同理,在[4,13,22,16],[7,16,25,13]还具有左右对称性,所以purple只需考虑位于left2和left3(见手绘图)。
三是可视化实现。
代码见附件