📄 mofang.java
字号:
z1=(float)(zuoBiaoZhouSmallDingXi*Math.cos(i*2*Math.PI/25));
x1=zuoBiaoZhouSmallDingChang ;
y1=(float)(zuoBiaoZhouSmallDingXi*Math.sin(i*2*Math.PI/25));
vert[i]=new Point3f(x1,y1,z1);
colors[i]=Block.mianColor[0];
}
}
for(i=0;i<14;i++)
{
if(i==0)
{
vert[27+i]=new Point3f(zuoBiaoZhouSmallDingDian,0.0f,0.0f);
colors[27+i]=Block.mianColor[0];
}
else
{
z1=(float)(0.005f*Math.cos(i*2*Math.PI/12));
x1=zuoBiaoZhouSmallWeiDian ;
y1=(float)(0.005f*Math.sin(i*2*Math.PI/12));
vert[27+i]=new Point3f(x1,y1,z1);
colors[27+i]=Block.mianColor[1];
}
}
int count[]=new int[2];
count[0]=27 ;
count[1]=14 ;
TriangleFanArray tri=new TriangleFanArray(
vert.length,
TriangleFanArray.COORDINATES|TriangleStripArray.COLOR_3,
count
);
tri.setCoordinates(0,vert);
tri.setColors(0,colors);
Appearance app=new Appearance();
PolygonAttributes polyAttrib=new PolygonAttributes();
polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
//polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
app.setPolygonAttributes(polyAttrib);
Shape3D shape=new Shape3D(tri,app);
//System.out.print("zuoBiaoZhuSmallX 创建 完成");
trans.addChild(shape);
//到这里,小坐标轴对象创建完成
}
public static void zuoBiaoZhuSmallYShape3D(TransformGroup trans)
{
//创建小坐标轴对象
int i ;
float x1,x2,y1,y2,z1,z2 ;
Point3f[]vert=new Point3f[41];
Color3f[]colors=new Color3f[41];
for(i=0;i<27;i++)
{
if(i==0)
{
vert[i]=new Point3f(0.0f,zuoBiaoZhouSmallDingDian,0.0f);
colors[i]=Block.mianColor[2];
}
else
{
x1=(float)(zuoBiaoZhouSmallDingXi*Math.cos(i*2*Math.PI/25));
y1=zuoBiaoZhouSmallDingChang ;
z1=(float)(zuoBiaoZhouSmallDingXi*Math.sin(i*2*Math.PI/25));
vert[i]=new Point3f(x1,y1,z1);
colors[i]=Block.mianColor[2];
}
}
for(i=0;i<14;i++)
{
if(i==0)
{
vert[27+i]=new Point3f(0.0f,zuoBiaoZhouSmallDingDian,0.0f);
colors[27+i]=Block.mianColor[2];
}
else
{
x1=(float)(0.005f*Math.cos(i*2*Math.PI/12));
y1=zuoBiaoZhouSmallWeiDian ;
z1=(float)(0.005f*Math.sin(i*2*Math.PI/12));
vert[27+i]=new Point3f(x1,y1,z1);
colors[27+i]=Block.mianColor[3];
}
}
int count[]=new int[2];
count[0]=27 ;
count[1]=14 ;
TriangleFanArray tri=new TriangleFanArray(
vert.length,
TriangleFanArray.COORDINATES|TriangleStripArray.COLOR_3,
count
);
tri.setCoordinates(0,vert);
tri.setColors(0,colors);
Appearance app=new Appearance();
PolygonAttributes polyAttrib=new PolygonAttributes();
polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
//polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
app.setPolygonAttributes(polyAttrib);
Shape3D shape=new Shape3D(tri,app);
//System.out.print("zuoBiaoZhuSmallY 创建 完成");
trans.addChild(shape);
//到这里,小坐标轴对象创建完成
}
public static void zuoBiaoZhuSmallZShape3D(TransformGroup trans)
{
//创建小坐标轴对象
int i ;
float x1,x2,y1,y2,z1,z2 ;
Point3f[]vert=new Point3f[41];
Color3f[]colors=new Color3f[41];
for(i=0;i<27;i++)
{
if(i==0)
{
vert[i]=new Point3f(0.0f,0.0f,zuoBiaoZhouSmallDingDian);
colors[i]=Block.mianColor[4];
}
else
{
y1=(float)(zuoBiaoZhouSmallDingXi*Math.cos(i*2*Math.PI/25));
z1=zuoBiaoZhouSmallDingChang ;
x1=(float)(zuoBiaoZhouSmallDingXi*Math.sin(i*2*Math.PI/25));
vert[i]=new Point3f(x1,y1,z1);
colors[i]=Block.mianColor[4];
}
}
for(i=0;i<14;i++)
{
if(i==0)
{
vert[27+i]=new Point3f(0.0f,0.0f,zuoBiaoZhouSmallDingDian);
colors[27+i]=Block.mianColor[4];
}
else
{
y1=(float)(0.005f*Math.cos(i*2*Math.PI/12));
z1=zuoBiaoZhouSmallWeiDian ;
x1=(float)(0.005f*Math.sin(i*2*Math.PI/12));
vert[27+i]=new Point3f(x1,y1,z1);
colors[27+i]=Block.mianColor[5];
}
}
int count[]=new int[2];
count[0]=27 ;
count[1]=14 ;
TriangleFanArray tri=new TriangleFanArray(
vert.length,
TriangleFanArray.COORDINATES|TriangleStripArray.COLOR_3,
count
);
tri.setCoordinates(0,vert);
tri.setColors(0,colors);
Appearance app=new Appearance();
PolygonAttributes polyAttrib=new PolygonAttributes();
polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
//polyAttrib.setPolygonMode(PolygonAttributes.POLYGON_LINE);
app.setPolygonAttributes(polyAttrib);
Shape3D shape=new Shape3D(tri,app);
//System.out.print("zuoBiaoZhuSmallZ 创建 完成");
trans.addChild(shape);
//到这里,小坐标轴对象创建完成
}
public static Shape3D shapeMaker(Component observer,String filename,Point3f[] p)
{
//用材质,四顶点数组创建一个四边面,需要applet对象observer
//创建贴图和外观
TextureLoader loader=new TextureLoader(filename,observer);
ImageComponent2D myImage=loader.getImage();
Texture myTex=loader.getTexture();
myTex.setImage(0,myImage);
Appearance appear=new Appearance();
appear.setTexture(myTex);
//四边形对象
//QuadArray tri=new QuadArray(dingdian.length,QuadArray.COORDINATES|QuadArray.COLOR_3|QuadArray.TEXTURE_COORDINATE_2);
QuadArray tri=new QuadArray(4,QuadArray.COORDINATES|QuadArray.TEXTURE_COORDINATE_2);//GeometryArray
tri.setCoordinates(0,p);
//tri.setColors(0,color);
//给四边形对象配材质
TexCoord2f texCoords=new TexCoord2f();//材质坐标
texCoords.set(0.0f,1.0f);//取左下角
tri.setTextureCoordinate(0,0,texCoords);//为左上角
texCoords.set(0.0f,0.0f);//
tri.setTextureCoordinate(0,1,texCoords);//
texCoords.set(1.0f,0.0f);//
tri.setTextureCoordinate(0,2,texCoords);//
texCoords.set(1.0f,1.0f);//
tri.setTextureCoordinate(0,3,texCoords);//
Shape3D shape=new Shape3D(tri,appear);
return shape ;
//到这里,6个面对象创建完成
}
public static void addText3DDonghua(TransformGroup parentTrg,String textString,Point3f myPoint3f,float sl,Color3f ambientColor,int donghua)
{
//s1定scale,myPoint3f定位置,daxiao是大小
//字的左下角默认左下角在中点,当tl=0.1时,要向左移10才到左端
//自定义trg
Transform3D trgtra=new Transform3D();
TransformGroup trg=new TransformGroup(trgtra);
trg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
trg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
//trg.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
double tessellation=-0.0 ;
String fontName="vadana" ;
// Create the root of the branch graph
// Create a Transformgroup to scale all objects so they
// appear in the scene.
TransformGroup objScale=new TransformGroup();
Transform3D t3d=new Transform3D();
// Assuming uniform size chars, set scale to fit string in view
t3d.setScale(sl);
objScale.setTransform(t3d);
trg.addChild(objScale);
// Create the transform group node and initialize it to the
// identity. Enable the TRANSFORM_WRITE capability so that
// our behavior code can modify it at runtime. Add it to the
// root of the subgraph.
TransformGroup objTrans=new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
objScale.addChild(objTrans);
Font3D f3d ;
if(tessellation>0.0)
{
f3d=new Font3D(new Font(fontName,Font.PLAIN,2),
tessellation,
new FontExtrusion());
}
else
{
f3d=new Font3D(new Font(fontName,Font.PLAIN,2),
new FontExtrusion());
}
Text3D txt=new Text3D(f3d,textString,
myPoint3f);
Shape3D sh=new Shape3D();
Appearance app=new Appearance();
Material mm=new Material();
mm.setLightingEnable(true);
app.setMaterial(mm);
sh.setGeometry(txt);
sh.setAppearance(app);
objTrans.addChild(sh);
BoundingSphere bounds=
new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);
// Set up the ambient light
AmbientLight ambientLightNode=new AmbientLight(ambientColor);
ambientLightNode.setInfluencingBounds(bounds);
trg.addChild(ambientLightNode);
// Set up the directional lights
Color3f light1Color=new Color3f(1.0f,1.0f,0.9f);
Vector3f light1Direction=new Vector3f(1.0f,1.0f,1.0f);
Color3f light2Color=new Color3f(1.0f,1.0f,0.9f);
Vector3f light2Direction=new Vector3f(-1.0f,-1.0f,-1.0f);
DirectionalLight light1
=new DirectionalLight(light1Color,light1Direction);
light1.setInfluencingBounds(bounds);
trg.addChild(light1);
DirectionalLight light2
=new DirectionalLight(light2Color,light2Direction);
light2.setInfluencingBounds(bounds);
trg.addChild(light2);
if(donghua==1)
{
//给trg(自定义),加上旋转插件
Alpha alpha1=new Alpha(-1,Alpha.INCREASING_ENABLE|Alpha.DECREASING_ENABLE,0,0,5000,300,100000,5000,300,100000);
RotationInterpolator myRoTate=new RotationInterpolator(alpha1,trg,trgtra,0.0f,(float)Math.PI*30);
myRoTate.setSchedulingBounds(bounds);
trg.addChild(myRoTate);
trgtra.rotZ(Math.PI/2);
trg.setTransform(trgtra);
System.out.println("\n文本 动画 方案:"+donghua);
}
parentTrg.addChild(trg);
}
}
//由于java数组的局限,整个程序使用0,1,2空间,为了方便计算,计算时要进行坐标变换
public class MoFang
{
//该类含魔方的数据表示,blockArray为计算单步必需的,Position为便于人的视觉(用于操作和
//显示输出)而添加的辅助结构,实际上,我们可以总是从blockArray算出来,但计算量大得惊人
public static Block[][][]blockArray=new Block[3][3][3];
//设魔方27块
public static Position[][][]positionArray=new Position[3][3][3];
//魔方27个绝对位置
//用于处理对魔方的操作,共27种操作
//doType:'X','Y','Z'
//Floor:-1,0,1
//totateArg:90 180 -90
public static void doIt(char doType,int Floor,int totateArg)
{
System.out.println("\n处理操作:"+doType);
System.out.println("层数:"+(Floor-1));
System.out.println("角度:"+totateArg+"\n");
if(!Block.closeDonghua) //动画打开才等待
{
while(Block.yunXingThread!=0)
{System.out.print('.');
}
}
switch(doType)
{
case 'Z' :
for(int i=0;i<=2;i++)
for(int j=0;j<=2;j++)
//for(int k=0;k<=2;k++)
{
if(Block.closeDonghua)//动画关闭才变换中间块
{
if(i==1&&j==1)
{
continue ;
}
}
int changBlockX=positionArray[i][j][Floor].x ;
int changBlockY=positionArray[i][j][Floor].y ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -