魔方源代码Java Applet小程序文档格式.docx
- 文档编号:21941457
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:25
- 大小:18.36KB
魔方源代码Java Applet小程序文档格式.docx
《魔方源代码Java Applet小程序文档格式.docx》由会员分享,可在线阅读,更多相关《魔方源代码Java Applet小程序文档格式.docx(25页珍藏版)》请在冰豆网上搜索。
intbotBlocks[];
intsideCols[];
intsideW;
intsideH;
intdragReg;
inttwistSide;
intnearSide[];
intbuffer[];
doubledragCorn[];
doubledragDir[];
doubleeye[]={0.3651,0.1826,-0.9129};
doubleeX[]={0.9309,-0.0716,0.3581};
doubleeY[];
doubleTeye[];
doubleTeX[];
doubleTeY[];
doublelight[];
doubletemp[]={0.0,0.0,0.0};
doubletemp2[]={0.0,0.0,0.0};
doublenewCoord[];
doublesx;
doublesy;
doublesdxh;
doublesdyh;
doublesdxv;
doublesdyv;
doubled;
doublet1;
doublet2;
doublet3;
doublet4;
doublet5;
doublet6;
doublephi;
doublephibase;
doubleCphi;
doubleSphi;
doublecurrDragDir[];
booleannaturalState;
booleantwisting;
booleanOKtoDrag;
doublelocal0;
Mathm;
GraphicsoffGraphics;
ImageoffImage;
publicvoidinit()
{
offImage=createImage(120,120);
offGraphics=offImage.getGraphics();
rectX=newint[4];
rectY=newint[4];
newCoord=newdouble[16];
dragDir=newdouble[24];
dragCorn=newdouble[96];
topCorners=newdouble[24];
botCorners=newdouble[24];
topBlocks=newint[24];
botBlocks=newint[24];
buffer=newint[12];
nearSide=newint[12];
light=newdouble[3];
Teye=newdouble[3];
TeX=newdouble[3];
TeY=newdouble[3];
currDragDir=newdouble[2];
eY=newdouble[3];
vecProd(eye,0,eX,0,eY,0);
normalize(eY,0);
colList=newColor[120];
for(i=0;
i<
20;
i++)
colList[i]=newColor(103+i*8,103+i*8,103+i*8);
colList[i+20]=newColor(i*6,i*6,84+i*9);
colList[i+40]=newColor(84+i*9,i*5,i*5);
colList[i+60]=newColor(i*6,84+i*9,i*6);
colList[i+80]=newColor(84+i*9,84+i*9,i*6);
colList[i+100]=newColor(84+i*9,55+i*8,i*3);
}
sideCols=newint[54];
54;
sideCols[i]=i/9;
bgcolor=findBGColor();
resize(125,125);
repaint();
publicColorfindBGColor()
Colorcolor;
Stringstring2="
0123456789abcdef"
;
intan[]=newint[6];
Stringstring1=getParameter("
bgcolor"
);
if(string1!
=null&
&
string1.length()==6)
6;
for(j=0;
j<
16;
j++)
if(string1.charAt(i)==string2.charAt(j))
an[i]=j;
color=newColor(an[0]*16+an[1],an[2]*16+an[3],an[4]*16+an[5]);
else
color=Color.lightGray;
returncolor;
publicdoublescalProd(doublead1[],inti,doublead2[],intj)
returnad1[i]*ad2[j]+ad1[i+1]*ad2[j+1]+ad1[i+2]*ad2[j+2];
publicdoublevNorm(doublead[],inti)
returnMath.sqrt(ad[i]*ad[i]+ad[i+1]*ad[i+1]+ad[i+2]*ad[i+2]);
publicdoublecosAng(doublead1[],inti,doublead2[],intj)
returnscalProd(ad1,i,ad2,j)/(vNorm(ad1,i)*vNorm(ad2,j));
publicvoidnormalize(doublead[],inti)
local0=vNorm(ad,i);
ad[i]=ad[i]/local0;
ad[i+1]=ad[i+1]/local0;
ad[i+2]=ad[i+2]/local0;
publicvoidscalMult(doublead[],inti,doubled)
ad[i]=ad[i]*d;
ad[i+1]=ad[i+1]*d;
ad[i+2]=ad[i+2]*d;
publicvoidaddVec(doublead1[],inti,doublead2[],intj)
ad2[j]+=ad1[i];
ad2[j+1]+=ad1[i+1];
ad2[j+2]+=ad1[i+2];
publicvoidsubVec(doublead1[],inti,doublead2[],intj)
ad2[j]-=ad1[i];
ad2[j+1]-=ad1[i+1];
ad2[j+2]-=ad1[i+2];
publicvoidcopyVec(doublead1[],inti,doublead2[],intj)
ad2[j]=ad1[i];
ad2[j+1]=ad1[i+1];
ad2[j+2]=ad1[i+2];
publicvoidvecProd(doublead1[],inti,doublead2[],intj,doublead3[],intk)
ad3[k]=ad1[i+1]*ad2[j+2]-ad1[i+2]*ad2[j+1];
ad3[k+1]=ad1[i+2]*ad2[j]-ad1[i]*ad2[j+2];
ad3[k+2]=ad1[i]*ad2[j+1]-ad1[i+1]*ad2[j];
publicvoidcutUpCube()
24;
topCorners[i]=corners[i];
botCorners[i]=corners[i];
copyVec(sideVec,3*twistSide,temp,0);
copyVec(temp,0,temp2,0);
scalMult(temp,0,1.3333);
scalMult(temp2,0,0.6667);
8;
booleanflag=false;
4;
if(i==sides[twistSide*4+j])
flag=true;
if(flag)
subVec(temp2,0,botCorners,i*3);
addVec(temp,0,topCorners,i*3);
topBlocks[i]=mainBlocks[i];
botBlocks[i]=mainBlocks[i];
if(i==twistSide)
botBlocks[i*4+1]=0;
botBlocks[i*4+3]=0;
k=-1;
if(nextSide[i*4+j]==twistSide)
k=j;
switch(k)
case0:
topBlocks[i*4+3]=1;
botBlocks[i*4+2]=1;
break;
case1:
topBlocks[i*4]=2;
botBlocks[i*4+1]=2;
case2:
topBlocks[i*4+2]=2;
botBlocks[i*4+3]=2;
case3:
topBlocks[i*4+1]=1;
botBlocks[i*4]=1;
case-1:
topBlocks[i*4+1]=0;
topBlocks[i*4+3]=0;
publicbooleankeyDown(Eventevent,inti)
if(i==114)
twisting=false;
naturalState=true;
for(this.i=0;
this.i<
this.i++)
sideCols[this.i]=this.i/9;
elseif(i==115)
colorTwist((int)(Math.random()*6),(int)(Math.random()*3+1.0));
returnfalse;
publicbooleanmouseDrag(Eventevent,inti,intj)
if(!
twisting&
OKtoDrag)
OKtoDrag=false;
dragReg;
doubled1=dragCorn[this.i*8+1]-dragCorn[this.i*8];
doubled2=dragCorn[this.i*8+5]-dragCorn[this.i*8+4];
doubled3=dragCorn[this.i*8+3]-dragCorn[this.i*8];
doubled4=dragCorn[this.i*8+7]-dragCorn[this.i*8+4];
doubled5=(d4*((double)lastX-dragCorn[this.i*8])-d3*((double)lastY-dragCorn[this.i*8+4]))/(d1*d4-d3*d2);
doubled6=(-d2*((double)lastX-dragCorn[this.i*8])+d1*((double)lastY-dragCorn[this.i*8+4]))/(d1*d4-d3*d2);
if(d5>
0.0&
d5<
1.0&
d6>
d6<
1.0)
currDragDir[0]=dragDir[this.i*2];
currDragDir[1]=dragDir[this.i*2+1];
d=currDragDir[0]*(i-lastX)+currDragDir[1]*(j-lastY);
d=d*d/((currDragDir[0]*currDragDir[0]+currDragDir[1]*currDragDir[1])*((i-lastX)*(i-lastX)+(j-lastY)*(j-lastY)));
if(d>
0.6)
twistSide=nearSide[this.i];
this.i=100;
if(naturalState)
cutUpCube();
naturalState=false;
twisting=true;
phi=0.02*(currDragDir[0]*(i-lastX)+currDragDir[1]*(j-lastY))/Math.sqrt(currDragDir[0]*currDragDir[0]+currDragDir[1]*currDragDir[1]);
twisting)
dx=lastX-i;
copyVec(eX,0,temp,0);
scalMult(temp,0,(double)dx*0.016);
addVec(temp,0,eye,0);
vecProd(eY,0,eye,0,eX,0);
normalize(eX,0);
normalize(eye,0);
dy=j-lastY;
copyVec(eY,0,temp,0);
scalMult(temp,0,(double)dy*0.016);
lastX=i;
lastY=j;
publicbooleanmouseDown(Eventevent,inti,intj)
OKtoDrag=true;
publicbooleanmouseUp(Eventevent,inti,intj)
if(twisting)
phibase+=phi;
phi=0.0;
for(d=phibase;
d<
0.0;
d+=125.662)/*nullbody*/;
intk=(int)(d*3.183);
if(k%5==0||k%5==4)
k=(k+1)/5%4;
if(colDir[twistSide]<
0)
k=(4-k)%4;
phibase=0.0;
colorTwist(twistSide,k);
publicvoidcolorTwist(inti1,intj1)
intk4=0;
intj4=j1*2;
for(intk1=0;
k1<
k1++)
buffer[j4]=sideCols[i1*9+circleOrder[k1]];
j4=(j4+1)%8;
for(inti2=0;
i2<
i2++)
sideCols[i1*9+circleOrder[i2]]=buffer[i2];
j4=j1*3;
for(intj2=0;
j2<
j2++)
for(inti3=0;
i3<
i3++)
if(nextSide[nextSide[i1*4+j2]*4+i3]==i1)
k4=i3;
for(intj3=0;
j3<
3;
j3++)
switch(k4)
buffer[j4]=sideCols[nextSide[i1*4+j2]*9+j3];
buffer[j4]=sideCols[nextSide[i1*4+j2]*9+2+3*j3];
buffer[j4]
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 魔方源代码Java Applet小程序 魔方 源代码 Java Applet 程序