public class RegularPolygon extends PolygonElement {

  double cos, sin;

  RegularPolygon (PointElement A, PointElement B, int nVal) {
    dimension = 2;
    n = nVal;
    V = new PointElement[n];
    double theta = Math.PI * (n-2.0)/n;
    cos = Math.cos(theta);
    sin = Math.sin(theta);
    V[0] = A; V[1] = B;
    for (int i=2; i<n; ++i)
      V[i] = new PointElement();
  }

  RegularPolygon (LineElement AB, int nVal) {
    dimension = 2;
    n = nVal;
    V = new PointElement[n];
    double theta = Math.PI * (n-2.0)/n;
    cos = Math.cos(theta);
    sin = Math.sin(theta);
    V[0] = AB.A; V[1] = AB.B;
    for (int i=2; i<n; ++i)
      V[i] = new PointElement();
  }

  RegularPolygon (PointElement A, PointElement B, int nVal, int k) {
    dimension = 2;
    n = nVal;
    V = new PointElement[n];
    double theta = Math.PI * k*(n-2.0)/n;
    cos = Math.cos(theta);
    sin = Math.sin(theta);
    V[0] = A; V[1] = B;
    for (int i=2; i<n; ++i)
      V[i] = new PointElement();
  }

  RegularPolygon (LineElement AB, int nVal, int k) {
    dimension = 2;
    n = nVal;
    V = new PointElement[n];
    double theta = Math.PI * k*(n-2.0)/n;
    cos = Math.cos(theta);
    sin = Math.sin(theta);
    V[0] = AB.A; V[1] = AB.B;
    for (int i=2; i<n; ++i)
      V[i] = new PointElement();
  }


  protected void translate (double dx, double dy) {
    for (int i=2; i<n; ++i)
      V[i].translate(dx,dy);
  }

  protected void rotate (PointElement pivot, double ac, double as) {
    for (int i=2; i<n; ++i)
      V[i].rotate(pivot,ac,as);
  }

  protected void update() {
    for (int i=2; i<n; ++i) {
      V[i].x = V[i-2].x;
      V[i].y = V[i-2].y;
      V[i].rotate(V[i-1],cos,sin);
} } }

