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

📄 model3d.java

📁 一个java写的魔方游戏
💻 JAVA
字号:
// FrontEnd Plus GUI for JAD
// DeCompiled : Model3D.class

import java.awt.Graphics;
import java.util.*;

class Model3D
{

    Matrix3D ViewMat;
    Hashtable Objects;
    Vector Faces;

    public Model3D()
    {
        ViewMat = null;
        Objects = new Hashtable();
        Faces = new Vector();
    }

    public Model3D(Vertex vertex)
    {
        Objects = new Hashtable();
        Faces = new Vector();
        SetView(vertex);
    }

    public Model3D(Matrix3D matrix3d)
    {
        Objects = new Hashtable();
        Faces = new Vector();
        ViewMat = matrix3d;
    }

    public synchronized void AddObject(String s, Object3D object3d)
    {
        Objects.put(s, object3d);
        for(int i = 0; i < object3d.FaceNum; i++)
            Faces.addElement(object3d.Faces[i]);

    }

    private Object3D GetObject(String s)
    {
        return (Object3D)Objects.get(s);
    }

    public synchronized void DelObject(String s)
    {
        Object3D object3d = (Object3D)Objects.remove(s);
        for(int i = 0; i < object3d.FaceNum; i++)
            Faces.removeElement(object3d.Faces[i]);

    }

    public synchronized void ClearObject()
    {
        Objects.clear();
        Faces.removeAllElements();
    }

    public void SetView(Vertex vertex)
    {
        float f = vertex.x;
        float f1 = vertex.y;
        float f2 = vertex.z;
        float f3 = (float)Math.sqrt(f * f + f1 * f1 + f2 * f2);
        float f4 = (float)((double)f1 / Math.sqrt(f * f + f1 * f1));
        float f5 = (float)((double)f / Math.sqrt(f * f + f1 * f1));
        float f6 = (float)(Math.sqrt(f * f + f1 * f1) / (double)f3);
        float f7 = f2 / f3;
        float af[][] = {
            {
                -f4, f5, 0.0F, 0.0F
            }, {
                -f5 * f7, -f4 * f7, f6, 0.0F
            }, {
                -f5 * f6, -f4 * f6, -f7, 0.0F
            }, {
                0.0F, 0.0F, 0.0F, 1.0F
            }
        };
        ViewMat = new Matrix3D(af);
    }

    public void SetView(Matrix3D matrix3d)
    {
        ViewMat = matrix3d;
    }

    public Matrix3D GetView()
    {
        return ViewMat;
    }

    public void XRotateView(double d)
    {
        ViewMat.ProXRotate(d);
    }

    public void YRotateView(double d)
    {
        ViewMat.ProYRotate(d);
    }

    public void ZRotateView(double d)
    {
        ViewMat.ProZRotate(d);
    }

    public void XRotate(String s, double d)
    {
        GetObject(s).XRotate(d);
    }

    public void YRotate(String s, double d)
    {
        GetObject(s).YRotate(d);
    }

    public void ZRotate(String s, double d)
    {
        GetObject(s).ZRotate(d);
    }

    public void Unify(String s)
    {
        GetObject(s).Unify();
    }

    public void Transform(String s)
    {
        GetObject(s).Transform();
    }

    public void Transform()
    {
        Object3D object3d;
        for(Enumeration enumeration = Objects.elements(); enumeration.hasMoreElements(); object3d.Transform())
            object3d = (Object3D)enumeration.nextElement();

    }

    protected void Sort()
    {
        for(int i = 0; i < Faces.size(); i++)
        {
            Face face = (Face)Faces.elementAt(i);
            face.CalcParam(ViewMat);
        }

        QuickSort(0, Faces.size() - 1);
    }

    public synchronized void Paint(Graphics g, int i, int j)
    {
        if(Faces.isEmpty())
            return;
        Sort();
        for(int k = 0; k < Faces.size(); k++)
        {
            Face face = (Face)Faces.elementAt(k);
            face.Paint(g, i, j);
        }

    }

    void DefineBound(int i, int j)
    {
        float f = 10000F;
        float f1 = -10000F;
        float f2 = 10000F;
        float f3 = -10000F;
        float f4 = 10000F;
        float f5 = -10000F;
        for(Enumeration enumeration = Objects.elements(); enumeration.hasMoreElements();)
        {
            Object3D object3d = (Object3D)enumeration.nextElement();
            for(int k = 0; k < object3d.VerNum; k++)
            {
                f = Math.min(f, object3d.Vertices[k].x);
                f2 = Math.min(f2, object3d.Vertices[k].y);
                f4 = Math.min(f4, object3d.Vertices[k].z);
                f1 = Math.max(f1, object3d.Vertices[k].x);
                f3 = Math.max(f3, object3d.Vertices[k].y);
                f5 = Math.max(f5, object3d.Vertices[k].z);
            }

        }

        float f6 = (0.6F * (float)Math.min(i, j)) / Math.max(Math.max(f1 - f, f3 - f2), f5 - f4);
        ViewMat.ProScale(f6, f6, f6);
        Transform();
    }

    protected void QuickSort(int i, int j)
    {
        int k = i;
        int l = j;
        int i1 = (i + j) / 2;
        do
        {
            while(((Face)Faces.elementAt(i1)).CloserThan((Face)Faces.elementAt(k)) && k < j) 
                k++;
            for(; ((Face)Faces.elementAt(l)).CloserThan((Face)Faces.elementAt(i1)) && l > i; l--);
            if(k <= l)
            {
                Face face = (Face)Faces.elementAt(k);
                Faces.setElementAt((Face)Faces.elementAt(l), k);
                Faces.setElementAt(face, l);
                k++;
                l--;
            }
        } while(k <= l);
        if(i < l)
            QuickSort(i, l);
        if(k < j)
            QuickSort(k, j);
    }
}

⌨️ 快捷键说明

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