Hallo wieder,
ich habe die erste Aufgabe erledigt.
Jetzt kann das Programm ganz in Ordnung die Editorseite aufrufen und die kleine Kugeln erzeugen.
Diese Editorseite enthält Zahlen von 3 Komponenten Punkten (x, y, z).
z.B: (1, 2, 3) (2, 4, 6) (3, 5, 7) usw.
Die gebliebene Frage ist jetzt so:
Aber die Editorseite, die ich bearbeiten muss, enthält Werte (3 Komponentenzahlen
(x, y, z)), die so näh voneinander sind.
z.B: (0.1, 0.2, 0.3)
(0.11, 0.21, 0.31)
(0.12, 0.22, 0.32)
usw.
Deswegen beim Starten des Programms sehen die Kugeln aufeinander aus.
Die einzige Lösung dafür ist Skalieren.
Also muss ich diese Kugeln skalieren, ohne ihre Eigenschaften voneinander zu ändern, damit sie gut aussehen.
Skalieren heißt z.B. wie Transformieren in Mathematik:
x * 1000 = x
y * 1000 = y
z. * 1000 = y
Aber es fehlt mir, wie ich es in Java schreiben kann.
Ich schreibe unten mein bis jetzt erledigtes Programm „HelloJava3Da.java“.
Das gefehlte Skalierungsteil muss unter der Zeile for(int i=0; i<30; i++) geschrieben werden.
Für weitere Erklärungen stehe ich sofort zur Verfügung.
Mit besten Grüßen
Angelo
Es folgt das Programm „HelloJava3Da.java“:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.Primitive;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.SimpleUniverse;
import java.util.ArrayList;
import java.util.List;
public class HelloJava3Da extends Applet {
/**
* The generated serialVersionUID.
*/
private static final long serialVersionUID = -8652165991244123757L;
static List<Vector3d> list;
/**
* @param args
*/
public static void main(final String[] args) {
Einleser einL = new Einleser();
list = einL.read("F:/Javajob/Aufgabe1/Auf1/rt.txt");
new MainFrame(new HelloJava3Da(), 256, 256);
} // end of main (method of HelloJava3Da)
public HelloJava3Da() {
this.setLayout(new BorderLayout());
final GraphicsConfiguration config = SimpleUniverse
.getPreferredConfiguration();
final Canvas3D canvas3D = new Canvas3D(config);
this.add("Center", canvas3D);
final BranchGroup scene = this.createSceneGraph();
// SimpleUniverse is a Convenience Utility class
final SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
// This will move the ViewPlatform back a bit so the
// objects in the scene can be viewed.
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
} // end of HelloJava3Da (constructor)
// The following allows this to be run as an application
// as well as an applet
Appearance createAppearance() {
Color3f lColor1 = new Color3f(1.0f, 0.0f, 0.0f);
ColoringAttributes caL1 = new ColoringAttributes();
caL1.setColor(lColor1);
Appearance appL1 = new Appearance();
appL1.setColoringAttributes(caL1);
return appL1;
}
public BranchGroup createSceneGraph() {
// Create the root of the branch graph
final BranchGroup objRoot = new BranchGroup();
//final Transform3D zTrans = new Transform3D();
//zTrans.set(new Vector3f(1f, 2f, 1.3f)); // -------------------------------
// POSITION 1
//final TransformGroup objTrans = new TransformGroup(zTrans);
//objTrans.addChild(new Sphere(0.9f, Primitive.GENERATE_NORMALS, this
//.createAppearance()));
for(int i=0; i<30; i++)
{
Transform3D zTrans2 = new Transform3D();
zTrans2.set(list.get(i));
//zTrans.set(new Vector3f(3f, 3f, 4f)); // -------------------------------
// POSITION 2
TransformGroup objTrans2 = new TransformGroup(zTrans2);
objTrans2.addChild(new Sphere(0.1f, Primitive.GENERATE_NORMALS, this
.createAppearance()));
//objRoot.addChild(objTrans);
objRoot.addChild(objTrans2);
}
return objRoot;
} // end of CreateSceneGraph method of HelloJava3Da
} // end of class HelloJava3Da