📄 chair.java
字号:
import java.awt.*;
// a static chair model
public class chair 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 chair(vector centre){
this.centre = centre;
realCentre = new vector(centre.x, centre.y, centre.z);
NoOfPolygons = 40;
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[NoOfPolygons];
bound = new vector[6][4];
boundary = new paste[6];
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);
}
}
for(int i = 0; i < NoOfPolygons; i++)
pastes[i].update(tempVertix[i]);
//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(9,18,8).add(change).rotate_XZ(xzRotate).rotate_YZ(yzRotate);
}
private void createVertix(){
// must add vertix in a clockwise manner
int polygonIndex = 0;
// construct chair legs
double x = 1; double y = 7; double z = 1;
vector v = new vector(0.25, 2, 0);
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(0,y,0)), v.add(put(x,y,0)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)) ,v.add(put(0,0,z)), v.add(put(0,y,z)), v.add(put(0,y,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(x,0,0)), v.add(put(x,0,z)), v.add(put(0,0,z))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,0)), v.add(put(x,y,z)), v.add(put(x,0,z)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,z)), v.add(put(0,y,z)), v.add(put(0,0,z)), v.add(put(x,0,z))};
polygonIndex++;
v = new vector(6.75, 2, 0);
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(0,y,0)), v.add(put(x,y,0)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)) ,v.add(put(0,0,z)), v.add(put(0,y,z)), v.add(put(0,y,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(x,0,0)), v.add(put(x,0,z)), v.add(put(0,0,z))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,0)), v.add(put(x,y,z)), v.add(put(x,0,z)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,z)), v.add(put(0,y,z)), v.add(put(0,0,z)), v.add(put(x,0,z))};
polygonIndex++;
v = new vector(7.75, 2, 7.75);
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(0,y,0)), v.add(put(x,y,0)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)) ,v.add(put(0,0,z)), v.add(put(0,y,z)), v.add(put(0,y,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(x,0,0)), v.add(put(x,0,z)), v.add(put(0,0,z))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,0)), v.add(put(x,y,z)), v.add(put(x,0,z)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,z)), v.add(put(0,y,z)), v.add(put(0,0,z)), v.add(put(x,0,z))};
polygonIndex++;
v = new vector(-0.75, 2, 7.75);
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(0,y,0)), v.add(put(x,y,0)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)) ,v.add(put(0,0,z)), v.add(put(0,y,z)), v.add(put(0,y,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(x,0,0)), v.add(put(x,0,z)), v.add(put(0,0,z))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,0)), v.add(put(x,y,z)), v.add(put(x,0,z)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,z)), v.add(put(0,y,z)), v.add(put(0,0,z)), v.add(put(x,0,z))};
polygonIndex++;
//construct middle part of the chair
vertix[polygonIndex] = new vector[]{put(0,10.5,0), put(8,10.5,0), put(8,9,0), put(0,9,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(0,10.5,0), put(0,9,0), put(-1,9,9), put(-1,10.5,9)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(8,10.5,0), put(9,10.5,9), put(9,9,9), put(8,9,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(9,10.5,9), put(-1,10.5,9), put(-1,9,9), put(9,9,9)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(9,10.5,9), put(8,10.5,0), put(0,10.5,0), put(-1,10.5,9)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(-1,9,9),put(0,9,0),put(8,9,0),put(9,9,9)};
polygonIndex++;
//construct the upper part of the chair
y = 2.5; z = 0.8;
v = new vector(0.25, 10.6, 0.1);
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(0,y,0)), v.add(put(x,y,0)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)) ,v.add(put(0,0,z)), v.add(put(0,y,z)), v.add(put(0,y,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,0)), v.add(put(x,y,z)), v.add(put(x,0,z)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,z)), v.add(put(0,y,z)), v.add(put(0,0,z)), v.add(put(x,0,z))};
polygonIndex++;
v = new vector(6.75, 10.6, 0.2);
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)), v.add(put(0,y,0)), v.add(put(x,y,0)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(0,0,0)) ,v.add(put(0,0,z)), v.add(put(0,y,z)), v.add(put(0,y,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,0)), v.add(put(x,y,z)), v.add(put(x,0,z)), v.add(put(x,0,0))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{v.add(put(x,y,z)), v.add(put(0,y,z)), v.add(put(0,0,z)), v.add(put(x,0,z))};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(-0.5,13.1,0), put(-0.5,18.1,0), put(8.5,18.1,0), put(8.5,13.1,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(-0.5,18.1,0), put(-0.5,18.1,1), put(8.5,18.1,1), put(8.5,18.1,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(-0.5,18.1,0), put(-0.5,13.1,0), put(-0.5,13.1,1), put(-0.5,18.1,1)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(-0.5,18.1,1), put(-0.5,13.1,1), put(8.5,13.1,1), put(8.5,18.1,1)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(8.5,18.1,1), put(8.5,13.1,1), put(8.5,13.1,0), put(8.5,18.1,0)};
polygonIndex++;
vertix[polygonIndex] = new vector[]{put(8.5,13.1,1), put(-0.5,13.1,1), put(-0.5,13.1,0), put(8.5,13.1,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));
}
public paste[] getPolygon(){
return pastes;
}
public void createBoundary(){
bound[0] = new vector[]{put(0,0,0), put(0,0,8), put(0,18,8), put(0,18,0)};
boundary[0] = new paste(bound[0], Color.red, 1);
bound[1] = new vector[]{put(0,18,8), put(9,18,8), put(9,18,0), put(0,18,0)};
boundary[1] = new paste(bound[1], Color.blue, 1);
bound[2] = new vector[]{put(0,0,0), put(0,18,0), put(9,18,0), put(9,0,0)};
boundary[2] = new paste(bound[2], Color.green, 1);
bound[3] = new vector[]{put(9,18,8), put(0,18,8), put(0,0,8), put(9,0,8)};
boundary[3] = new paste(bound[3], Color.green, 1);
bound[4] = new vector[]{put(0,0,0), put(9,0,0), put(9,0,8), put(0,0,8)};
boundary[4] = new paste(bound[4], Color.green, 1);
bound[5] = new vector[]{put(9,18,8), put(9,0,8), put(9,0,0), put(9,18,0)};
boundary[5] = new paste(bound[5], Color.red, 1);
}
public paste[] getBoundary(){
return boundary;
}
private void makePaste(){
for(int i = 0; i < 20; i++)
pastes[i] = new paste(vertix[i], new Color(232, 154, 68), 2);
for(int i = 0; i < 6; i++)
pastes[20 + i] = new paste(vertix[20 + i], Color.red, 2 );
for(int i = 0; i < 8; i++)
pastes[26 + i] = new paste(vertix[26 + i], new Color(232, 154, 68), 2);
for(int i = 0; i < 6; i++)
pastes[34 + i] = new paste(vertix[26 + i], Color.red, 2);
}
public vector getCentre(){
return realCentre;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -