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

[原创短文] Ideas Exchanging

[复制链接]
发表于 2008-12-7 00:13:43 | 显示全部楼层 |阅读模式 来自 山西太原
本帖最后由 marveloustau 于 2010-6-20 00:11 编辑

Ideas Exchanging|讲出你的想法

Intruduction =================================================

经过认真考虑,我打算策划这么一起活动。如果你觉得利用Mathematica现有的功能组合能够做一些好玩的东西,那么不要犹豫马上跟贴!也许你打算向大家展示一下你的成果,也许你有足够的勇气去挑战一个难题却需要大家帮助,或者仅仅是有一个非常酷的想法而并没有打算自己实现,没有关系,都在这里讲出来!

这个帖子由我来维护,所以不用特别在乎格式,只要在后面跟贴就行了。不过当然想法说的越明白越好,如果你能把想法描述的具体一些,那么对于你自己开发的可行性也就越强。对于某些用文字很难说明的问题,或者是已经有一个很现成的材料,那么就附上图片或网页链接就好。如果是对这个项目本身进行的讨论请另开新贴,我会把链接附在对应的条目上。如果已经完成的话,请在下面跟贴并以文本形式把代码贴上来,后面的我来处理。

Projects =====================================================


魔方求解 Rubik's Cube Solver::
Marveloustau::未完成

一个解3阶魔方的小程序。这是我现在做的毕业设计项目,事实上这个最终是要用乐高的Mindstorm机器人解一个真正的魔方,但是求解魔方的操作序列和计算机上的模拟都是用Mathematica实现的。魔方的状态非常多,并且旋转到最后需要小心地设计规则才能将为了将未归位的魔方小块儿复原而破坏的已经复原的小块儿再度复原(这句话是比较费解,但是如果你拧过魔方应该有这个体会)。关于拧魔方你可以参考这里,Roman E. Maeder(就是Computer Science with Mathematica的作者)写的一个demonstration。注意,这个demonstration仅仅是为你提供一个操作环境,而它自己并没有求解能力。

一个simple-stupid的实现

  1. Clear[Lcounter, Rcounter, Fcounter, Bcounter, Ucounter, Dcounter,
  2.   Matrix, FinalMatrix];
  3. ClearSystemCache[];
  4. Lcounter :=
  5.   Do[{FinalMatrix[[1]], FinalMatrix[[2, 1]], FinalMatrix[[3, 1]],
  6.      FinalMatrix[[5, 1]], FinalMatrix[[6, 1]]} =
  7.     Map[#.RotationMatrix[Pi/90, {1, 0, 0}] &, {FinalMatrix[[1]],
  8.       FinalMatrix[[2, 1]], FinalMatrix[[3, 1]], FinalMatrix[[5, 1]],
  9.       FinalMatrix[[6, 1]]}, {-2}], {i, 45}];
  10. (*The adjacent faces of left (1) are 2, 3, 5 and 6, while all \
  11. adjacent facets which need to rotate are on the higher depth of the \
  12. table*)
  13. Rcounter :=
  14.   Do[{FinalMatrix[[4]], FinalMatrix[[2, 3]], FinalMatrix[[3, 3]],
  15.      FinalMatrix[[5, 3]], FinalMatrix[[6, 3]]} =
  16.     Map[#.RotationMatrix[Pi/90, {-1, 0, 0}] &, {FinalMatrix[[4]],
  17.       FinalMatrix[[2, 3]], FinalMatrix[[3, 3]], FinalMatrix[[5, 3]],
  18.       FinalMatrix[[6, 3]]}, {-2}], {i, 45}];
  19. (*Same to L*)
  20. Fcounter :=
  21.   Do[{FinalMatrix[[2]], FinalMatrix[[1, 1]], FinalMatrix[[3, All, 1]],
  22.       FinalMatrix[[4, 1]], FinalMatrix[[6, All, 1]]} =
  23.     Map[#.RotationMatrix[Pi/90, {0, 1, 0}] &, {FinalMatrix[[2]],
  24.       FinalMatrix[[1, 1]], FinalMatrix[[3, All, 1]],
  25.       FinalMatrix[[4, 1]], FinalMatrix[[6, All, 1]]}, {-2}], {i,
  26.     45}];
  27. (*Need to change 3 and 6 because affected facets are on same column \
  28. but not row*)
  29. Bcounter :=
  30.   Do[{FinalMatrix[[5]], FinalMatrix[[1, 3]], FinalMatrix[[3, All, 3]],
  31.       FinalMatrix[[4, 3]], FinalMatrix[[6, All, 3]]} =
  32.     Map[#.RotationMatrix[Pi/90, {0, -1, 0}] &, {FinalMatrix[[5]],
  33.       FinalMatrix[[1, 3]], FinalMatrix[[3, All, 3]],
  34.       FinalMatrix[[4, 3]], FinalMatrix[[6, All, 3]]}, {-2}], {i,
  35.     45}];
  36. Ucounter :=
  37. Do[{FinalMatrix[[6]], FinalMatrix[[1, All, 3]],
  38.     FinalMatrix[[2, All, 3]], FinalMatrix[[4, All, 3]],
  39.     FinalMatrix[[5, All, 3]]} =
  40.    Map[#.RotationMatrix[Pi/90, {0, 0, 1}] &, {FinalMatrix[[6]],
  41.      FinalMatrix[[1, All, 3]], FinalMatrix[[2, All, 3]],
  42.      FinalMatrix[[4, All, 3]], FinalMatrix[[5, All, 3]]}, {-2}], {i,
  43.    45}]
  44. Dcounter :=
  45.   Do[{FinalMatrix[[3]], FinalMatrix[[1, All, 1]],
  46.      FinalMatrix[[2, All, 1]], FinalMatrix[[4, All, 1]],
  47.      FinalMatrix[[5, All, 1]]} =
  48.     Map[#.RotationMatrix[Pi/90, {0, 0, 1}] &, {FinalMatrix[[3]],
  49.       FinalMatrix[[1, All, 1]], FinalMatrix[[2, All, 1]],
  50.       FinalMatrix[[4, All, 1]], FinalMatrix[[5, All, 1]]}, {-2}], {i,
  51.     45}];

  52. Matrix = Map[
  53.    Function[x,
  54.     Map[x + # &, {{-1.5, -1.5}, {-0.5, -1.5}, {-0.5, -0.5}, {-1.5, \
  55. -0.5}}]], {{{0, 0}, {0, 1}, {0, 2}}, {{1, 0}, {1, 1}, {1, 2}}, {{2,
  56.       0}, {2, 1}, {2, 2}}}, {-2}];
  57. FinalMatrix =
  58.   Flatten[Table[
  59.     Map[Insert[#, i, j] &,
  60.      Matrix, {-2}], {i, {-1.5, 1.5}}, {j, {1, 2, 3}}], 1];
  61. (*FinalMatrix第一层为六个面,顺序为左右后前下上,第二层为每个面的一行三个块,第三层为每行的三个小正方形,第四层为么个小正方形的\
  62. 四个定点坐标*)
  63. Dynamic[Graphics3D[{Riffle[
  64.     {Yellow, Green, Red, White, Blue, Orange},
  65.     Map[Polygon, FinalMatrix, {-3}]]}, Boxed -> False,
  66.   PlotRange -> 2.5]]
复制代码
3D-Weighted Voronoi Diagram :: Marveloustau:: 未完成

Voronoi Diagram是计算几何的一个分支。一般意义的Voronoi Diagram是一种对平面或者空间的剖分。简单地说,就是对于一个平面,并已知平面上的几个点Sn(它被称作“母点”),现在对平面进行划分,使得划分后的每一个区域都满足这个区域内所有的点都到这个区域所包含的母点距离最短(欧几里德距离)。它也很容易拓展到三维空间。对于加权情形,那么就是平面上的点到所有母点的距离需要乘以不同的系数。具体的查维基百科上的Voronoi Diagram条目就很明白了。
(左图为2D)(左图为3D)

[ 本帖最后由 marveloustau 于 2009-1-15 17:34 编辑 ]

加权Voronoi图的加权方式分additive和multiplicative两种,均可在Weighted Voronoi Diagram的相关资料中找到。这里是把multiplicative方式的Weighted Voronoi Diagram扩展到了三维空间。看起来就像一堆内部气压不同的泡沫。

因为我机子太烂所以没办法渲染更多的小球了。 :(

这个项目没有用Mathematica完成,而是直接使用了基于C的OpenGL编程,当时考虑这么做的原因是Mathematica渲染多边形很慢,而且中间经过一层Java的环节我的机子跑不起来。但是OpenGL的渲染同样存在问题,就是不能同时开启半透明和深度检测,所以颜色看起来会有一些问题,本来应该是在下面的看起来却在上面,解决方法是实时对渲染对象按照深度排序,可是那样会比较慢,而且会用到动态内存。而在C中的动态内存比较危险,所以我就偷了下懒。嘿嘿嘿

很长一段时间没在Mathematica版出现,是因为参与了一个关于自然语言处理的项目,所以去学了Erlang以及Unix下面很多用正则表达式处理文本的小工具,当然还有C语言。当时几乎想放弃这个了,但是到后来发现其实可以做。前后花了两个月的时间才搞定,是够笨的。另外就是因为申请学校耽搁了一些时间,其实是大部分时间。哈哈

貌似已经背离了用Mathematica求解问题的初衷了,哎好惭愧啊

好,结题。天哪一年半都过去了。

"No "<>#<>"ains"&/@{"p", "g"}
发表于 2008-12-7 19:13:16 | 显示全部楼层 来自 北京海淀

回复 1# marveloustau 的帖子

Simdroid开发平台
呵呵,Voronoi 最开始还是你介绍给我的,确切地说是图论里的东西吧。

我都挺感兴趣的,不过暂时我还是不想这些了
回复 不支持

使用道具 举报

发表于 2008-12-8 08:46:52 | 显示全部楼层 来自 江苏无锡
It's interesting thread. I am looking forward to find your drafting version.

Only for reader's information. Below is free code on Demonstration of Voronoi,

http://demonstrations.wolfram.co ... ronoi+&limit=20
回复 不支持

使用道具 举报

发表于 2008-12-9 02:00:31 | 显示全部楼层 来自 北京
我想用 Mathematica 实现一个 MonteCarlo 仿真框架,用于统计算法的性能~~~~
回复 不支持

使用道具 举报

发表于 2008-12-9 10:54:06 | 显示全部楼层 来自 江苏无锡
I just visit your Mathematica Blog, It's looks good. Keep going.
回复 不支持

使用道具 举报

发表于 2008-12-29 11:41:51 | 显示全部楼层 来自 江苏无锡
tau,

Cubic and Voronoi 玩得怎么样了,帖子没啥更新吗?

我也打算去剃一个像你一样的光头,就是怕天太冷了容易感冒?

Any feeling and comments for hairstyle? :lol
回复 不支持

使用道具 举报

 楼主| 发表于 2009-1-12 20:58:12 | 显示全部楼层 来自 山西太原

回复 6# FreddyMusic 的帖子

陷入泥潭中了...比想象中的麻烦很多.
由于是小组协作, 所以我在另外一个博客里继续了.
http://marveloustau.ycool.com

关于发型嘛, 带个帽子不就摆平了?
回复 不支持

使用道具 举报

发表于 2009-6-7 21:46:53 | 显示全部楼层 来自 上海
都把m用来做作业了 从来没想过做魔方
回复 不支持

使用道具 举报

 楼主| 发表于 2010-6-19 23:52:16 | 显示全部楼层 来自 山西太原

总算搞出来了,3D Weighted Voronoi

用了OpenGL的一点小技巧,静帧样子不是很好看,动起来才好。

我的两个题目就都结了。

……

天哪,都过去一年半了。
回复 不支持

使用道具 举报

发表于 2010-6-20 08:21:09 | 显示全部楼层 来自 上海徐汇区
速度很快啊,继续努力啊。
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 11:34 , Processed in 0.046927 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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