public class PointComp { public Point3D point = new Point3D(0,0,0); private final Point3D rotatedPoint = new Point3D(0,0,0); private boolean isRotatedPointValid = true; private final Point2D projectedPoint = new Point2D(0,0); private boolean isProjectedPointValid = true; public PointComp(double _x, double _y, double _z){ point.x = _x; point.y = _y; point.z = _z; } public void invalidate(){ isProjectedPointValid = false; isRotatedPointValid = false; } public Point3D getRotatedPoint(){ if(!isRotatedPointValid){ throw new RuntimeException("Rotated point not initialised"); } return rotatedPoint; } public Point2D getProjectedPoint(){ if(!isRotatedPointValid){ throw new RuntimeException("Projected point not initialised"); } return projectedPoint; } public void setRotatedPoint(Matrix camMatrix){ if(!isRotatedPointValid) { camMatrix.multiplyPoint3to(point, rotatedPoint); isRotatedPointValid = true; } } public void setProjectedPoint(double FPDis, int scrX, int scrY){ if(!isProjectedPointValid) { rotatedPoint.projectOn(FPDis, scrX, scrY, projectedPoint); isProjectedPointValid = true; } } }