📄 cubeplane.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 + -