Overview 1. Define a class named Point, used to represent a point in a 3D space. 2. Define a class named Face, used to represent an equilateral triangle. 3. Define a class named Tetrahedron, used to represent a regular tetrahedron. 4. Define exception classes FaceException and TetrahedronException, which shall be used to signal improper values and impossible actions relating to the above three classes. 5. Write a class named E3Tester that performs unit testing for the above classes. 6. Prepare the assignment for submission and submit it through Blackboard Rules a) You are not allowed to import anything or use the fully qualified path to bypass this restriction. b) You're not allowed to add any public methods other than the ones listed in the specs below. c) You're not allowed to add any instance/class variables (not even private) other than the ones listed in the specs below. Face It represents a face of a tetrahedron (i.e. an equilateral triangle) that has the following members: • Fields for three points: a, b, c • A constructor that initializes the three points of the face Warning: The three points can be in any order! The face cannot have a zero area. If this happens, the constructor must raise a FaceException with the message A face can't have a zero area If the three points do not form an equilateral triangle, the constructor raises a FaceException with the message Points must be equidistant • An override of method toString that returns a string in the form [a-b-c] • An override of method equals that returns true only if all the points of the Face are equal. • A method public boolean adjacent (Face other) that returns true only if the Face has a common edge with another Face. • A method public double edge() that calculates the length of the edge of the Face. • A method public double area() that calculates the area of the Face.