百慕大截角菱形十二面体魔方仿真时的问题
本帖最后由 hubo5563 于 2014-3-23 17:49 编辑通过近一周的努力,终于建立了百慕大截角菱形十二面体魔方的3维模型,并且也能够转动了,能够执行序列。
该模型可以构造任意编码的百慕大截角菱形十二面体魔方,面上有菱形、五边形、和梯形中块。
但是有一个问题,就是该模型转动不是精确模型,其他块没问题,主要是角块的旋转误差积累,如果转动多次,就能看出来。
下面是没转动之前的:
执行同样转动60次,按说应该复原了,但位置是复原了,角块由于误差积累,引起自转一个角度:
执行120次该公式:
执行180次该公式:
执行240次该公式:
执行300次该公式:
执行360次该公式:
执行420次该公式:
执行480次该公式:
执行540次该公式:
执行600次该公式:
最后好像是复原了,其实误差还是有的。
怎样解决这个问题,可能需要每转动一次,都要实时调整角块的角度,怎样调整?需要理论支持,请大家帮帮忙,解决一下这个问题。
开始我并不知道这个问题,做好仿真软件后,就试着转了转,发现打乱的魔方角块有的翘起来了,就随便转了一下,让其做重复操作,不试不知道,一试吓一跳,出现了以上情况。
什么时候调整,每次调多大角度,调整方向正负,需要理论上的计算,怎么计算,现在还没想出来。
这个魔方的实物魔方是不会出现这个问题的,每次能够自适应。
不只是菱形中心块转动多了以后,误差积累可以使角块转动,五边形中心块多次转动后,也可以误差积累能转动角块。
如下魔方,紧挨着的3个五边形中块面,按说和五魔方无什么差别,我们知道(U;R;)63次就可以复原,但是
用到这个魔方上,效果如下图:
颜色复原了,各个角块转动了,仔细观察,每个块转动的角度不同,红蓝白角块转动的角度最大。
继续转:
由此可见,每个块调整起来还很不好掌握呢。
本帖最后由 hubo5563 于 2014-3-23 20:36 编辑
不只是魔方的角块,棱块也可由误差积累而自己旋转。
例如,依次转动三个面一次,看起来不显,多次转动情况就不同了,请看:
角块、棱块都在自己转动。
不知用“近似计算”可否解决此问题?每转动一次后,都对转动层的每个块进行“停靠容错”
的“评估”。 可能巧妙地运用如“取整函数”等技巧应该可以解决这种“近似计算”问题。
这仅仅是用“近似计算”来模拟魔方中“容错”的设想,还需要结合实践不断测试优化才行。
本帖最后由 hubo5563 于 2014-3-25 08:53 编辑
ggglgq 发表于 2014-3-25 08:22 static/image/common/back.gif
这不是近似计算上的误差,实际上是模型本身上的差异造成的,转动角度是72度,平行面的切割应该是70.53度,相差1.47度,转动时有的步骤+1.47度有的步骤-1.47度,实际转动过程中很多都能相互抵消,所以,不是专做某一个公式,角度差的不是很多,不过转动步数多了之后,各个块转动的状态明显不同,有的转动大一些,有的转动小一些,看起来就很不舒服。转动角度差1.47度,每次引起角块转动的不是1.47度,这个我还没有计算出来,可能更小一些。
我现在想转动一次,转动的块都重新装配一下,就能消除误差积累的影响。需要构造一个编码模型,记录魔方各个块的位置和方向,每次转动时,除了对魔方几何体做转动操作外,还要对编码状态进行修改。最后不以几何转动状态为准,而是以编码状态为准,按照编码状态重新计算各个转动块的装配位置,这样最后就不会发生混乱的状态了,正在编这样的程序。 please add to your simulator - Jumblix and our variations
grigr 发表于 2014-3-25 14:31 static/image/common/back.gif
please add to your simulator - Jumblix and our variations
That's two different puzzles.
This simulator has same shape with Crazy Comet but not Jumblix.
And same shape not means same puzzle. 胡老师的程序应该是通过始位置/朝向和转动过程来计算块的终位置/朝向。是个连续的李群。
我的想法是换成离散群。
把块可能的位置和朝向列出来作为一些离散的状态,转动时就是由一个状态跳到另一个状态,这样就可以保证准确性。
当然为了效果还是要保留动画,只在动画完成时追加一个过程,跳到准确的位置上。 Fenz 发表于 2014-3-25 16:50 static/image/common/back.gif
胡老师的程序应该是通过始位置/朝向和转动过程来计算块的终位置/朝向。是个连续的李群。
我的想法是换成离 ...
最后还是采用了你的想法,用离散群做目标,每转动一次,调整一次。
页:
[1]