ich hoffe ich bin hier richtig. und zwar bin ich gerade dabei ein 3D-anzeigeprogramm zu basteln. bevor jetzt jmd. auf java 3d verweisst - ich habe es mir bereits angesehen, aber ich möchte gerne eine version machen, die funktioniert ohne DAS der user etw installieren muss (natürlich außer java). mein problem ist, dass das alles so nicht hinkommen kann.
das ganze soll so funktionieren, das es in einem 2dimensionalem array polygone(4-eckige) definiert werden (ich habe jetzt erstmal eine fläche) zu jeder fläche gehören 4x x, y, und z koordinaten. dieses wird (erstmal) um die Y-Achse gedreht. ich glaube ich habe irgentwo etw vergessen, aber ich finde die stelle nicht
hoffe jmd hat die zeit und die lust mir zu helfen
Java:
/**
* @(#)ddhandlertest.java
*
* ddhandlertest Applet application
*
* @author Chloroplast
* @version 1.00 2012/3/8
*/
import java.awt.*;
import java.awt.Color.*;
import java.applet.*;
import java.awt.event.*;
public class ddhandlertest extends Applet implements AdjustmentListener{
int ddobject[][] = new int[13][1];
int performedDdobject[][];
int[] newObject = new int[13];
int allObjects = 1;
int pointsX[] = new int[4];
int pointsY[] = new int[4];
Scrollbar scroll;
int scrollwert;
public void init() {
BorderLayout B = new BorderLayout();
setLayout(B);
scroll = new Scrollbar(Scrollbar.HORIZONTAL,360,5,0,720);
add(scroll,BorderLayout.NORTH);
scroll.addAdjustmentListener(this);
initObject();
}
//--------------------Eventlistener------------------------------------------------------------------------------
public void adjustmentValueChanged(AdjustmentEvent e){ //// 3 /////
scrollwert = e.getValue()-360;
rotate(scrollwert);
repaint();}
//------------------------------------automatische ausführung----------------------------------------------------
public void rotate(int rot){
for(int cc=0;cc<allObjects;cc++){
newObject = turnY(ddobject[1][cc],ddobject[3][cc],ddobject[4][cc], ddobject[6][cc], ddobject[7][cc], ddobject[9][cc], ddobject[10][cc], ddobject[12][cc],rot);
}
}
//------------------------------------Zuweisung von werten--------------------------------------------------------
public void initObject(){
ddobject[0][0]=0;
ddobject[1][0]=60;
ddobject[2][0]=30;
ddobject[3][0]=0;//
ddobject[4][0]=60;
ddobject[5][0]=-30;
ddobject[6][0]=0;//
ddobject[7][0]=-60;
ddobject[8][0]=-30;
ddobject[9][0]=0;//
ddobject[10][0]=-60;
ddobject[11][0]=30;
ddobject[12][0]=0;}//
public void initPolObject(){
pointsX[0] = newObject[1]+200;
pointsX[1] = newObject[4]+200;
pointsX[2] = newObject[7]+200;
pointsX[3] = newObject[10]+200;
pointsY[0] = ddobject[2][0]+200;
pointsY[1] = ddobject[4][0]+200;
pointsY[2] = ddobject[8][0]+200;
pointsY[3] = ddobject[11][0]+200;
System.out.println(pointsX[0]+" bei "+pointsY[0]);
System.out.println(pointsX[1]+" bei "+pointsY[1]);
System.out.println(pointsX[2]+" bei "+pointsY[2]);
System.out.println(pointsX[3]+" bei "+pointsY[3]);
}
public int[] turnY(int x1 ,int z1,int x2, int z2, int x3,int z3, int x4, int z4, int rot){
System.out.println("um "+rot+" gedreht...");
double hyp1 = Math.sqrt(x1*x1+z1*z1);
double hyp2 = Math.sqrt(x2*x2+z2*z2);
double hyp3 = Math.sqrt(x3*x3+z3*z3);
double hyp4 = Math.sqrt(x4*x4+z4*z4);
double winkel1, winkel2, winkel3, winkel4;
if(x1<0 && z1>0)winkel1=rot*(-1)+Math.toDegrees(Math.atan(z1/x1));
else if(z1<0 && x1>0)winkel1=rot*(-1)+Math.toDegrees(Math.atan(z1/x1));
else winkel1=rot+Math.toDegrees(Math.atan(z1/x1));
if(x2<0 && z2>0)winkel2=rot*(-1)+Math.toDegrees(Math.atan(z2/x2));
else if(z2<0 && x2>0)winkel2=rot*(-1)+Math.toDegrees(Math.atan(z2/x2));
else winkel2=rot+Math.toDegrees(Math.atan(z2/x2));
if(x3<0 && z3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
else if(z3<0 && x3>0)winkel3=rot*(-1)+Math.toDegrees(Math.atan(z3/x3));
else winkel3=rot+Math.toDegrees(Math.atan(z3/x3));
if(x4<0 && z4>0)winkel4=rot*(-1)+Math.toDegrees(Math.atan(z4/x4));
else if(z4<0 && x4>0)winkel4=rot*(-1)+Math.toDegrees(Math.atan(z4/x4));
else winkel4=rot+Math.toDegrees(Math.atan(z4/x4));
int out[] = new int[13];
out[1]=(int)(Math.cos(Math.toRadians(winkel1))+hyp1);
out[4]=(int)(Math.cos(Math.toRadians(winkel2))+hyp2);
out[7]=(int)(Math.cos(Math.toRadians(winkel3))+hyp3);
out[10]=(int)(Math.cos(Math.toRadians(winkel4))+hyp4);
out[3]=(int)(Math.sin(Math.toRadians(winkel1))+hyp1);
out[6]=(int)(Math.sin(Math.toRadians(winkel2))+hyp2);
out[9]=(int)(Math.sin(Math.toRadians(winkel3))+hyp3);
out[12]=(int)(Math.sin(Math.toRadians(winkel4))+hyp4);
return out;
}
public void paint(Graphics g) {
initPolObject();
g.fillPolygon( pointsX, pointsY,4 );
g.drawString("Welcome to Java!!", 50, 60 );
g.setColor(Color.red);
g.fillOval(198,198,4,4);
g.setColor(Color.blue);
g.fillOval(pointsX[0]-8,pointsY[0]-8,4,4);
g.fillOval(pointsX[1]-8,pointsY[1]-8,4,4);
g.fillOval(pointsX[2]-8,pointsY[2]-8,4,4);
g.fillOval(pointsX[3]-8,pointsY[3]-8,4,4);
}
}
das ganze soll so funktionieren, das es in einem 2dimensionalem array polygone(4-eckige) definiert werden (ich habe jetzt erstmal eine fläche) zu jeder fläche gehören 4x x, y, und z koordinaten. dieses wird (erstmal) um die Y-Achse gedreht. ich glaube ich habe irgentwo etw vergessen, aber ich finde die stelle nicht
Zuletzt bearbeitet: