Figure has **array of Point, array of sides, array of angles, a bound**.

Figure setPoints updateSides, updateAngles, updateBound.

Figure updateSides calculates **sides (using distance between two points)**.

Figure updateAngles calculates **innerAngles (using innerAngle between two vectors)**.

Figure updateBound calculates **bound (using findBound – xmin,ymin,xmax,ymax of points)**.

Triangle getAdditionalUserInput gets **3 Points and setPoints (triangle’s points, sides, angles, bound).**

Quadrilateral getAdditionalUserInput gets **4 Points and setPoints (quadrilateral’s points, sides, angles, bound).**

Triangle perimeter() = sides[0] + sides[1] + sides[2]

Triangle area() = sides[0] * sides[1] * Math.sin(Math.toRadians(angles[1])) / 2.0

Quadrilateral perimeter() = sides[0] + sides[1] + sides[2] + sides[3]

Trapezoid setPoints also update top, bottom, height

Trapezoid area() = (top + bottom) * height / 2.0

Kite setPoints also update diagonal1 & diagonal2

Kite area() = diagonal1 * diagonal2 / 2.0

Rhombus area() is the same as Kite area()

Rectangle area() = sides[0] * sides[1]

Square area() is the same as Rectangle area()