Általános leírás

Egészítsd ki a gravitációs szimuláció hiányzó JavaScript-metódusait! A megjelenítő és a kezelőfelület készen áll: a feladatod a vektorműveletek, az égitestek mozgása és a gravitációs kölcsönhatások megvalósítása.

Az egyes fájlokban a feladatok számozása külön indul. A megadott metódusneveket és paramétereket ne változtasd meg. Törekedj rövid, áttekinthető, újrahasznosítható megoldásokra!

A gravitációs szimuláció felülete
A kész kezelőfelület, amelyet a megírt algoritmusok működtetnek.
36 részfeladat 3 JavaScript-fájl Vektorok · fizika · objektumok

A program kétdimenziós térben égitesteket jelenít meg. Minden égitestnek van tömege, sűrűsége, pozíciója és sebessége. A gravitáció megváltoztatja a sebességeket, az égitestek mozognak, ütközéskor pedig összeolvadhatnak. A feladatod a forráskódban számozott, hiányzó metódusok megírása.

Munkakezdés

A letöltendő kiindulófájlok a fajlok/ mappában vannak:

  1. Bontsd ki a kapott projektet, és nyisd meg a gravitacio.html fájlt böngészőben.
  2. A // N. feladat megjegyzések helyén dolgozz. A feladatok számozása fájlonként újrakezdődik .
  3. Először a vektor.js műveleteit készítsd el; ezekre épül az egitest.js és a galaxis.js .
  4. Az alkalmazás kezelőfelületét és az SVG-megjelenítést nem kell újraírnod.

A kiinduló projektben a hiányzó megoldások szándékosan nincsenek kitöltve. Az összeolvadás ideiglenes értékei csak a szintaktikai hibát előzik meg, nem helyes megoldások.

I. Vektorműveletek – vektor.js

Valósítsd meg a Descartes- és polárkoordinátás vektorok műveleteit. A statikus és példánymetódusos változatok külön feladatok. Figyelj arra, melyik metódus módosítja az eredeti objektumot!

1.

Polárvektor elforgatása

A polárvektor szögéhez adj hozzá egy fokban megadott elfordulást. Új PolarVektor objektumot adj vissza.

2.

Polár → Descartes

A szög és a hossz alapján állítsd elő az x és y koordinátákat. A trigonometrikus függvények radiánt várnak.

3.

Radiánból fok

Készíts radián–fok átváltó függvényt.

4.

Fokból radián

Készíts fok–radián átváltó függvényt.

5.

Két vektor összege

A statikus plus(u,v) adjon vissza új vektort, az eredetiek változatlanok maradjanak.

6.

Hozzáadás helyben

A hozzaad(that) módosítsa a saját vektor koordinátáit, és adja vissza a módosított objektumot.

7.

Kivonás helyben

A csokkent(that) csökkentse a saját koordinátákat a másik vektor koordinátáival.

8.

Statikus kivonás

A Vektor.minus(u,v) készítsen új vektort.

9.

Példánymetódusos kivonás

Az u.minus(v) új vektort adjon vissza, és ne módosítsa az u-t.

10.

Statikus ellentett

Készítsd el a Vektor.ellentett(u) műveletet.

11.

Ellentett példánymetódusként

A v.ellentett() új vektort adjon vissza.

12.

Balra forgatás 90°-kal

A statikus balraforgat90(u) új vektort adjon vissza.

13.

Balra forgatás példánymetódussal

A v.balraforgat90() változatot is készítsd el.

14.

Jobbra forgatás 90°-kal

A statikus jobbraforgat90(u) új vektort adjon vissza.

15.

Jobbra forgatás példánymetódussal

A v.jobbraforgat90() változatot is készítsd el.

16.

Statikus skalárszorzás

A Vektor.szor(u,a) az u vektor minden koordinátáját szorozza a-val, új vektort visszaadva.

17.

Skalárszorzás példánymetódussal

A v.szor(a) is új vektort adjon vissza.

18.

Skalárosztás példánymetódussal

A v.oszt(a) új vektort adjon vissza; gondolj a nullával osztásra.

19.

Statikus skalárosztás

A Vektor.oszt(u,a) is működjön.

20.

Descartes → polár

A to_polar() számítsa ki a vektor hosszát és irányszögét fokban.

21.

Vektor hossza

Számítsd ki a vektor euklideszi hosszát.

22.

Hossznégyezet

Számítsd ki a vektor hosszának négyzetét négyzetgyökvonás nélkül.

23.

Általános forgatás statikusan

A Vektor.forgatott(u,fok) készítsen új, elforgatott vektort.

24.

Általános forgatás példánymetódussal

A v.forgatott(fok) is új vektort adjon vissza.

25.

Egységvektor

A v.egysegvektora() a v irányába mutató, 1 hosszúságú vektort adjon vissza; kezeld a nullvektort.

26.

Vektor másolata

A masolat() azonos koordinátájú, de különálló Vektor objektumot hozzon létre.

II. Égitestek – egitest.js

Az égitest pozíciója és sebessége Vektor típusú. A számított értékeket a meglévő SVG-objektumokon kell megjeleníteni.

1.

Égitest mozgatása

A pozícióhoz add hozzá a sebességvektort, majd hívd meg a frissit() metódust.

2.

Ütközésvizsgálat

Két égitest akkor ütközik, ha a középpontjaik távolsága kisebb, mint sugaraik összege.

3.

Égitestek összeolvadása

Számítsd ki az új tömeget, a tömeggel súlyozott pozíciót és sebességet, az új nevet, színt és sűrűséget; hozd létre az új Egitest objektumot. A megadott lista- és SVG-kezelő kódhoz igazodj.

4.

Megjelenített sugár

Adj pozitív sugarat a tömeg és a sűrűség alapján. A választott összefüggést indokold.

5.

Gravitáció két égitest között

Számítsd ki a két test egymásra gyakorolt vonzó hatását, és adj vissza két ellentétes irányú vektort. A mozgás frissítéséhez a tömegekkel osztott gyorsulásváltozásokra van szükség.

Fizikai pontosítás: a gravitációs törvény erőt ad: F = G·m₁·m₂/r² . A sebesség módosításához a testre ható erőt a saját tömegével osztva gyorsulást kapunk, majd az időlépéssel szorozzuk. A program egyszerűsített diszkrét modellt használ; a két test sebességváltozása nem pusztán két azonos hosszúságú, ellentétes vektor.

III. Galaxis – galaxis.js

Az egyes égitestek helyett most az egész rendszeren végzel műveleteket. Különösen ügyelj a párok egyszeri feldolgozására és az összeolvadás közben változó listára.

1.

A rendszer eltolása

Minden égitest pozícióját told el ugyanazzal a vektorral, majd frissítsd az SVG-t.

2.

Geometriai súlypont

Add vissza a pozícióvektorok számtani átlagát. Itt nem tömegközéppontot számolunk.

3.

Ütközések kezelése

Minden rendezetlen égitestpárt vizsgálj meg egyszer. Ütközéskor olvaszd össze a testeket; ügyelj a lista közbeni módosítására.

4.

Gravitáció minden párra

Minden égitestpárra hívd meg a gravitacios_kolcsonhatas_parra() metódust, és frissítsd mindkét test sebességét.

5.

A galaxis mozgatása

Hívd meg minden égitestre a mozogj() metódust.

IV. Kipróbálás és megfigyelés

A

Gravitáció nélkül

Állítsd a gravitációs állandót 0-ra, majd pozitív értékekre. Hasonlítsd össze az égitestek mozgását!

B

Pályára állítás

A Nap–Föld rendszerben módosítsd a Föld kezdősebességét. Keress közel körpályát, majd olyan sebességet, amelynél az égitest eltávolodik.

C

Tömegmegmaradás

Ütközés előtt és után add össze a rendszer égitestjeinek tömegét. Egyezik-e a két összeg?

E

Saját bolygórendszer

Hozz létre legalább három égitestet. Kísérletezz olyan kezdőpozíciókkal és sebességekkel, amelyeknél a rendszer tartósan mozgásban marad.

V. Ellenőrzési példák

Próbáld ki a vektorműveleteket a böngésző konzoljában. Néhány ellenőrizhető eredmény:

Vektor.plus(new Vektor(2, 3), new Vektor(4, -1))  // (6, 2)
new Vektor(3, 4).hossz()                          // 5
new Vektor(3, 4).hossznegyzet()                   // 25
new Vektor(3, 4).egysegvektora()                 // (0.6, 0.8)
new Vektor(5, -2).ellentett()                    // (-5, 2)
to_degree(Math.PI)                                // 180

Ezután töltsd be a Nap–Föld, a Nyolcasrendszer és az Ütközések előre beállított rendszereket. Vizsgáld meg a mozgást, az ütközéseket, az alaphelyzet visszaállítását és a sebességvektorok megjelenítését.

Beadás

A teljes projektmappát add be, benne a módosított vektor.js , egitest.js és galaxis.js fájlokkal. A HTML, a CSS és a kezelőfelületet működtető JavaScript maradjon a projektben. A kipróbálási feladatok tapasztalatait röviden foglald össze.

A feladatok a projekt forráskódjában szereplő számozást követik. A kiinduló alkalmazás nem tartalmaz pályanyomvonal-rajzolást.