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

📄 cubeplane.java

📁 wince 5.0上基于personal java写的的虚拟魔方
💻 JAVA
字号:

/*
 * Java Virtual Cube
 * -----------------
 *
 * Copyright 1996, Song Li  
 * URL: http://www.cs.umbc.edu/~sli2
 *
 * 
 * You can use the code for any nonprofittable use. But remember to mention
 * the authors' names in your revised program. You are also encouraged to
 * improve the program or give your comments and bug reports. If there are
 * further questions, please contact me and I'll be glad to help. My E-Mail
 * address is: sli2@gl.umbc.edu.
 *
 */



import java.awt.Color ;




class CubePlane extends Object3D {

    final static int XPlane = 0 ;
    final static int YPlane = 1 ;
    final static int ZPlane = 2 ;

    private final int TransFace [] [] = {
        {0, 1, 2, 3, 4, 5} ,
        {2, 3, 4, 5, 0, 1} ,
        {4, 5, 0, 1, 2, 3} } ;

    private Vertex PlaneVertex [] = new Vertex [8] ;
    private Face   PlaneFace   [] = new Face   [6] ;
        

    private int Plane ;
    private int Axis  ;
    


    CubePlane (int axis, int plane) {
        Plane = plane ;
        Axis  = axis ;
        NewPlane (PlaneVertex, PlaneFace) ;
        Define (PlaneVertex, 8, PlaneFace, 6) ;
    }



    public void Reset () {
        Define (PlaneVertex, 8, PlaneFace, 6) ;
    }



    public void SetMap (Color map [][][]) {
        if (Plane == 0)
            ((CubeFace) Faces[0]).SetMap (map [TransFace[Axis][0]]);
        
        if (Plane == 2)
            ((CubeFace) Faces[1]).SetMap (map [TransFace[Axis][1]]) ;

        for (int i=2; i<=5; i++)
            for (int h=0; h<3; h++) {
                int faceindex = TransFace[Axis][i];
                Color color;
                boolean order = faceindex % 2 == 0;
                if (i==2 || i==3)
                    order = ! order;
                if (! order)
                    color = map [faceindex][h][Plane];
                else
                    color = map [faceindex][Plane][h];
                if (i == 2 || i == 5)
                    ((CubeFace) Faces[i]).SetMap (color, h, 0);
                else
                    ((CubeFace) Faces[i]).SetMap (color, 0, h);
                }
    }




    public void Spin (boolean counterclock) {
        double theta = (counterclock ? 15 : -15) * Math.PI / 180 ;
        switch (Axis) {
            case XPlane: XRotate (theta);  break;
            case YPlane: YRotate (theta);  break;
            case ZPlane: ZRotate (theta);  break;
        }
        Transform () ;
    }




    private void NewPlane (Vertex vertex [], Face face []) {

        switch (Axis) {
            case XPlane: 
                 vertex[0] = new Vertex (-3+Plane*2, -3, -3) ;
                 vertex[1] = new Vertex (-3+Plane*2, -3,  3) ;
                 vertex[2] = new Vertex (-3+Plane*2,  3,  3) ;
                 vertex[3] = new Vertex (-3+Plane*2,  3, -3) ;
                 vertex[4] = new Vertex (-1+Plane*2, -3, -3) ;
                 vertex[5] = new Vertex (-1+Plane*2, -3,  3) ;
                 vertex[6] = new Vertex (-1+Plane*2,  3,  3) ;
                 vertex[7] = new Vertex (-1+Plane*2,  3, -3) ;
                 break ;
             
            case YPlane:
                 vertex[0] = new Vertex (-3, -3+Plane*2, -3) ;
                 vertex[1] = new Vertex ( 3, -3+Plane*2, -3) ;
                 vertex[2] = new Vertex ( 3, -3+Plane*2,  3) ;
                 vertex[3] = new Vertex (-3, -3+Plane*2,  3) ;
                 vertex[4] = new Vertex (-3, -1+Plane*2, -3) ;
                 vertex[5] = new Vertex ( 3, -1+Plane*2, -3) ;
                 vertex[6] = new Vertex ( 3, -1+Plane*2,  3) ;
                 vertex[7] = new Vertex (-3, -1+Plane*2,  3) ;
                 break ;
            
            case ZPlane:
                 vertex[0] = new Vertex (-3, -3, -3+Plane*2) ;
                 vertex[1] = new Vertex (-3,  3, -3+Plane*2) ;
                 vertex[2] = new Vertex ( 3,  3, -3+Plane*2) ;
                 vertex[3] = new Vertex ( 3, -3, -3+Plane*2) ;
                 vertex[4] = new Vertex (-3, -3, -1+Plane*2) ;
                 vertex[5] = new Vertex (-3,  3, -1+Plane*2) ;
                 vertex[6] = new Vertex ( 3,  3, -1+Plane*2) ;
                 vertex[7] = new Vertex ( 3, -3, -1+Plane*2) ;
                 break ;
            }
        

        if (Plane == 0)
            face[0] = new CubeFace (3, 3) ;
        else {
            face[0] = new Face (4) ;
            face[0].FaceColor = Color.black ;
            }
        
        if (Plane == 2)
            face[1] = new CubeFace (3, 3) ;
        else {
            face[1] = new Face (4) ;
            face[1].FaceColor = Color.black ;
            }
        
        for (int i=2; i<6; i++)
            if (i == 2 || i == 5)
                face[i] = new CubeFace (3, 1);
            else
                face[i] = new CubeFace (1, 3);
       
        face[0].Vertices[0] = vertex[0] ;
        face[0].Vertices[1] = vertex[1] ;
        face[0].Vertices[2] = vertex[2] ;
        face[0].Vertices[3] = vertex[3] ;
        
        face[1].Vertices[0] = vertex[4] ;
        face[1].Vertices[1] = vertex[7] ;
        face[1].Vertices[2] = vertex[6] ;
        face[1].Vertices[3] = vertex[5] ;
        
        face[2].Vertices[0] = vertex[0] ;
        face[2].Vertices[1] = vertex[4] ;
        face[2].Vertices[2] = vertex[5] ;
        face[2].Vertices[3] = vertex[1] ;
        
        face[3].Vertices[0] = vertex[3] ;
        face[3].Vertices[1] = vertex[2] ;
        face[3].Vertices[2] = vertex[6] ;
        face[3].Vertices[3] = vertex[7] ;
        
        face[4].Vertices[0] = vertex[0] ;
        face[4].Vertices[1] = vertex[3] ;
        face[4].Vertices[2] = vertex[7] ;
        face[4].Vertices[3] = vertex[4] ;
        
        face[5].Vertices[0] = vertex[1] ;
        face[5].Vertices[1] = vertex[5] ;
        face[5].Vertices[2] = vertex[6] ;
        face[5].Vertices[3] = vertex[2] ;
    }


}

⌨️ 快捷键说明

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