📄 desk.java
字号:
import java.awt.*;
// a static desk model
public class desk implements model{
private vector centre;
private vector iDirection, jDirection, kDirection;
private vector[][] vertix;
private paste[] pastes;
private vector[] polygonNormals;
private paste[] boundary;
private int NoOfPolygons;
private vector[][] bound;
private vector realCentre;
public desk(vector centre){
this.centre = centre;
realCentre = new vector(centre.x, centre.y, centre.z);
NoOfPolygons = 473;
iDirection = new vector(1,0,0);
jDirection = new vector(0,1,0);
kDirection = new vector(0,0,1);
vertix = new vector[NoOfPolygons][];
pastes = new paste[25];
bound = new vector[6][4];
boundary = new paste[6];
polygonNormals = new vector[NoOfPolygons];
createVertix();
makePaste();
createBoundary();
}
public void update(vector change, double xzRotate, double yzRotate){
// update the vertix accroding to the camera position and direction
vector[][] tempVertix = new vector[NoOfPolygons][];
for(int i = 0; i < tempVertix.length; i++){
tempVertix[i] = new vector[vertix[i].length];
for(int j = 0; j < tempVertix[i].length; j++){
tempVertix[i][j] = vertix[i][j].add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
}
}
pastes[0].update(tempVertix[0]);
if(pastes[0].visible){
for(int i = 0; i < 448; i++)
pastes[0].innerPaste[i].update(tempVertix[i+1]);
}
for(int i = 1; i < 25; i++)
pastes[i].update(tempVertix[i+448]);
//update boundary
vector[][] tempBound = new vector[6][4];
for(int i = 0; i < 6; i++){
for(int j = 0; j < 4; j++){
tempBound[i][j] = bound[i][j].add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
}
}
for(int i = 0; i < 6; i ++)
boundary[i].update(tempBound[i]);
//update realcentre;
realCentre = put(14,8,8).add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
}
private void createVertix(){
// must add vertix in a clockwise manner
int polygonIndex = 0;
// create desk up surface(detailed light effect)
vertix[polygonIndex] = new vector[]{put(0,16,16),put(28,16,16),put(28,16,0), put(0,16,0)};
polygonIndex++;
for(int i = 0; i < 16; i++){
for(int j = 0; j < 28; j++){
vertix[polygonIndex] = new vector[]{put(j, 16, 16 - i),
put(j+1, 16, 16 - i),
put(j+1, 16, 15 - i),
put(j, 16, 15 - i)};
polygonIndex++;
}
}
// create desk up surface
vertix[polygonIndex] = new vector[]{put(0,16,0), put(28,16,0), put(28,15,0), put(0,15,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(28,16,0), put(28,16,16), put(28,15,16), put(28,15,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(28,16,16), put(0,16,16), put(0,15,16), put(28,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(0,16,16), put(0,16,0), put(0,15,0), put(0,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(0,15,0), put(28,15,0), put(28,15,16), put(0,15,16)};
polygonIndex++;
//create desk legs(left)
vertix[polygonIndex] = new vector[]{put(1,15,0), put(1,0,0), put(1,0,16), put(1,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(2,15,16), put(2,0,16), put(2,0,0), put(2,15,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(1,15,0), put(2,15,0), put(2,0,0), put(1,0,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(1,0,16), put(2,0,16), put(2,15,16), put(1,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(1,0,0), put(2,0,0), put(2,0,16), put(1,0,16)};
polygonIndex++;
//create desk legs(right)
vertix[polygonIndex] = new vector[]{put(26,15,0), put(26,0,0), put(26,0,16), put(26,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(27,15,16), put(27,0,16), put(27,0,0), put(27,15,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(26,15,0), put(27,15,0), put(27,0,0), put(26,0,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(26,0,16), put(27,0,16), put(27,15,16), put(26,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(26,0,0), put(27,0,0), put(27,0,16), put(26,0,16)};
polygonIndex++;
//create desk legs(middle)
vertix[polygonIndex] = new vector[]{put(19,15,0), put(19,0,0), put(19,0,16), put(19,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(20,15,16), put(20,0,16), put(20,0,0), put(20,15,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(19,15,0), put(20,15,0), put(20,0,0), put(19,0,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(19,0,16), put(20,0,16), put(20,15,16), put(19,15,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(19,0,0), put(20,0,0), put(20,0,16), put(19,0,16)};
polygonIndex++;
// create lower surface
vertix[polygonIndex] = new vector[]{put(20,4,0), put(26,4,0), put(26,3,0), put(20,3,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(20,3,16), put(26,3,16), put(26,4,16), put(20,4,16)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(20,4,0), put(20,4,16), put(26,4,16), put(26,4,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(26,3,0), put(26,3,16), put(20,3,16), put(20,3,0)};
polygonIndex++;
}
private vector put(double x, double y, double z){
return centre.add(iDirection.scale(x)).add(jDirection.scale(y)).add(kDirection.scale(z));
}
private void makePaste(){
pastes[0] = new paste(vertix[0], new Color(255, 207, 136), 0);
pastes[0].innerPaste = new paste[448];
for(int i = 0; i < 448; i++){
pastes[0].innerPaste[i] = new paste(vertix[i+1], new Color(255, 207, 136),1);
}
for(int i = 449; i < 453; i++){
pastes[i - 448] = new paste(vertix[i], new Color(50, 50, 50), 1);
}
//452~453
pastes[5] = new paste(vertix[453], new Color(255, 207, 136), 1);
//453~458
pastes[6] = new paste(vertix[454], new Color(255, 207, 136), 0);
pastes[7] = new paste(vertix[455], new Color(255, 207, 136), 0);
pastes[8] = new paste(vertix[456], new Color(75, 75, 75), 1);
pastes[9] = new paste(vertix[457], new Color(75, 75, 75), 1);
pastes[10] = new paste(vertix[458], new Color(75, 75, 75), 1);
//458~463
pastes[11] = new paste(vertix[459], new Color(255, 207, 136), 0);
pastes[12] = new paste(vertix[460], new Color(255, 207, 136), 0);
pastes[13] = new paste(vertix[461], new Color(75, 75, 75), 1);
pastes[14] = new paste(vertix[462], new Color(75, 75, 75), 1);
pastes[15] = new paste(vertix[463], new Color(75, 75, 75), 1);
//463~468
pastes[16] = new paste(vertix[464], new Color(255, 207, 136), 0);
pastes[17] = new paste(vertix[465], new Color(255, 207, 136), 0);
pastes[18] = new paste(vertix[466], new Color(75, 75, 75), 1);
pastes[19] = new paste(vertix[467], new Color(75, 75, 75), 1);
pastes[20] = new paste(vertix[468], new Color(75, 75, 75), 1);
//468~472
pastes[21] = new paste(vertix[469], new Color(75, 75, 75), 1);
pastes[22] = new paste(vertix[470], new Color(75, 75, 75), 1);
pastes[23] = new paste(vertix[471], new Color(255, 207, 136), 1);
pastes[24] = new paste(vertix[472], new Color(255, 207, 136), 1);
}
public void createBoundary(){
bound[0] = new vector[]{put(0,0,0), put(0,0,16), put(0,16,16), put(0,16,0)};
boundary[0] = new paste(bound[0], Color.green, 1);
bound[1] = new vector[]{put(0,16,16), put(28,16,16), put(28,16,0), put(0,16,0)};
boundary[1] = new paste(bound[1], Color.gray, 1);
bound[2] = new vector[]{put(0,0,0), put(0,16,0), put(28,16,0), put(28,0,0)};
boundary[2] = new paste(bound[2], Color.green, 1);
bound[3] = new vector[]{put(28,16,16), put(0,16,16), put(0,0,16), put(28,0,16)};
boundary[3] = new paste(bound[3], Color.green, 1);
bound[4] = new vector[]{put(0,0,0), put(28,0,0), put(28,0,16), put(0,0,16)};
boundary[4] = new paste(bound[4], Color.green, 1);
bound[5] = new vector[]{put(28,16,16), put(28,0,16), put(28,0,0), put(28,16,0)};
boundary[5] = new paste(bound[5], Color.green, 1);
}
public paste[] getPolygon(){
return pastes;
}
public paste[] getBoundary(){
return boundary;
}
public vector getCentre(){
return realCentre;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -