我正在尝试在Flash&中创建一个魔方。 Papervision,我真的被困在这里。我已经达到了可以旋转任何立方体平面一次的程度,但之后......由于所有局部坐标系都很混乱,所以它搞得一团糟。
我真的不知道从哪里开始,有人可以提供什么建议吗?我不是在寻找'关于变换矩阵的阅读',我知道我应该(我正在这样做),但我不确定要寻找什么。我的想法是,在每次旋转之后,我应该再次修复每个立方体的每个坐标系,但我不知道如何。我希望得到的任何关于我想要实现的内容(以及文字),以及为什么,都非常感激。
http://dl.dropbox.com/u/250155/rubik/main.html(使用cursorkeys + A& D)
答案 0 :(得分:1)
讨厌说,但是,矩阵很方便:
代码也很好评论。
另一件令人想到的事情,如果矩阵是矫枉过正的话 即时分组/重新显示DisplayObject3D实例。
假设你有一些基本的东西:
var cubes:DisplayObject3D = new DisplayObject3D();
cubes.name = 'cubes';
for(var i:int = 0 ; i < boxDivisions ; i++){
var zBoxes:DisplayObject3D = new DisplayObject3D();
zBoxes.name = 'zBoxes_'+i;
for(var j:int = 0 ; j < boxDivisions; j++){
var yBoxes:DisplayObject3D = new DisplayObject3D();
for(var k:int = 0 ; k < boxDivisions ; k++){
var box:Cube = new Cube(materials,boxSize,boxSize,boxSize);
box.material = box.material.clone();
box.material.fillColor = Math.random() * 0xFFFFFF;
box.x = ((boxDivisions-1) - (k+1)) * (boxSize + boxSpacing);
box.name = 'box_'+i+''+j+''+k;
yBoxes.addChild(box,'box_'+i+''+j+''+k);
}
yBoxes.y = ((boxDivisions-1) - (j+1)) * (boxSize+boxSpacing);
yBoxes.name = 'yBoxes_'+j;
zBoxes.addChild(yBoxes);
}
zBoxes.z = ((boxDivisions-1) - (i+1)) * (boxSize+boxSpacing);
cubes.addChild(zBoxes);
}
basicView.scene.addChild(cubes);
这些团体只会对一些情况有所帮助,但不是全部,要记住的是 你可以命名和分组DO3D的
假设您单击并拖动一个小方块:
HTH, 乔治
答案 1 :(得分:0)
也许您可以存储构成魔方的26个立方体中每个立方体的位置和方向,并在需要显示时计算坐标和颜色。
例如,正面(但是您定义前面)将具有位置(0,0,0)到(2,2,0)。我正在使用x,y和z;其中x从左到右,y从上到下,z在立方体中移动。
方向为0 - 5,对应于每个小方块面上的颜色。
在绘制魔方时,您必须考虑用户相对于前方的位置。
我不确定这会使旋转方法更容易,但至少你的立方体方向是正确的。
答案 2 :(得分:0)
Here你可以找到一篇描述Rubik立方体表示的替代品的ACM论文。
当我在Ruby中使用Rubik的立方体时,我的时间很短,并决定自己对逻辑进行编码。它适用于3×3×3立方体,但实现非常糟糕。
gist.github.com/377665
我使用以下矩阵来表示内存中的多维数据集:
spreadsheets.google.com/ccc?key=0As1DrYDLh7F6dGROZFRoOTFDOThVMUFENjRWM0xJbVE&hl=en
我概述了一组规则,用于行或列的移动以及特定移动的外侧旋转。我将这些规则作为树叶放入树中。此树的更高级别节点是移动类型,方向以及行或列编号的准则。对于特定情况,我正在提取一组相应的规则,用于转换代表Rubik立方体的二维数组,然后逐个执行它们。
这是Ruby中的源文件(令人毛骨悚然的代码警告!):
github.com/toksaitov/scenario/blob/master/lib/scenario/objects/rubik.rb
请考虑检查RubikStructure
类,RubikStructure::RULES
哈希值和RubikStructure#rotate
方法。
我希望它会以某种方式提供帮助。