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

📄 cuboid.java

📁 坦克小战网络版
💻 JAVA
字号:
import java.awt.*;

public class cuboid{
	public double x, y, z;
	private int type;
	public int width, length, height, distanceToGround, distanceToCentre;
	public vector centre, normal, gradient, direction2D, direction3D, direction3DCrossNor;
	private surface Surface;
	public vector[] points;

	public cuboid(surface Surface, int xPos, int yPos, int distanceToGround, int distanceToCentre, int w, int l, int h, int type){
		x = xPos;
		y = yPos;
		this.type = type;
		this.distanceToGround = distanceToGround;
		this.distanceToCentre = distanceToCentre;
		width = w; length = l; height = h;
		points = new vector[8];
		this.Surface = Surface;
		direction2D = new vector(-47, -30);
		direction2D = direction2D.unit();
		defindStatus();
	}

	public void draw(Graphics g, Color colour){
		g.setColor(colour);
		g.drawLine(points[0].getX(), points[0].getY(), points[1].getX(), points[1].getY());
		g.drawLine(points[0].getX(), points[0].getY(), points[2].getX(), points[2].getY());
		g.drawLine(points[0].getX(), points[0].getY(), points[4].getX(), points[4].getY());
		g.drawLine(points[3].getX(), points[3].getY(), points[2].getX(), points[2].getY());
		g.drawLine(points[3].getX(), points[3].getY(), points[7].getX(), points[7].getY());
		g.drawLine(points[3].getX(), points[3].getY(), points[1].getX(), points[1].getY());
		g.drawLine(points[6].getX(), points[6].getY(), points[2].getX(), points[2].getY());
		g.drawLine(points[6].getX(), points[6].getY(), points[7].getX(), points[7].getY());
		g.drawLine(points[6].getX(), points[6].getY(), points[4].getX(), points[4].getY());
		g.drawLine(points[5].getX(), points[5].getY(), points[1].getX(), points[1].getY());
		g.drawLine(points[5].getX(), points[5].getY(), points[4].getX(), points[4].getY());
		g.drawLine(points[5].getX(), points[5].getY(), points[7].getX(), points[7].getY());
		g.setColor(Color.green);
		points[4].draw(g);
		points[6].draw(g);
	}

	public void defindStatus(){
		double fx = Surface.fx(x,y), fy = Surface.fy(x, y);
		z = Surface.evaluate(x,y);
		normal = new vector(fx, fy, -1);
		normal = normal.unit();
		gradient = new vector(fx, fy);
		centre = new vector(x, y, z);
		calculateDirection();
	}

	public void calculateDirection(){
		direction3D = new vector(direction2D.get_x(), direction2D.get_y(), gradient.dot(direction2D));
		direction3D = direction3D.unit();
		direction3DCrossNor = direction3D.cross(normal);
		direction3DCrossNor = direction3DCrossNor.unit();
		addPoints();
	}

	public void addPoints(){
		if(type == 2) //tower
			centre = centre.add(normal.scale(-distanceToGround)).add(direction3D.scale(-distanceToCentre));

		points[0] = centre.add(direction3DCrossNor.scale(width/2)).add(direction3D.scale(length/2)).add(normal.scale(-height));
		points[1] = centre.add(direction3DCrossNor.scale(width/2)).add(direction3D.scale(-length/2)).add(normal.scale(-height));
		points[2] = centre.add(direction3DCrossNor.scale(-width/2)).add(direction3D.scale(length/2)).add(normal.scale(-height));
		points[3] = centre.add(direction3DCrossNor.scale(-width/2)).add(direction3D.scale(-length/2)).add(normal.scale(-height));
		points[4] = centre.add(direction3DCrossNor.scale(width/2)).add(direction3D.scale(length/2));
		points[5] = centre.add(direction3DCrossNor.scale(width/2)).add(direction3D.scale(-length/2));
		points[6] = centre.add(direction3DCrossNor.scale(-width/2)).add(direction3D.scale(length/2));
		points[7] = centre.add(direction3DCrossNor.scale(-width/2)).add(direction3D.scale(-length/2));

		if(type == 1){ // body
			points[4] = centre.add(direction3DCrossNor.scale(width/2)).add(direction3D.scale(length/2 - 4));
			points[6] = centre.add(direction3DCrossNor.scale(-width/2)).add(direction3D.scale(length/2 - 4));
			points[5] = centre.add(direction3DCrossNor.scale(width/2)).add(direction3D.scale(-length/2 + 2));
			points[7] = centre.add(direction3DCrossNor.scale(-width/2)).add(direction3D.scale(-length/2 + 2));
		}
	}

	public void rotate(double angle){
		direction2D = direction2D.rotate2D(angle);
		direction2D = direction2D.unit();
		defindStatus();
	}

	public void move(double distance){
		x = x + direction2D.scale(distance).get_x();
		y = y + direction2D.scale(distance).get_y();
		defindStatus();
	}


}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -