Archiv für

Juni, 2006

...

Erdabplattung

kein kommentar

Früh aufstehen hat auch gute Seiten: Die Erdabplattung wird jetzt in meiner 3D-Darstellung berücksichtigt. :-)

Die Erdabplattung bezeichnet die Abplattung des Planeten Erde und entsteht durch die Fliehkraft der Erdrotation, welche am Äquator am größten und an den Polen Null ist. Da das Erdinnere etwas plastisch ist, gibt unser Planet (wie auch andere im Sonnensystem) dieser Kraft großteils nach. Dadurch nimmt der Meeresspiegel genähert die Form eines Rotationsellipsoids an, dessen Halbachsen (Radien) sich um 21,38 km unterscheiden (a = 6378,137 km, bzw. b = 6356,752 km). Die Erdabplattung beträgt somit f = (a – b) / a = 1:298,3.

In Java3D kann man das ganze durch eine einfache Transformation erreichen:

Sphere sphere = new Sphere(radius, Sphere.GENERATE_TEXTURE_COORDS, 80, app);
// rotation deform
float EARTH_RATIO = 1f / 298.3f;
Matrix3f earthDeform = new Matrix3f(1f + EARTH_RATIO, 0.0f, 0.0f, 0.0f, 1f, 0.0f, 0.0f, 0.0f, 1f + EARTH_RATIO);
Transform3D trans = new Transform3D(earthDeform, new Vector3f(), 1.0f);
TransformGroup earth = new TransformGroup(trans);
earth.addChild(sphere);

Die Variable EARTH_RATIO muss für ein sichtbares Ergebnis natürlich etwas größer ausfallen als 1 : 298.3. Ich habe mit 1 : 8 eine gut sichtbare Abplattung erzeugt. Damit ist natürlich noch kein Rotationskörper erstellt, allerdings reicht diese einfache Transformation für Darstellungszwecke aus.
Für die Berechnung der Entfernung zwischen zwei Position auf der Erde werde ich die Oberfläche auch durch eine Kugel annähern, die Darstellung einer Strecke auf meiner Erde würde allerdings durch die zugrunde liegende Deformation auch auf der Ellipse dargestellt. Eine berechnete gerade Strecke von Punkt A nach B, wird also etwas verzerrt dargestellt werden.

Gut, so weit ist es noch lange nicht. Im Moment sitze ich formelmäßig auf dem Trocknen und die Wikipedia gibt leider in Bezug auf Formeln und “harte” Fakten nicht immer genug Material her… Hier erstmal ein kleiner Screenshot von jetzigen Stand:

3D-Darstellung der Erde in Java3D

3D-Weltkugel mit Längen- und Breitengraden

kein kommentar

Tja, wenn man mit Java3D arbeitet, fällt auch noch einiges für Langeweilebekämpfung ab: Ich habe eine Kugel mit Weltkarte erstellt, auf der Längen- und Breitengrade abgebildet werden. Die Transparenz der Grade kann mit einem Slider bestimmt werden, genau wie der Abstand über der Kugeloberfläche. Ausserdem kann ein Positionsanzeiger mittels JSpinners verschoben werden, leider passt da die Rotationsberechnung der X- und Y-Rotation noch nicht. Die Puhala… äh, Papula-Formelsammlung kann mir da sicher bei Addition von Drehungen weiterhelfen. ;-)

Zusätzlich soll es bald noch ein Bump-Mapping der Oberfläche geben, d.h. eine Verschiebung der Oberflächenkoordinaten aufgrund einer Höhenkarte. Da muss ich aber noch die Möglichkeiten des Java3D ausloten und das Dot3-Bumpmapping erkunden.

Das ganze gibt es auch noch nicht als JAR oder Webstart, da zu viele Abhängigkeiten erfüllt sein müssen. Ich habe natürlich Java 5.0 verwendet, ausserdem Java3D 1.4.0 – und wie ich das alles in ein JAR packe, muss ich noch herausfinden… :-)