⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chair.java

📁 如果对java3D感兴趣的朋友
💻 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 + -