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; } }