//
// $Id: MyPolygon.java,v 1.1 1998/08/03 16:00:22 min Exp min $
//

package Graphics;

import java.lang.*;
import java.awt.*;


public class MyPolygon
{
  private static final int MAX_POINTS = 20;
  private int nr_points;
  private Vector points[] = new Vector[MAX_POINTS];
  private Vector normal;
  private boolean closed = true;
  Vector Center=new Vector(0,0,0);

  public void rotate_x(Matrix t,Matrix r)
  {


     normal=r.vec_postmultiply(normal);



      int i=0;
      for(i=0;i<nr_points;i++)
      {
        points[i]=t.vec_postmultiply(points[i]);
      }
      Center=t.vec_postmultiply(Center);
      
    }

     public void rotate_y(Matrix t,Matrix r)
  {

    normal=r.vec_postmultiply(normal);


      int i=0;
      for(i=0;i<nr_points;i++)
      {
        points[i]=t.vec_postmultiply(points[i]);


      }

       Center=t.vec_postmultiply(Center);


    }

    public void rotate_z(Matrix t,Matrix r)
  {

    normal=r.vec_postmultiply(normal);


      int i=0;
      for(i=0;i<nr_points;i++)
      {
        points[i]=t.vec_postmultiply(points[i]);
      }

      
       Center=t.vec_postmultiply(Center);

      

    }

  public void translate(Matrix t)
  {




      int i=0;
      for(i=0;i<nr_points;i++)
      {
        points[i]=t.vec_postmultiply(points[i]);
      }

      
       Center=t.vec_postmultiply(Center);

      

    }






  public Vector return_center()
  {
      return Center.divided_by(nr_points);
      
  }

  
  
  public MyPolygon()
  {
    nr_points = 0;
  }  // constructor
  
  

  public void set_closed(boolean new_value)
  {
    closed = new_value;
  }  // set_closed



  public boolean get_closed()
  {
    return closed;
  }  // get_closed


  
  public void addPoint(Vector P)
  {

    points[nr_points] = new Vector(P);
    nr_points++;
    if (nr_points == 3) {  // enough points to compute normal
      Vector A = points[1].subtract(points[0]);
      Vector B = points[2].subtract(points[1]);
      normal = A.cross_product(B);
      normal.normalize();
    }

    Center=Center.add(P);
    
  }  // addPoint
  
  
  
  public void addPoint(double x, double y)
  {
    Vector P = new Vector(x, y);
    addPoint(P);
  }  // addPoint
  
  
  
  public void addPoint(double x, double y, double z)
  {
    Vector P = new Vector(x, y, z);
    addPoint(P);
  }  // addPoint
  


  public Vector get_point(int index)
  {
    return points[index];
  }  // getPoint
  
  

  public Vector get_normal()
  {
    return normal;
  }  // get_normal



  public int get_nr_points()
  {
    return nr_points;
  }  // get_nr_points
  
  
}  // MyPolygon class

