Web Analytics
Kreiranje simulacije matematičkog klatna korišćenjem OSP biblioteke

Kreiranje simulacije matematičkog klatna korišćenjem OSP biblioteke

Ovaj deo vodiča prikazuje kako da, nakon što ste podesili IntelliJ IDEA i integrisali OSP biblioteke, napravite jednostavnu simulaciju matematičkog klatna koristeći Open Source Physics (.jar) pakete. Proći ćemo kroz strukturu projekta, neophodne import-e, i objasniti kako da prikažete oscilacije klatna u realnom vremenu.

Šta će biti obrađeno

Nakon ovog uvoda, bićete spremni da implementirate i detaljnije prilagodite simulaciju—dodate kontrolne elemente, promenljive parametre ili čak proširite klatno u 3D koristeći WebEJS ili p5.js port OSP-a.

Osnovna podešavanja u IntelliJ IDEA

Pre nego što se upustite u razvoj vaših simulacija ili drugih Java projekata, neophodno je da pravilno podesite razvojno okruženje. Sledeći koraci će vas provesti kroz osnovna podešavanja IntelliJ IDEA: od integracije JDK-a, preko instalacije dodatnih plugin-ova, do prilagođavanja tastaturskih prečica i teme.

1. Konfiguracija JDK-a

Prvi i najvažniji korak je dodavanje lokalno instaliranog Java Development Kita (JDK) u IntelliJ IDEA. Ovo omogućava kompajliranje i pokretanje vaših Java aplikacija.

  1. Otvorite:
    • Windows: File → Settings → Build, Execution, Deployment → SDKs
    • Linux/macOS: IntelliJ IDEA → Preferences → Build, Execution, Deployment → SDKs
  2. Kliknite na znak + → Add SDK → JDK.
  3. Izaberite putanju do root foldera vašeg JDK-a (onog koji sadrži pod-foldere bin, lib itd.):
    • C:\Program Files\Java\jdk-11.0.12 (Windows)
    • /usr/lib/jvm/java-11-openjdk (Linux)
  4. Obavezno unesite deskriptivni naziv, npr. “Java 11”, i kliknite OK.
  5. Konačno, idite na Project Structure → Project i u polju Project SDK izaberite upravo dodat JDK.

2. Instalacija plugin-ova

Da biste radili sa drugim jezicima i alatima unutar IntelliJ IDEA, potrebno je da instalirate odgovarajuće plugin-ove.

  1. Otvorite File → Settings → Plugins (ili IntelliJ IDEA → Preferences → Plugins).
  2. U pretrazi ukucajte željeni jezik ili alat (npr. “Scala”, “Python”, “Docker”).
  3. Kliknite Install, zatim Restart IDE kada se instalacija završi.

3. Prilagođavanje tastaturskih prečica i teme

IntelliJ IDEA omogućava izbor između više preddefinisanih keymap-ova i grafičkih tema, kako bi radno okruženje bilo što prijatnije.

  1. Keymap: Settings → Keymap – izaberite “Default”, “Eclipse”, “Visual Studio” ili drugi layout.
  2. Tema: Settings → Appearance & Behavior → Theme – odaberite “Darcula” (tamna) ili “IntelliJ Light”.

4. Prečica u meniju (Linux)

Ako ste instalirali IntelliJ IDEA iz .tar.gz paketa, prilikom prvog pokretanja IDE će vam ponuditi da kreira desktop entry za brže pokretanje sa GUI menija.

U slučaju da IDE ne ponudi automatski:

  1. Otvorite terminal i kreirajte skriptu:
    sudo tee /usr/local/bin/idea << 'EOF'
    #!/usr/bin/env bash
    /opt/idea-community/bin/idea.sh "$@"
    EOF
    sudo chmod +x /usr/local/bin/idea
    
  2. Sada možete da pokrenete IntelliJ komandno sa idea ili ga pronađite u aplikacijama vašeg desktop okruženja.

Verzije i dokumentacija

Trenutno je stabilna verzija OSP biblioteka 6.3.0 (februar 2025). Ranije često korišćene verzije su 6.2.x i 6.1.x (npr. 6.1.7 iz juna 2024).

Kompletni korisnički priručnici i tehnička dokumentacija dostupni su na sajtu ComPADRE. Takođe je objavljen online JavaDoc za sve OSP pakete i klase u okviru OpenSourcePhysics domena. Za početak pogledajte odeljak ComPADRE Programming – Documentation i “OSP User’s Guide”.

Izvori za preuzimanje

Instalacija jednog OSP JAR fajla

Dovoljno je uključiti jedan arhiv – osp.jar ili osp-guide.jar – u projekat.

  1. Preuzimanje JAR fajla:
    Ako osp_guide.jar nije već na računaru, preuzmite ga sa ComPADRE:
    osp_guide.jar
    Sačuvajte ga u fascikli libs/ unutar vašeg projekta.
  2. Dodavanje u IntelliJ IDEA:
    • Otvorite File → Project Structure… (ili Ctrl+Alt+Shift+S).
    • Izaberite svoj modul, pa karticu Dependencies.
    • Kliknite na +JARs or directories…, pronađite libs/osp-guide.jar, potvrdite i izaberite opseg Compile.
    • Kliknite Apply i OK.

Opcionalno: Globalna biblioteka

Da biste istu OSP JAR arhivu koristili u više projekata bez dupliranja, možete je registrovati kao globalnu biblioteku:

  1. Otvorite File → Project Structure… → Platform Settings → Global Libraries.
  2. Kliknite na +Java i izaberite osp-guide.jar.
  3. Sačuvajte promenu; knjižnica će se pojaviti pod Global Libraries.
  4. U svakom projektu odaberite Modules → Dependencies, kliknite +Library → Global Library i izaberite osp-guide.

Nakon ovoga, IntelliJ će smestiti OSP klase na classpath projekta, pa je moguće koristiti:

import org.opensourcephysics.controls.*;
import org.opensourcephysics.display.*;

Kreiranje Java projekta i integracija OSP biblioteka

U sledećim koracima je opisano kako se u IntelliJ IDEA kreira novi Java projekat, zatim kako se u njega dodaju Open Source Physics (.jar) biblioteke, i na kraju prikazuje primer simulacije matematičkog klatna.

1. Kreiranje novog Java projekta

  1. Pokrenite IntelliJ IDEA.
  2. Na ekranu dobrodošlice izaberite New Project.
  3. Odaberite Java i već instalirani JDK (npr. Java 11).
  4. Kliknite Next, unesite naziv projekta (npr. AnimiranoKlatno) i kliknite Finish.

2. Dodavanje OSP biblioteka

Preuzeti .jar fajlovi iz OSP distribucije (npr. osp.jar ili osp-guide.jar) mogu se uključiti u projekat na sledeći način:

  1. Desni klik na modul ili na “External Libraries” i izaberite Open Module Settings (F4).
  2. Prebacite se na karticu Libraries i kliknite na +Java.
  3. Selektujte preuzete .jar fajlove i prihvatite opseg Compile.
  4. Kliknite Apply i OK.

3. Struktura paketa

Preporučuje se da se u okviru src kreira paket, npr. klatno, u kojem će se nalaziti sve klase vezane za simulaciju.

Animacija matematičkog klatna
Animacija matematičkog klatna
 package klatno;
import org.opensourcephysics.display.Circle;
import org.opensourcephysics.display.Trail;
import org.opensourcephysics.display.DrawingFrame;
import org.opensourcephysics.display.DrawingPanel;
import org.opensourcephysics.numerics.ODE;
import org.opensourcephysics.numerics.ODESolver;
import org.opensourcephysics.numerics.Euler;

public class AnimiranoKlatno implements ODE {

private double[] state = new double[3]; // [theta, omega, time]
private final double g = 9.81;
private final double L = 1.0;

public AnimiranoKlatno() {
state[0] = Math.PI / 4; // initial angle
state[1] = 0; // initial angular velocity
state[2] = 0; // initial time
}

@Override
public double[] getState() {
return state;
}

@Override
public void getRate(double[] s, double[] r) {
r[0] = s[1];
r[1] = -(g / L) * Math.sin(s[0]);
r[2] = 1;
}

public static void main(String[] args) {
AnimiranoKlatno model = new AnimiranoKlatno();
ODESolver solver = new Euler(model);


// 1) Create panel and frame
DrawingPanel panel = new DrawingPanel();
DrawingFrame frame = new DrawingFrame("Pendulum Animation", panel);
frame.setDefaultCloseOperation(DrawingFrame.EXIT_ON_CLOSE);
frame.setVisible(true);

// 2) Prepare rod and bob
Trail rod = new Trail();
rod.setConnected(true);

Circle bob = new Circle(0, 0, 5);

panel.addDrawable(rod);
panel.addDrawable(bob);

// 3) Initialize solver and run loop
double dt = 0.02;
solver.initialize(dt);

while (true) {
  solver.step();

  double theta = model.state[0];
  double x = model.L * Math.sin(theta);
  double y = -model.L * Math.cos(theta);

  rod.clear();
  rod.addPoint(0, 0);
  rod.addPoint(x, y);

  bob.setX(x);
  bob.setY(y);

  frame.render();

  try {
    Thread.sleep((int)(dt * 1000));
  } catch (InterruptedException ex) {
    break;
  }
}
}
}
Animacija matematičkog klatna sa kodom
Animacija matematičkog klatna sa kod-om

Objašnjenje koda

Klasa AnimiranoKlatno implementira interfejs ODE. Da bismo razumeli šta to znači, prvo ćemo se osvrnuti na sam interfejs ODE:

Šta je ODE u OSP biblioteci?

U Open Source Physics (OSP) biblioteci, ODE predstavlja interfejs koji se koristi za modelovanje dinamičkih sistema pomoću običnih diferencijalnih jednačina (eng. Ordinary Differential Equations).

On zahteva implementaciju sledećih metoda:

public interface ODE {
  double[] getState();
  void getRate(double[] state, double[] rate);
}

Objašnjenje metoda:

U klasi AnimiranoKlatno nalazi se niz state dužine 3, koji čuva vrednosti ugla θ, ugaone brzine ω i vremena t. Početni ugao postavljen je na π / 4 radijana, brzina na 0, a početno vreme takođe na 0.

U glavnoj metodi (main) se kreiraju sledeći objekti:

Na panel se dodaju dva grafička objekta:

U beskonačnoj petlji poziva se solver da izračuna sledeće stanje sistema, zatim se grafika ažurira tako da se pozicije kuglice i linije prikažu u skladu sa novim izračunatim koordinatama. Linija se crta od koordinatnog početka do trenutne pozicije kuglice, a kuglica se pozicionira na odgovarajuću tačku. Svaki korak se zatim prikazuje korisniku pomoću metode frame.render().

Ovaj princip omogućava simulaciju fizičkog sistema koji se menja u realnom vremenu u skladu sa diferencijalnim jednačinama koje opisuju njegovo ponašanje.