
Az axesHelper, a solarSystemGroup, és a sunMesh nem végeznek mozgást, a létrehozási helyükön maradnak.
earthOrbitMesh:
- A pályát reprezentáló kör objektumot ellipszissé kell alakítani a panel beállításnak megfelelően skálázással.
- Az ellipszist be kell forgatni az XZ síkba 90 fokkal.
- Ki kell számolni a tengelyarányok alapján a fókuszpont távolságát és ezzel eltolni az ellipszist a Z-tengely mentén.
- A segédanyagban található képlettel megkapjuk (Pithagorász tétellel az ellipszis kis- és nagytengely sugarából).
// http://www.bethlen.hu/matek/mathist/forras/Ellipszis_definicioja.htm
// Ellipszis fókuszpont távolság számítása a középponttól Pithagorász-tétellel
earthOrbitFocalDistance = Math.sqrt(
earthOrbitRadius * earthOrbitRadius
- earthOrbitRadius * earthOrbitRadius * ctrl.earthOrbitRatio * ctrl.earthOrbitRatio
) / 2.0;
earthOrbitMesh.position.z = earthOrbitFocalDistance;
earthMesh:
- A panelen megadott szögnövekménnyel tovább kell mozgatni a bolygót. Az aktuális helyzetet egy globális változóban (earthOrbitAngle) tároljuk.
- A helyzet, a sugár és a lapítási arány ismeretében, trigonometrikus függvényekkel kiszámoljuk a gömb pozícióját.
// Bolygó mozgatás és új pozíciójának számítása
earthOrbitAngle -= ctrl.earthOrbitSpeed;
var radians = earthOrbitAngle * Math.PI / 180;
earthMesh.position.x = Math.cos( radians ) * earthOrbitRadius * ctrl.earthOrbitRatio;
earthMesh.position.z = Math.sin( radians ) * earthOrbitRadius + earthOrbitFocalDistance;
Felmerülhet a kérdés, hogy miért nem az ellipszisnél is látott skálázással, objektum hierarchiával oldjuk meg a dolgot? Ezzel a probléma az, hogy a skálázás lapító hatása nem csak a pályára, hanem a gömb alakjára is hatással van, ami nem elfogadható.