魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
查看: 2533|回复: 8
打印 上一主题 下一主题

百慕大五棱斗形魔方(标准)在线玩 [复制链接]

Rank: 8Rank: 8

积分
8398
帖子
3207
精华
81
UID
4618
性别

论坛建设奖 十年元老

跳转到指定楼层
1#
发表于 2014-5-1 17:45:22 |只看该作者 |倒序浏览
本帖最后由 hubo5563 于 2014-5-5 09:05 编辑

百慕大五棱斗形魔方(标准)在线玩        
        显示不了的请安装java环境。

        由于曲面模型消隐算法不成熟,有一些显示上的错误,请见谅。

        用鼠标点一下,按F1键可出帮助,然后按F2键返回。
         
        该魔方的几何体是在奥斯卡的Fairly Fudged魔方基础上的改进,只是把前面那个角削掉了,因而比较对称。
        该魔方是Emax4.5和Emax5的混装方式,它也是一个近似模型,由于误差大一些,程序无法处理,因此,间隙不匀,并且很多,造成不太美观的效果。


    当你在线复原了这个魔方,用鼠标点一下魔方窗口的底色,按F5键可输出论坛代码,把它复制下来来回帖,就有你复原这个的全过程java动画了。












复原状态








红魔

Crazy

Rank: 4

积分
1593
帖子
2669
精华
2
UID
7888

十四年元老

2#
发表于 2014-5-2 22:13:55 |只看该作者

需要禁用表情

本帖最后由 hubo5563 于 2014-5-5 09:09 编辑














使用道具 举报

红魔

Crazy

Rank: 4

积分
1593
帖子
2669
精华
2
UID
7888

十四年元老

3#
发表于 2014-5-2 22:46:50 |只看该作者
本帖最后由 hubo5563 于 2014-5-5 09:10 编辑








为梦想领航

使用道具 举报

银魔

魔方思者

Rank: 7Rank: 7Rank: 7

积分
3010
帖子
1832
精华
6
UID
102191
性别
保密
兴趣爱好
理论
结构
破解

四年元老

4#
发表于 2014-5-3 00:56:48 |只看该作者
本帖最后由 Fenz 于 2014-5-3 01:01 编辑
honglei 发表于 2014-5-2 22:46
0[/param]
6[/param]
F';U4;L'3;U'4;L'3;F'3;L'3;U'43;B22;B2'2;B'4;U22;U';J'2;U'2;U';J2 ...


愣是没看出来这奇置换是怎么产生的
-------
晕,有两个全等块。。。。假的奇变化

使用道具 举报

银魔

魔方思者

Rank: 7Rank: 7Rank: 7

积分
3010
帖子
1832
精华
6
UID
102191
性别
保密
兴趣爱好
理论
结构
破解

四年元老

5#
发表于 2014-5-3 01:10:32 |只看该作者
胡老师,我想请教一下,魔方的建模工作您是怎么处理的呢?
我也在写在线魔方软件,这两天刚把引擎写起来做了个二阶魔方。目前建模就等于写一大堆坐标,很麻烦。胡老师的方案是如何做的呢?

使用道具 举报

Rank: 8Rank: 8

积分
8398
帖子
3207
精华
81
UID
4618
性别

论坛建设奖 十年元老

6#
发表于 2014-5-3 08:19:27 |只看该作者
本帖最后由 hubo5563 于 2014-5-3 09:06 编辑
Fenz 发表于 2014-5-3 01:10
胡老师,我想请教一下,魔方的建模工作您是怎么处理的呢?
我也在写在线魔方软件,这两天刚把引擎写起来做 ...


我的3D模型是以块为单位,每个块的数据结构是由点、棱、面组成:

class Piece          //块
{
int yc;             //隐藏属性,为1隐藏,为0显示
int sx;             //块属性0五边形,1菱形,2梯形,3正常角块,4正常棱块,5移棱角块,6移棱棱块
int ms;            //面数
int ds;             //点数
int ls;              //棱数
Point3d [] p;   //存放点的数组
int [][] leng;     //存放棱的数组,一个棱3个号码,第一个起点号,第二个终点号
             //如果第三个是-1,棱是直线,否则棱是圆弧,它是圆弧的中心点号
Face [] face;    //存放面的数组
};


class Point3d     //3D点
{
        double x;
        double y;
          double z;
                  
};

class Face           //块中面
{
int bs;               //边数
int c;                 //颜色号
int mian;            //所属的大面号,大于0为具体面,0为塑料,没有属于任何面
int sx;                //属性,为0是平面,不为0为球面,如是正整数减1为球面中心点序号,凸面向外;如是负整数绝对值减1为球面中心点序号,凹面向外
double ld;           //亮度
int [] edge;         //存放面的边的数组,实际是块的棱,大于0正向边,小于0负向边,绝对值减1是棱在块结构中棱数组中的序号
};

class Su**ce           //曲面方程
{
   int sx;                  //属性,0---平面,1球面
                 //平面:ax+bx+cx=d;球面:(x-a)2+(y-b)2+(z-c)2=d2
   double  a;      
   double  b;
   double  c;
   double  d;           //如果球面,d<0,表示球面外是物体内部
};

块里的坐标数据都是用程序计算的,我编写了一个块切割程序:
    Piece qiege(Piece piece,Su**ce sf)
       这个程序第一个参数是一个切割前的块,第二个参数是一个切割面,可以是平面,也可以是球面。返回是一个块,是曲面里面那部分块。
    块可以多次用面来切割。
      最初,构造一个正方体,坐标很容易产生,然后想做什么块都是先构造切割面,然后用切割面去切哪个正方体,要什么形状都能切割成。切割面也由坐标变换来做,主要是旋转和平移,反向变换。

    最初,我编的魔方和你一样先做纸模型展开图,把展开图贴在硬纸板上,做成纸模型,用笔在模型上编号,计算几个关键点坐标,然后用对称性,利用坐标变换计算各个块的每一点,手工计算量不小,没有通用性,一种魔方编一大堆计算坐标的程序,很烦。有这个自动切割的程序后,就方便多了。

使用道具 举报

Rank: 8Rank: 8

积分
8398
帖子
3207
精华
81
UID
4618
性别

论坛建设奖 十年元老

7#
发表于 2014-5-3 08:24:23 |只看该作者
本帖最后由 hubo5563 于 2014-5-3 09:28 编辑

被屏蔽的带两个**是:S u  r  f  a  c   e

以下是百慕大物理角块的数据,是专门输出的,可以对照这个理解块的数据结构。
属性: sx=5
piece.ds=32
第0点  x=-0.23728   y=0.69507   z=0.36669
第1点  x=-0.19292   y=0.91445   z=0.19166
第2点  x=1.34266   y=1.32085   z=1.32085
第3点  x=0.00000   y=0.96418   z=0.33486
第4点  x=0.00000   y=0.78622   z=0.51281
第5点  x=-0.29454   y=-0.48622   z=1.49072
第6点  x=0.38659   y=0.66718   z=0.24527
第7点  x=0.18506   y=0.55995   z=0.55403
第8点  x=-0.92723   y=2.10160   z=0.12467
第9点  x=-0.92723   y=0.12467   z=2.10160
第10点  x=0.20237   y=0.89390   z=0.20277
第11点  x=1.32085   y=1.32085   z=-1.34266
第12点  x=-0.00081   y=0.82089   z=0.00440
第13点  x=1.33065   y=1.31446   z=1.33926
第14点  x=1.26846   y=0.34544   z=-0.90393
第15点  x=1.33176   y=1.33176   z=1.33176
第16点  x=0.01995   y=0.76973   z=0.00440
第17点  x=1.33176   y=1.33176   z=0.00440
第18点  x=-0.21296   y=0.64580   z=0.36123
第19点  x=0.21143   y=0.73564   z=1.72084
第20点  x=0.26469   y=0.26469   z=0.26469
第21点  x=-0.91633   y=0.13558   z=2.11251
第22点  x=0.15921   y=0.53566   z=0.52974
第23点  x=-0.91633   y=1.12700   z=1.12108
第24点  x=-0.18011   y=0.02665   z=0.41522
第25点  x=-0.91633   y=2.11251   z=0.13558
第26点  x=0.36160   y=0.64335   z=0.21966
第27点  x=0.20435   y=1.72330   z=-0.59589
第28点  x=-0.18212   y=0.41987   z=0.02695
第29点  x=1.33176   y=1.33176   z=-1.33176
第30点  x=0.26176   y=0.26176   z=-0.26176
第31点  x=0.00000   y=0.00000   z=0.00000
piece.ls=18
第0棱  0,1,2
第1棱  1,3,-1
第2棱  3,4,-1
第3棱  4,0,5
第4棱  6,7,8
第5棱  7,4,9
第6棱  3,10,-1
第7棱  10,6,11
第8棱  1,12,13
第9棱  12,10,14
第10棱  16,12,17
第11棱  0,18,19
第12棱  18,16,20
第13棱  7,22,23
第14棱  22,18,24
第15棱  6,26,27
第16棱  26,22,28
第17棱  16,26,30
piece.ms=8
第0面   边数=4   颜色号=1   属性=0         1,2,3,4,
第1面   边数=5   颜色号=6   属性=0         5,6,-3,7,8,
第2面   边数=4   颜色号=9   属性=0         -7,-2,9,10,
第3面   边数=5   颜色号=0   属性=16       11,-9,-1,12,13,
第4面   边数=5   颜色号=0   属性=-22     -12,-4,-6,14,15,
第5面   边数=4   颜色号=0   属性=26      -14,-5,16,17,
第6面   边数=5   颜色号=0   属性=-30     -16,-8,-10,-11,18,
第7面   边数=4   颜色号=0   属性=-32     -13,-15,-17,-18,

下面是专门输出的物理角块:
0005.jpg

0006.jpg

0007.jpg

由于以块为单位,所以消隐算法有问题,为了减少影响,我把各个块挖掉一部分。

使用道具 举报

银魔

魔方思者

Rank: 7Rank: 7Rank: 7

积分
3010
帖子
1832
精华
6
UID
102191
性别
保密
兴趣爱好
理论
结构
破解

四年元老

8#
发表于 2014-5-3 11:48:58 |只看该作者
hubo5563 发表于 2014-5-3 08:24
被屏蔽的带两个**是:S u  r  f  a  c   e

以下是百慕大物理角块的数据,是专门输出的,可以对照这个理解 ...

多谢胡老师的分享,数据结构很巧妙,学习。
切割程序确实能省许多工作,这应该是一个大量依赖几何知识的程序吧。看来我也得考虑写一个类似的程序。
我的程序也是以块为单位处理转动,但渲染则是以面为单位。
直接放弃了内部的面,这样消隐算法就简化到只要考虑层次关系,并将反面显示为无边界线的灰色。
我没有用方程球面,而是打算用三角形面拼出曲面。这样优点是造型更加自由,缺点是需要更多的坐标数据。
而我的转动实现方式也有所不同,原理是输入起点坐标、终点坐标和转轴,动画轨迹就是连接两点的照弧线或接近弧线的螺旋线。这样便能避免非精准魔方的种种误差,让魔方的外表始终是完整的。此外还能实现一些转动中块发生变形这样不可能存在的魔方。这又会带来大量初始数据的需求。这部分数据还没有解决方案呢。

使用道具 举报

Rank: 8Rank: 8

积分
8398
帖子
3207
精华
81
UID
4618
性别

论坛建设奖 十年元老

9#
发表于 2014-5-3 16:40:20 |只看该作者
Fenz 发表于 2014-5-3 11:48
多谢胡老师的分享,数据结构很巧妙,学习。
切割程序确实能省许多工作,这应该是一个大量依赖几何知识的 ...

等待你的作品。

使用道具 举报

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

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-12-2 09:37

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部