public class RegularPolygon implements RegularPolygonal
2: /**
3: * A class implementing the RegularPolygonal interface. This class represents
4: * a regular polygon (duh). It implements the getEdgeLength method from
5: * RegularPolygonal, the getNumberOfSides method from Polygonal, and the getArea
6: * and getPerimeter methods from Measurable.
7: *
8: * @author Mark Young (A00000000)
9: */
10: public class RegularPolygon implements RegularPolygonal {
12: private double sideLength;
13: private int numSides;
15: /**
16: * Create a regular polygon with the given measures.
17: *
18: * @param reqSides the number of sides
19: * @param reqLen the length of each side
20: */
21: public RegularPolygon(int reqSides, double reqLen) {
22: require("# of sides", reqSides > 2, reqSides);
23: require("side length", reqLen > 0.0, reqLen);
24: numSides = reqSides;
25: sideLength = reqLen;
26: }
28: @Override
29: public double getEdgeLength() {
30: return sideLength;
31: }
33: @Override
34: public int getNumberOfSides() {
35: return numSides;
36: }
38: @Override
39: public double getArea() {
40: double perimeter = getPerimeter();
41: double apothem = sideLength / Math.tan(Math.PI / numSides) / 2;
42: return perimeter * apothem / 2;
43: }
45: @Override
46: public double getPerimeter() {
47: return numSides * sideLength;
48: }
50: @Override
51: public String toString() {
52: return "Regular Polygon(" + numSides + ", " + sideLength + ")";
53: }
55: // ---------- private methods ---------- //
56: private static void require(String msg, boolean value, Object obj) {
57: if (!value) {
58: throw new IllegalArgumentException(msg + ": " + obj);
59: }
60: }
62: }