找回密码
 注册
Simdroid-非首页
查看: 298|回复: 17

[演示项目] 动态魔方(绝对原创)

[复制链接]
发表于 2010-12-28 23:27:02 | 显示全部楼层 |阅读模式 来自 湖南怀化
这里我写了个动态的魔方程序,算法简单,代码可读性好,但是有点长,呵呵,我想版主会乐意帮我精简代码的,各位帮顶!这可是我一个多小时的劳动呀!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

 楼主| 发表于 2010-12-28 23:27:51 | 显示全部楼层 来自 湖南怀化
Simdroid开发平台
呵呵,自己顶!
回复 不支持

使用道具 举报

发表于 2010-12-28 23:50:33 | 显示全部楼层 来自 浙江嘉兴
顶你啊,写得很好,但是我发现你的魔方 不能自己 转动,要鼠标拖才行。我记得 tao 在 优酷的 视频 里面的 魔方,可以自己 转动 复原 ,然后 求解的。

楼主如果能够 让魔方 自己 转动起来,呵呵,就给版主申请给你加精。
回复 不支持

使用道具 举报

发表于 2010-12-29 09:05:08 | 显示全部楼层 来自 广东佛山
好强力!膜拜
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-29 12:07:43 | 显示全部楼层 来自 湖南怀化
可以自动动的,只要你改一下我的程序!呵呵
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-29 13:01:36 | 显示全部楼层 来自 湖南怀化
下面的代码是动态的,呵呵,你也可以改成自己想要的!
nn = 20;(*随机转动的次数*)
tu = {};
Module[{tt =
   Table[{RandomInteger[{1, 3}], RandomInteger[{1, 3}]}, {nn}]},
Print[tt];
a = Table[Red, {3}, {3}]; b = Table[White, {3}, {3}];
c = Table[Green, {3}, {3}];
d = Table[Brown, {3}, {3}]; e = Table[Blue, {3}, {3}];
f = Table[Yellow, {3}, {3}];
move[t_] := Module[{temp},
   If[t == {1, 1},
    temp = a[[1]]; a[[1]] = b[[1]]; b[[1]] = e[[1]];
    e[[1]] = Reverse[f[[1]]]; f[[1]] = Reverse[temp];
    temp = d[[1]]; d[[1]] = Reverse[d[[All, 1]]];
    d[[All, 1]] = d[[3]]; d[[3]] = Reverse[d[[All, 3]]];
    d[[All, 3]] = temp;];
   If[t == {1, 2},
    temp = a[[2]]; a[[2]] = b[[2]]; b[[2]] = e[[2]];
    e[[2]] = Reverse[f[[2]]]; f[[2]] = Reverse[temp];];
   If[t == {1, 3},
    temp = a[[3]]; a[[3]] = b[[3]]; b[[3]] = e[[3]];
    e[[3]] = Reverse[f[[3]]]; f[[3]] = Reverse[temp];
    temp = c[[1]]; c[[1]] = c[[All, 3]];
    c[[All, 3]] = Reverse[c[[3]]]; c[[3]] = Reverse[c[[All, 1]]];
    c[[All, 1]] = Reverse[temp];];
   If[t == {2, 1},
    temp = d[[All, 1]]; d[[All, 1]] = b[[All, 1]];
    b[[All, 1]] = c[[All, 1]];
    c[[All, 1]] = Reverse[f[[All, 1]]]; f[[All, 1]] = Reverse[temp];
    temp = a[[1]];
    a[[1]] = a[[All, 3]]; a[[All, 3]] = Reverse[a[[3]]];
    a[[3]] = Reverse[a[[All, 1]]]; a[[All, 1]] = Reverse[temp];];
   If[t == {2, 2},
    temp = d[[All, 2]]; d[[All, 2]] = b[[All, 2]];
    b[[All, 2]] = c[[All, 2]];
    c[[All, 2]] = Reverse[f[[All, 2]]]; f[[All, 2]] = Reverse[temp];];
   If[t == {2, 3},
    temp = d[[All, 3]]; d[[All, 3]] = b[[All, 3]];
    b[[All, 3]] = c[[All, 3]];
    c[[All, 3]] = Reverse[f[[All, 3]]]; f[[All, 3]] = Reverse[temp];
    temp = e[[1]]; e[[1]] = Reverse[e[[All, 1]]];
    e[[All, 1]] = e[[3]]; e[[3]] = Reverse[e[[All, 3]]];
    e[[All, 3]] = Reverse[temp];];
   If[t == {3, 1}, temp = d[[3]]; d[[3]] = Reverse[a[[All, 3]]];
    a[[All, 3]] = c[[1]];
    c[[1]] = Reverse[e[[All, 1]]]; e[[All, 1]] = temp;
    temp = b[[1]];
    b[[1]] = Reverse[b[[All, 1]]]; b[[All, 1]] = b[[3]];
    b[[3]] = Reverse[b[[All, 3]]]; b[[All, 3]] = temp;];
   If[t == {3, 2},
    temp = d[[2]]; d[[2]] = Reverse[a[[All, 2]]];
    a[[All, 2]] = c[[2]]; c[[2]] = Reverse[e[[All, 2]]];
    e[[All, 2]] = temp;];
   If[t == {3, 3},
    temp = d[[1]]; d[[1]] = Reverse[a[[All, 1]]];
    a[[All, 1]] = c[[3]]; c[[3]] = Reverse[e[[All, 3]]];
    e[[All, 3]] = temp;
    temp = f[[1]]; f[[1]] = Reverse[f[[All, 1]]]; f[[All, 1]] = f[[3]];
    f[[3]] = Reverse[f[[All, 3]]]; f[[All, 3]] = temp;]];
Do[move[tt[[ii]]];
  AppendTo[tu,
   Graphics3D[
    Flatten[{Table[{c[[i, j]],
        Polygon[{{j, 0, i}, {j - 1, 0, i}, {j - 1, 0, i - 1}, {j, 0,
           i - 1}}]}, {i, 1, 3}, {j, 1, 3}],
      Table[{a[[i, j]],
        Polygon[{{0, 3 - i, 3 - j}, {0, 3 - i + 1, 3 - j}, {0,
           3 - i + 1, 3 - j + 1}, {0, 3 - i, 3 - j + 1}}]}, {i, 1,
        3}, {j, 1, 3}],
      Table[{b[[i, j]],
        Polygon[{{j, 3 - i, 0}, {j, 3 - i + 1, 0}, {j - 1, 3 - i + 1,
           0}, {j - 1, 3 - i, 0}}]}, {i, 1, 3}, {j, 1, 3}],
      Table[{d[[i, j]],
        Polygon[{{j, 3, 3 - i}, {j, 3, 3 - i + 1}, {j - 1, 3,
           3 - i + 1}, {j - 1, 3, 3 - i}}]}, {i, 1, 3}, {j, 1, 3}],
      Table[{e[[i, j]],
        Polygon[{{3, 3 - i, j}, {3, 3 - i + 1, j}, {3, 3 - i + 1,
           j - 1}, {3, 3 - i, j - 1}}]}, {i, 1, 3}, {j, 1, 3}],
      Table[{f[[i, j]],
        Polygon[{{j, 3 - i, 3}, {j, 3 - i + 1, 3}, {j - 1, 3 - i + 1,
           3}, {j - 1, 3 - i, 3}}]}, {i, 1, 3}, {j, 1, 3}]},
     2]]], {ii, 0, Length[tt], 1}];
Manipulate[Show[tu[[jj]]], {jj, 1, Length[tt], 1}]]
回复 不支持

使用道具 举报

发表于 2010-12-29 14:36:11 | 显示全部楼层 来自 广东广州
tao 在 优酷的 视频 里面的 魔方,可以自己 转动 复原 ,然后 求解的。

请问你有这个例子的程序代码吗???我先知道学习这代码是怎么写的,能自己转动复原???



3# weichanghe2000
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-29 20:20:04 | 显示全部楼层 来自 湖南怀化
我没有他的代码,不过想试试能不能自己写一个!
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-29 20:26:41 | 显示全部楼层 来自 湖南怀化
顺便说一句,要在我前面的转动的基础上再还原是件很容易的事,因为我有转动的变量记录,不过要在一个随机转动而不记录转动参数的基础上还原还是有些难度,不过我想给些时间是可以解决的!
回复 不支持

使用道具 举报

发表于 2010-12-29 23:42:54 | 显示全部楼层 来自 浙江嘉兴
我也没有 tao的 程序代码,不好意思啊。
回复 不支持

使用道具 举报

发表于 2010-12-30 08:19:53 | 显示全部楼层 来自 广东广州
哈哈~~~,刚才演示了一下,不错,你们都是强人啊


6# minjiecow
回复 不支持

使用道具 举报

发表于 2010-12-31 16:28:52 | 显示全部楼层 来自 北京
冏了,下下来发现刚重装的电脑,没MATLAB
回复 不支持

使用道具 举报

发表于 2011-1-7 13:43:39 | 显示全部楼层 来自 陕西咸阳
本帖最后由 ggggwhw 于 2011-1-7 13:47 编辑

给你一点儿建议:
你只给了一个滚动条,如果你能给出9个滚动条,每个滚动条管一个面中九个小框的转动,每个滚动条只有三个取值,-1,0,1,调到0时不操作,调到-1时一个方向转,调到1时另一个方向转.这样就可以手动操作魔法转动了.
当然换成18个按钮更好操作了.
下面附上我几年前做的一个效果图.flash版的.平面的,因为flash要做立体图太麻烦了.当时只是兴趣来了做的.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2011-1-8 00:06:43 | 显示全部楼层 来自 上海
给你一点儿建议:
你只给了一个滚动条,如果你能给出9个滚动条,每个滚动条管一个面中九个小框的转动,每个滚动条只有三个取值,-1,0,1,调到0时不操作,调到-1时一个方向转,调到1时另一个方向转.这样就可以手动操作魔法转 ...
ggggwhw 发表于 2011-1-7 13:43
呵呵。厉害啊,做得很漂亮。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-1-8 09:35:08 | 显示全部楼层 来自 湖南怀化
呵呵,谢谢建议,只是本人时间有限精力有限,给出了基本的算法,就当抛砖引玉吧!
回复 不支持

使用道具 举报

发表于 2011-1-12 01:43:30 | 显示全部楼层 来自 美国
我之前也试过用鼠标拖拽来实现交互操作,当时是Freddy建议把Dynamic改成Manipulate然后发布到Wolfram演示站上,但是改了之后特慢,效果很不好,所以就没继续做下去。

另外我觉得你的代码有点复杂,还有很大的简化的空间,自己不妨试试?尽量不要用赋值语句和“[[]]”,尝试把if判断改成pattern matching。

加油!
回复 不支持

使用道具 举报

发表于 2011-1-12 23:51:16 | 显示全部楼层 来自 浙江嘉兴
tao,有空多来逛逛我们的论坛,建设好我们的论坛,希望高手们多发言,给我们新手一些指导和建议。谢谢。
回复 不支持

使用道具 举报

发表于 2011-1-12 23:52:35 | 显示全部楼层 来自 浙江嘉兴
tao,有空多来逛逛我们的论坛,建设好我们的论坛,希望高手们多发言,给我们新手一些指导和建议。谢谢。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 15:37 , Processed in 0.051136 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表