Program rysuje dwu- i trójwymiarowe trajektorie punktów. Rysowane są trajektorie trzech typów: Trajektorie można wybrać z pewnej listy.
Lista ta tworzona jest następująco:
  1. Wpierw tworzona jest lista katalogów, zawiera ona: Katalog_danych_aplikacji jest opisany w zmiennej środowiskowej APPDATA. W systemach Windows 7 i Windows 10 jest to katalog:
    C:\Users\nazwa_użytkownika\AppData\Roaming.
  2. Każdy analizowany katalog musi zawierać pliku Systems.xml
  3. Plik Systems.xml musi zawierać sekcje opisujące trajektorie (wzór opisu)
  4. Klasa obliczająca (plik ⋅.class) musi się znajdować obok pliku Systems.xml (przykładowa klasa)

Zastosowany algorytm


Przykładowy plik Systems.xml

Pliki Systems.xml można edytować programem.
<?xml version="1.0" encoding="ISO-8859-2"?>
<Systems>
  <System>
    <Name>Atraktor Lorentza</Name>
    <Class>Lorentz</Class>
    <Html-Description><![CDATA[x' = sy - sx  y' = -xz + rx - y  z' = xy - bz]]></Html-Description>
    <Starting-Point>1.0;0.0;1.0</Starting-Point>
    <Iterations>10000</Iterations>
    <Step>0.01</Step>
    <Parameters>r=28;s=10;b=2.33333333</Parameters>
    <Dimension>3</Dimension>    
  </System>
</Systems>  
Znacznik Name to nazwa systemu, która zostanie wyświetlona na liście systemów do wyboru.
Znacznik Class to nazwa klasy.
Znacznik Html-Description to tekst, który zostanie wyświetlony pod wykresem.

Przykładowy kod klasy

import java.util.ArrayList;
import bs.math.trajectories.DynamicalSystem;

public class Elipse implements DynamicalSystem
{
    public double[] compute(double step, ArrayList args, ArrayList params)
    {
        double a = -0.9;
        double b = 0.8;
        if(params.size() > 1)
        {
            b = params.get(1);
        }
        if(params.size() > 0)
        {
            a = params.get(0);
        }
        double x = args.get(0);
        double y = args.get(1);
        double old_x = x;
        x += a⋅y⋅step;
        y += b⋅old_x⋅step;
        double result[] = {x, y};
        return result;
    }
}

Kod interfejsu DynamicalSystem

package bs.math.trajectories;

import java.util.ArrayList;

public interface DynamicalSystem
{
    public double[] compute(double step, ArrayList args, ArrayList params);
}