Aus Raspberry Pi Geek 10/2018

Einführung in die Programmierung mit Processing (Seite 4)

Die Variable rubberbandMaxLength definiert die maximale Länge, die ein neu gespanntes Gummiband haben darf (Zeile 7), distance() berechnet den Abstand zwischen zwei Partikeln (Zeile 15). findNearest() liefert das nächstgelegene Partikel, sofern vorhanden, sonst null (Zeile 20). connect() verbindet zwei Partikel (Zeile 33).

Diese neuen Funktionen greifen in einer erweiterten Version von addParticle() (Zeile 39) ineinander: Wurde innerhalb der Distanz rubberbandMaxLength ein Nachbar gefunden, verbindet das Programm ihn mit dem aktuellen Partikel.

Listing 7

 

//Partikel03/ParticleSystem.pde
class ParticleSystem {
  // Behaelter fuer die Partikel
  ArrayList<Particle> particles;
  // max. Laenge neuer Partikelverbindungen
  float rubberbandMaxLength = 100;
  ParticleSystem() {
    // Partikelbehaelter initialisieren
    particles = new  ArrayList<Particle>();
  }
  // Entfernung zwischen zwei Partikeln
  float distance(Particle p1, Particle p2) {
    return p1.pos.dist(p2.pos);
  }
  // Partikel mit der geringsten Entfernung zu p1
  Particle findNearest(Particle p1) {
    float minDistance = 1000000;
    Particle result = null;
    for (Particle p2 : particles) {
      if (distance(p1, p2) < minDistance && p1 != p2) {
        minDistance = distance(p1, p2);
        result = p2;
      }
    }
    return result;
  }
  // Gummiband zwischen zwei Partikeln spannen
  void connect(Particle p1, Particle p2) {
    p1.connectedParticles.add(p2);
    p2.connectedParticles.add(p1);
  }
  // Partikel hinzufuegen und ggf. per Gummiband verbinden
  void addParticle() {
    Particle newParticle = new Particle();
    Particle nearest = findNearest(newParticle);
    if (nearest != null &&
        distance(newParticle, nearest) < rubberbandMaxLength) {
      connect(newParticle, nearest);
    }
    particles.add(newParticle);
  }
  // Geschwindigkeit/Position aller Partikel aktualisieren
  void update() {
    for (Particle circle : particles) {
      circle.update();
    }
  }
  // alle Partikel darstellen
  void display() {
    for (Particle circle : particles) {
      circle.display();
    }
  }
}

Fazit und Ausblick

Wie unser Beispielprojekt zeigt, lassen sich in Processing mit wenig Code schicke, interaktive Anwendungen entwickeln, samt der zugehörigen Physik. Die Programmiersprache hat aber noch mehr auf dem Kasten: Es lohnt sich ein Blick in Datei | Beispiele. Viele externe Processing-Libraries laufen auch auf dem Raspberry Pi. Diese finden Sie unter Sketch | Library hinzufügen. Besonders interessant sind hier GL Video für hardwarebeschleunigte Videowiedergabe und Hardware I/O für die Arbeit mit den GPIO-Pins. Mit den beiden beschäftigen wir uns in einem Artikel in der nächsten Ausgabe. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 6 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben