/******************************************************************************
* Name: Donna Gabai
* NetID: dgabai
* Precept: P99
*
* Description: An object class to represent a 2D regular polygon.
*
* Dependencies: StdDraw
****************************************************************************/
import java.awt.Color;
public class Ngon {
// instance variables
private int n; // number of sides
private double r; // center to vertex distance
private double x; // center x-coordinate
private double y; // center y-coordinate
private Color c; // color of the polygon
private double angle; // interior angle in radians
// constructor for N-gon with radius r, centered at (x, y), color c
public Ngon(int n, double r, double x, double y, Color c) {
// put the values of the arguments into the instance variables
this.n = n;
this.r = r;
this.x = x;
this.y = y;
this.c = c;
// set the interior angle
angle = 2 * Math.PI / n;
}
// constructor for N-gon with radius r, centered at (0, 0), black
public Ngon(int n, double r) {
// put the values of the arguments into the instance variables
this.n = n;
this.r = r;
// "this" is optional below
this.x = 0;
this.y = 0;
this.c = StdDraw.BLACK;
// set the interior angle
angle = 2 * Math.PI / n;
}
// sets the pen color and draws the diamond
public void drawFilled() {
// compute the vertices and pack into x and y arrays
double[] xPts = new double[n];
double[] yPts = new double[n];
for (int i = 0; i < n; i++) {
xPts[i] = x + r * Math.cos(i * angle);
yPts[i] = y + r * Math.sin(i * angle);
}
// set pen color
StdDraw.setPenColor(c);
// draw
StdDraw.filledPolygon(xPts, yPts);
}
// returns the area of the polygon: area = 1/2 * (r squared)*n*sin(angle)
public double area() {
double a = 0.5 * r * r * n * Math.sin(angle);
return a;
}
// merges with another Ngon with the same number of sides
public Ngon merge(Ngon that) {
if (this.n != that.n) return null;
// local variables for the new ngon
double r = this.r + that.r;
double x = (this.x + that.x) / 2.0;
double y = (this.y + that.y) / 2.0;
// average r, g, b values for the new color
int newR = (this.c.getRed() + that.c.getRed()) / 2;
int newG = (this.c.getGreen() + that.c.getGreen()) / 2;
int newB = (this.c.getBlue() + that.c.getBlue()) / 2;
// create the Color object
Color c = new Color(newR, newG, newB);
// create the new Ngon
Ngon newGon = new Ngon(n, r, x, y, c);
return newGon;
}
// NOTE: The provided main() does not test the second constructor.
public static void main(String[] args) {
// provided tests
StdDraw.setXscale(-1, 1); // set scale
StdDraw.setYscale(-1, 1); // in main()
Color red = StdDraw.RED;
Color blue = StdDraw.BLUE;
Ngon h1 = new Ngon(6, .3, -.6, .6, red);
Ngon h2 = new Ngon(6, .3, .6, -.6, blue);
Ngon h3 = h1.merge(h2);
h1.drawFilled();
h2.drawFilled();
h3.drawFilled();
System.out.println(h3.area());
// added tests for second constructor
Ngon diamond = new Ngon(4, .2);
diamond.drawFilled();
System.out.println(diamond.area()); //2*.2^2=.08
}
}