package ruum;
import java.lang.Math;
import java.awt.Graphics;

public class Nelinurk extends Ese{
public Punkt punkt[]=new Punkt[4];
public Nelinurk(Punkt pt1, Punkt pt2, Punkt pt3, Punkt pt4){
punkt[0]=(Punkt)pt1.clone(); punkt[1]=(Punkt)pt2.clone();
punkt[2]=(Punkt)pt3.clone(); punkt[3]=(Punkt)pt4.clone();
}

public Nelinurk(Punkt pt1, Punkt pt2, Punkt pt3){
punkt[0]=(Punkt)pt1.clone(); punkt[1]=(Punkt)pt2.clone();
punkt[3]=(Punkt)pt3.clone();
punkt[2]=Punkt.liida(punkt[1], Punkt.lahuta(punkt[3], punkt[0]));
}

public void liida(Punkt pt){
 for(int i=0; i<4; i++){
  punkt[i].x+=pt.x; punkt[i].y+=pt.y; punkt[i].z+=pt.z;}
}

public void lahuta(Punkt pt){
 for(int i=0; i<4; i++){
  punkt[i].x-=pt.x; punkt[i].y-=pt.y; punkt[i].z-=pt.z;}
}


public  static void punktette(Punkt p1, Punkt p2){
 if(!(p1.z>0&p2.z>0)){
  if(p1.z>0&p2.z<=0){
System.out.println("p1="+p1.toString()+" p2="+p2.toString());
   p2=Punkt.liida(p2, Punkt.korruta(Punkt.lahuta(p1, p2),
                (double)(5-p2.z)/(p1.z-p2.z)));
System.out.println("p1="+p1.toString()+" p2="+p2.toString());

  } else
  if(p1.z>0&p2.z<=0){
   p1=Punkt.liida(p1, Punkt.korruta(Punkt.lahuta(p2, p1),
                (double)(5-p1.z)/(p2.z-p1.z)));
   }
 }
}

public void ette(){
 if(!(punkt[1].z>0&punkt[2].z>0)){
  if(punkt[1].z>0&punkt[2].z<=0){
//System.out.println("punkt[1]="+punkt[1].toString()+" punkt[2]="+punkt[2].toString());
   punkt[2]=Punkt.liida(punkt[2], Punkt.korruta(Punkt.lahuta(punkt[1], punkt[2]),
  (double)(10+Math.abs(punkt[2].x/100)+Math.abs(punkt[2].y/100)-punkt[2].z)/
          (punkt[1].z-punkt[2].z)));
//System.out.println("punkt[1]="+punkt[1].toString()+" punkt[2]="+punkt[2].toString());

  } else
  if(punkt[1].z>0&punkt[2].z<=0){
   punkt[1]=Punkt.liida(punkt[1], Punkt.korruta(Punkt.lahuta(punkt[2], punkt[1]),
   (double)(10+Math.abs(punkt[1].x/100)+Math.abs(punkt[1].y/100)-punkt[1].z)/
           (punkt[2].z-punkt[1].z)));
   }
 }

 if(!(punkt[0].z>0&punkt[3].z>0)){
  if(punkt[0].z>0&punkt[3].z<=0){
//System.out.println("punkt[0]="+punkt[0].toString()+" punkt[3]="+punkt[3].toString());
   punkt[3]=Punkt.liida(punkt[3], Punkt.korruta(Punkt.lahuta(punkt[0], punkt[3]),
  (double)(10+Math.abs(punkt[3].x/100)+Math.abs(punkt[3].y/100)-punkt[3].z)/(punkt[0].z-punkt[3].z)));
//System.out.println("punkt[0]="+punkt[0].toString()+" punkt[3]="+punkt[3].toString());

  } else
  if(punkt[0].z>0&punkt[3].z<=0){
   punkt[0]=Punkt.liida(punkt[0], Punkt.korruta(Punkt.lahuta(punkt[3], punkt[0]),
   (double)(10+Math.abs(punkt[0].x/100)+Math.abs(punkt[0].y/100)-punkt[0].z)/(punkt[3].z-punkt[0].z)));
   }
 }

}


public void joonista(Graphics g){
int i;
boolean ees=true;
int xd[]=new int[4];
int yd[]=new int[4];
Nelinurk nn=(Nelinurk)this.clone();
//for(i=0; i<4; i++)pd[i]=(Punkt)punkt[i].clone();
for(i=0; i<4; i++){if(nn.punkt[i].z<=0)ees=false;}
//System.out.println(nn.toString());
//if(!ees){punktette(pd[0], pd[3]); punktette(pd[1], pd[2]);}
if(!ees)nn.ette();
//System.out.println(nn.toString());
ees=true; for(i=0; i<4; i++){if(nn.punkt[i].z<=0)ees=false;}
if(ees){
  for(i=0; i<4; i++)xd[i]=(int)(nn.punkt[i].x*grtegur/(float)nn.punkt[i].z);
  for(i=0; i<4; i++)yd[i]=-(int)(nn.punkt[i].y*grtegur/(float)nn.punkt[i].z);
// for(i=0; i<4; i++) System.out.println("x"+i+"="+xd[i]+" y"+i+"="+yd[i]);
  g.fillPolygon(xd, yd, 4);
  g.drawLine(xd[0], yd[0], xd[3], yd[3]);
 }
}

public void joonista(Graphics g, Punkt vp){
 Nelinurk nn=(Nelinurk)this.clone();
 nn.lahuta(vp);
 nn.joonista(g);
}

public Object clone(){
Nelinurk nn=new Nelinurk(punkt[0], punkt[1], punkt[2], punkt[3]);
 return nn;
}

public String toString(){
String s="";
int i;
for(i=0; i<4; i++){s=s+punkt[i].toString()+" ";}
return s;
}

}

