⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mofang.java

📁 web页面验证码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        transp.setTranslation(new Vector3f(fx,fy,fz));
        //生效
        //transGroupz.setTransform(transz);
        //transGroupy.setTransform(transy);
        //transGroupx.setTransform(transx);
        transGroupp.setTransform(transp);
     //停不了,只能使用多线程或定时
                //System.out.println("bianJiao="+bianJiao);
                try
              {
                //System.in.read();//暂停
                //
                myThread.sleep(donghuaDelay);
             }
              catch(Exception e)
            {
             }
                           //在这里才放出令牌
             selectDonghuaId++;
     selectDonghuaId%=9;
            }
 }
   void startDonghuaY()
  {
             //动画模块
            int chuJiao ;
            int oneTime ;
            int bianJiao ;
            int nowJiao ;
            //测试
            //totateArg=90;
            chuJiao=getChujiao(yuanz,yuanx);
            if(totateArg==-90)
            oneTime=-15 ;
            else
            oneTime=15 ;
                //System.out.println("chuJiao="+chuJiao);
                //System.out.println("totateArg="+totateArg);
            //nowJiao=chuJiao+bianJiao ;
            //这是目前角度公式,可见,据坐标可以判断它的角度嘛
            for(bianJiao=0;bianJiao!=(totateArg+oneTime);bianJiao+=oneTime)
            {
            if(!closeDonghua)
            {
              while(myDonghuaId!=selectDonghuaId)//动画同步相关轮到自己时才执行,把令牌交给下一个
             {;//System.out.println("我是"+myDonghuaId+"号,而令牌现在是"+selectDonghuaId+"号,我要等...");
       try
         {
          //System.in.read();//暂停
               myThread.sleep(whileDelay);
           }
             catch(Exception e)
           {
            }
           }
          }
                //计算x,y和角度输出
                float fx ;
                float fy ;
                float fz ;
                //半径
                float r;
    if(yuanz==0&&yuanx==0)
    r=0;//(x,y)不变,故不用计算,直接给(0,0),初角返回任何值都可;
    else
    {
    if(yuanz==0||yuanx==0)
    r=1.0f;
    else
    r=1.414f;
             }
                nowJiao=chuJiao+bianJiao ;
                //使用初角直为了计算当前(x,y)位置,当前jiaodu1与他无关,只与老角有关
                //(-1,-1)距离原点为根2,约1.732
                //0.3指定了1点在0.3,-0.3处
                fz=(float)kuaiZhongXinWeizhi*r*(float)Math.cos(Math.PI*nowJiao/180);
                fx=(float)kuaiZhongXinWeizhi*r*(float)Math.sin(Math.PI*nowJiao/180);
                fy=(float)kuaiZhongXinWeizhi*(yuany);
                //z坐标不变,这里的z早减过了1
        //计算出了全部数据,OK,开始刷新
        //用变换量
        //transz.rotZ(Math.toRadians(anglez));
        //transy.rotY(Math.toRadians(bianJiao+oldJiaoDu));
        //transx.rotX(Math.toRadians(anglex));
        transp.setTranslation(new Vector3f(fx,fy,fz));
        //生效
        //transGroupz.setTransform(transz);
        //transGroupy.setTransform(transy);
        //transGroupx.setTransform(transx);
        transGroupp.setTransform(transp);
    //停不了,只能使用多线程或定时
                //System.out.println("bianJiao="+bianJiao);
                 try
              {
                //System.in.read();//暂停
                //
                myThread.sleep(donghuaDelay);
             }
              catch(Exception e)
            {
             }
                           //在这里才放出令牌
             selectDonghuaId++;
     selectDonghuaId%=9;
            }
 }
   void startDonghuaZ()
  {
            //动画模块
            int chuJiao ;
            int oneTime ;
            int bianJiao ;
            int nowJiao ;
            //测试
            //totateArg=90;
            chuJiao=getChujiao(yuanx,yuany);
            if(totateArg==-90)
            oneTime=-15 ;
            else
            oneTime=15 ;
                //System.out.println("chuJiao="+chuJiao);
                //System.out.println("totateArg="+totateArg);
            //nowJiao=chuJiao+bianJiao ;
            //这是目前角度公式,可见,据坐标可以判断它的角度嘛
            for(bianJiao=0;bianJiao!=(totateArg+oneTime);bianJiao+=oneTime)
            {
            if(!closeDonghua)
            {
              while(myDonghuaId!=selectDonghuaId)//动画同步相关轮到自己时才执行,把令牌交给下一个
             {;//System.out.println("我是"+myDonghuaId+"号,而令牌现在是"+selectDonghuaId+"号,我要等...");
       try
         {
          //System.in.read();//暂停
               myThread.sleep(whileDelay);
           }
             catch(Exception e)
           {
            }
           }
          }
                //计算x,y和角度输出
                float fx ;
                float fy ;
                float fz ;
                //半径
                float r;
    if(yuanx==0&&yuany==0)
    r=0;//(x,y)不变,故不用计算,直接给(0,0),初角返回任何值都可;
    else
    {
    if(yuanx==0||yuany==0)
    r=1.0f;
    else
    r=1.414f;
             }
                nowJiao=chuJiao+bianJiao ;
                //使用初角直为了计算当前(x,y)位置,当前jiaodu1与他无关,只与老角有关
                //(-1,-1)距离原点为根2,约1.732
                //0.3指定了1点在0.3,-0.3处
                fx=(float)kuaiZhongXinWeizhi*r*(float)Math.cos(Math.PI*nowJiao/180);
                fy=(float)kuaiZhongXinWeizhi*r*(float)Math.sin(Math.PI*nowJiao/180);
                fz=(float)kuaiZhongXinWeizhi*(yuanz);
                //z坐标不变,这里的z早减过了1
        //计算出了全部数据,OK,开始刷新
        //用变换量
        //transz.rotZ(Math.toRadians());
        //transy.rotY(Math.toRadians());
        //transx.rotX(Math.toRadians());
        transp.setTranslation(new Vector3f(fx,fy,fz));
        //生效
        //transGroupz.setTransform(transz);
        //transGroupy.setTransform(transy);
        //transGroupx.setTransform(transx);
        transGroupp.setTransform(transp);
    //停不了,只能使用多线程或定时

                //System.out.println("bianJiao="+bianJiao);
                 try
              {
                //System.in.read();//暂停
                //
                myThread.sleep(donghuaDelay);
             }
              catch(Exception e)
            {
             }
                           //在这里才放出令牌
             selectDonghuaId++;
     selectDonghuaId%=9;

            }
  }
    //center点仅用来计算颜色
    void add3DCube(int centerx,int centery,int centerz,TransformGroup myTransGroup)
    {
        //System.out.println("正在画该块.....");
        //颜色数据结构
        int[]compare=new int[6];
        compare[0]=centerx ;
        //x
        compare[1]=centerx ;
        //x
        compare[2]=centery ;
        //y
        compare[3]=centery ;
        //y
        compare[4]=centerz ;
        //z
        compare[5]=centerz ;
        //z
        int[]compareWith=new int[6];
        compareWith[0]=1 ;
        compareWith[1]=-1 ;
        compareWith[2]=1 ;
        compareWith[3]=-1 ;
        compareWith[4]=1 ;
        compareWith[5]=-1 ;
        Color3f presentMianColor ;
        //面图
        String presentImageFile;
        mianImageFile[0]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverRight.jpg";
        mianImageFile[1]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverLeft.jpg";
        mianImageFile[2]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverUp.jpg";
        mianImageFile[3]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverDown.jpg";
        mianImageFile[4]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverFront.jpg";
        mianImageFile[5]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverBehind.jpg";
        mianImageFile[6]="D:\\MyWorkSpace\\checkDemo\\src\\com\\scitel\\IMG\\coverCenter.jpg";
        //点数据结构
        Vector3f mianxin=new Vector3f();
        Vector3f[]mianxinpianyi=new Vector3f[6];
        mianxinpianyi[0]=new Vector3f(1,0,0);
        mianxinpianyi[1]=new Vector3f(-1,0,0);
        mianxinpianyi[2]=new Vector3f(0,1,0);
        mianxinpianyi[3]=new Vector3f(0,-1,0);
        mianxinpianyi[4]=new Vector3f(0,0,1);
        mianxinpianyi[5]=new Vector3f(0,0,-1);
        Vector3f[]dingdianPianyiX=new Vector3f[4];
        dingdianPianyiX[0]=new Vector3f(0.0f,1.0f,1.0f);
        dingdianPianyiX[1]=new Vector3f(0.0f,-1.0f,1.0f);
        dingdianPianyiX[2]=new Vector3f(0.0f,-1.0f,-1.0f);
        dingdianPianyiX[3]=new Vector3f(0.0f,1.0f,-1.0f);
        Vector3f[]dingdianPianyiY=new Vector3f[4];
        dingdianPianyiY[0]=new Vector3f(1.0f,0.0f,1.0f);
        dingdianPianyiY[1]=new Vector3f(1.0f,0.0f,-1.0f);
        dingdianPianyiY[2]=new Vector3f(-1.0f,0.0f,-1.0f);
        dingdianPianyiY[3]=new Vector3f(-1.0f,0.0f,1.0f);
        Vector3f[]dingdianPianyiZ=new Vector3f[4];
        dingdianPianyiZ[0]=new Vector3f(1.0f,1.0f,0.0f);
        dingdianPianyiZ[1]=new Vector3f(-1.0f,1.0f,0.0f);
        dingdianPianyiZ[2]=new Vector3f(-1.0f,-1.0f,0.0f);
        dingdianPianyiZ[3]=new Vector3f(1.0f,-1.0f,0.0f);
        //通过for,集合到三个数组
        Point3f[][] vert=new Point3f[6][4];
        Color3f[] color=new Color3f[6];
        String[] imageFile=new String[6];
        for(int i=0;i<=5;i++)
        {
            //计算该面 颜色和贴图
            if(compare[i]==compareWith[i])
            {
             presentMianColor=mianColor[i];
             presentImageFile=mianImageFile[i];
         }
            else
            {
                presentMianColor=mianColor[6];
                presentImageFile=mianImageFile[6];
                //如果颜色为白色,不画该面
                //continue则跳过不画
                //continue ;
            }
            try
            {
                //System.in.read();//暂停
            }
            catch(Exception e)
            {
            }
            //计算该面 面心
            mianxin.x=mianxinpianyi[i].x ;
            mianxin.y=mianxinpianyi[i].y ;
            mianxin.z=mianxinpianyi[i].z ;
            //计算该面 四个点
            Vector3f[]dingdian=new Vector3f[4];
            for(int j=0;j<=3;j++)
            {
                dingdian[j]=new Vector3f();
                if(i==0||i==1)
                {
                    dingdian[j].x=mianxin.x+dingdianPianyiX[j].x ;
                    dingdian[j].y=mianxin.y+dingdianPianyiX[j].y ;
                    dingdian[j].z=mianxin.z+dingdianPianyiX[j].z ;
                }
                else if(i==2||i==3)
                {
                    dingdian[j].x=mianxin.x+dingdianPianyiY[j].x ;
                    dingdian[j].y=mianxin.y+dingdianPianyiY[j].y ;
                    dingdian[j].z=mianxin.z+dingdianPianyiY[j].z ;
                }
                else if(i==4||i==5)
                {
                    dingdian[j].x=mianxin.x+dingdianPianyiZ[j].x ;
                    dingdian[j].y=mianxin.y+dingdianPianyiZ[j].y ;
                    dingdian[j].z=mianxin.z+dingdianPianyiZ[j].z ;
                }
            }
            //用顶点和颜色画 该面
            //建面方法一,把vector3D对象传进去,在里面转化为float数组
   //Shape3D shape=SomeShape3D.mian1of6CubeShape3D(observer,dingdian,presentImageFile,presentMianColor);
            //建面方法二,把vector3D在这里转化为point3f数组,再传进去,转换更简单
           Point3f[] vert1=new Point3f[4];
           Point3f[] vert2=new Point3f[4];
           //4个点的信息
           for(int k=0;k<=3;k++)
            {
      vert1[k]=new Point3f(SomeShape3D.fangKuaiBanJing*dingdian[k].x ,SomeShape3D.fangKuaiBanJing*dingdian[k].y,SomeShape3D.fangKuaiBanJing*dingdian[k].z);
 vert2[3-k]=new Point3f(SomeShape3D.fangKuaiBanJing*dingdian[k].x ,SomeShape3D.fangKuaiBanJing*dingdian[k].y,SomeShape3D.fangKuaiBanJing*dingdian[k].z);
         }
         Shape3D shape1=SomeShape3D.shapeMaker(observer,presentImageFile,vert1);
         Shape3D shape2=SomeShape3D.shapeMaker(observer,presentImageFile,vert2);
            //两方法结果一样
            //消失现象 可以避免,原因是各面衔接点不重合,dingdian[k].x乘上SomeShape3D.fangKuaiBanJing后有数据问题
            //挂到自己的坐标系
      myTransGroup.addChild(shape1);
      myTransGroup.addChild(shape2);
            //测试3

         // for(int j=0;j<=3;j++)
          //  {
          // vert[i][j]=new Point3f(SomeShape3D.fangKuaiBanJing*dingdian[j].x ,SomeShape3D.fangKuaiBanJing*dingdian[j].y,SomeShape3D.fangKuaiBanJing*dingdian[j].z);
   // }
       //color[i]=presentMianColor;
          // imageFile[i]=presentImageFile;
        }
                    //测试3
           // SomeShape3D.box3D(observer,myTransGroup,vert,color,imageFile);
        //System.out.println("第"+whickBlockPainted+"块完毕。");
        System.out.print('.');
        whickBlockPainted++;
    }
    //该块改变位置
    //Floor:0,1,2
    //totateArg:90 180 -90
    //为了方便计算,先平移(坐标全减1),变换后,再平移还原(坐标全加1)
    //该块改变位置
    //Floor:0,1,2
    //totateArg:90 180 -90
    //为了方便计算,先平移(坐标全减1),变换后,再平移还原(坐标全加1)
    void xyzChange(char doType,int mYtotateArg)
    {
        //
        totateArg=mYtotateArg;
        //在处理过程中,原坐标先平移
        x-=1 ;
        y-=1 ;
        z-=1 ;
//动画预处理
yuanx=x;
yuany=y;
yuanz=z;

if(closeDonghua)
{//startDonghuaX();
}
else
//换为用线程执行
{
selectedC=doType;
myThread=new Thread(this,"Rotate");
myThread.start();
}
System.out.println("新轴点x计算并保存。。。");
  //新轴点计算并保存
//System.out.println("。。。"+xvec.x+xvec.y+xvec.z);
        int[] newvecx=jisuanNextXYZ(doType,totateArg,xvec.x,xvec.y,xvec.z);
//System.out.println("。。。");
        xvec.x=newvecx[0];
        xvec.y=newvecx[1];
        xvec.z=newvecx[2];
System.out.println("新轴点y计算并保存。。。");
        int[] newvecy=jisuanNextXYZ(doType,totateArg,yvec.x,yvec.y,yvec.z);
        yvec.x=newvecy[0];
        yvec.y=newvecy[1];
        yvec.z=newvecy[2];
        int[] newvecz=jisuanNextXYZ(doType,totateArg,zvec.x,zvec.y,zvec.z);
        zvec.x=newvecz[0];
        zvec.y=newvecz[1];
        zvec.z=newvecz[2];
System.out.println("新坐标计算并保存

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -