-
W. Spencer Smith authoredW. Spencer Smith authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Box3D.java 4.92 KiB
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
@mainpage The mainpage documentation for Box3D.
*/
/**
* @file Box3D.java
* @title Box3D
* @author Mustafa Haddara
* @date 1/10/2016
* @brief This class represents a rectangle.
* @details This class represents a rectangle as (x,y,z) coordinate representing the
* front-facing top-left corner, and a (w,h,d) tuple representing the width, height and depth.
* @code
* Box3D b = new Box3D( new int[] {1,1,1}, new int[] {2,2,2});
* System.out.println(b.getVolume());
* System.out.println(b.getSurfaceArea());
* @endcode
* @todo Add test cases for the functions.
*/
package box3d;
/* 3D Box class
* Author: Mustafa Haddara
*
* This class represents a rectangle as (x,y,z) coordinate representing the
* front-facing top-left corner, and a (w,h,d) tuple representing the width,
* height, depth
*/
public class Box3D {
/**
* Face enums
*/
enum Face {
FRONT, /**< enum value FRONT. */
TOP, /**< enum value TOP. */
SIDE /**< enum value SIDE. */
}
/**
* a private variable for the (x,y,z) coordinate.
*/
private int[] frontTopLeftCorner;
/**
* a private variable for the width,
* height and depth.
*/
private int[] dimensions;
/**
* @brief Constructor for Box3D
* @details Constructor accepts two parameters for the top left corner and size dimensions.
* @param corner (x,y,z) tuple for the top left corner.
* @param size (w,h,d) tuple containing the width, height and depth.
*/
public Box3D (int[] corner, int[] size) {
if(corner.length != 3 || size.length != 3) {
throw new RuntimeException("Invalid argument size");
}
this.frontTopLeftCorner = corner;
this.dimensions = size;
}
/**
* @brief returns the front top left corner tuple.
* @return frontTopLeftCorner
*/
public int[] getFrontTopLeftCorner() {
return this.frontTopLeftCorner;
}
/**
* @brief sets the front top left corner.
* @param newCorner Front top left corner coordinates.
*/
public void setFrontTopLeftCorner(int[] newCorner) {
this.frontTopLeftCorner = newCorner;
}
/**
* @brief returns width, height and depth.
* @return dimensions
*/
public int[] getDimensions() {
return this.dimensions;
}
/**
* @brief sets width, height and depth.
* @param newSize dimensions
*/
public void setDimensions(int[] newSize) {
this.dimensions = newSize;
}
/**
* @brief This function sets the dimensions of the given face.
* @author Mustafa Haddara
* @param face Face of the box: FRONT or TOP or SIDE.
* @return dimension of the given face.
* @date 1/10/2016
*/
public int[] getDimensionsOfFace(Face face) {
int[] dim = new int[3];
if (face == Face.FRONT) {
dim = new int[] { this.dimensions[0], this.dimensions[1] };
} else if (face == Face.TOP) {
dim = new int[] { this.dimensions[0], this.dimensions[2] };
} else if (face == Face.SIDE) {
dim = new int[] { this.dimensions[1], this.dimensions[2] };
}
return dim;
}
/**
* @brief This function calculates the area of the given face.
* @author Mustafa Haddara
* @param face Face of the box: FRONT or TOP or SIDE.
* @return Area of the given face.
* @date 1/10/2016
*/
public int getAreaOfFace(Face face) {
int[] dim = this.getDimensionsOfFace(face);
return dim[0] * dim[1];
}
/**
* @brief This function calculates the perimeter of the given face.
* @author Mustafa Haddara
* @param face Face of the box: FRONT or TOP or SIDE.
* @return Perimeter of the given face.
* @date 1/10/2016
*/
public int getPerimeterOfFace(Face face) {
int[] dim = this.getDimensionsOfFace(face);
return 2 * (dim[0] + dim[1]);
}
/**
* @brief This function calculates the volume of the rectangle.
* @author Mustafa Haddara
* @return Volume of the rectangle.
* @date 1/10/2016
*/
public int getVolume() {
int width = this.dimensions[0];
int height = this.dimensions[1];
int depth = this.dimensions[2];
return width * height * depth;
}
/**
* @brief This function calculates the surface area for the rectangle.
* @author Mustafa Haddara
* @return Surface area of the rectangle.
* @date 1/10/2016
*/
public int getSurfaceArea() {
int surfaceArea = 0;
for (Face face: Face.values()) {
surfaceArea += (2* this.getAreaOfFace(face));
}
return surfaceArea;
}
/**
* @brief Example of the usage.
* @author Mustafa Haddara
* @date 1/10/2016
*/
public static void main(String[] args) {
Box3D b = new Box3D( new int[] {1,1,1}, new int[] {2,2,2});
System.out.println(b.getVolume());
System.out.println(b.getSurfaceArea());
}
}