Lissajous-Figuren
Sandra Thamerl

Versuch

In meiner nach folgenden schriftlichen Abhandrlung werde ich den
Versuch erleutern, welchen ich im Programm Java, programmieren musste. Zu dieser Programmierung war es noch notwendig diesen Versuch in einem Word- Dokument ausführlich zu dokumentieren,
wie auch diese Html-Datei.
Ein Sandpendel, welches gleichzeitig in zwei zueinander senkrecht
stehenden Richtungen schwingen kann, zieht man nach vorne
und nach der Seite. Lässt man den Sandtrichter los, so zeichnet
der auslaufende Sand die Schwingungen auf.
Es ergeben sich die sogenannten Lissajous Figuren.

Durch Verschieben des Ringes kann man das Frequenzverhältnis ändern.
Die entstehende Figur ist charakteristisch für das Verhältnis der
Frequenzen.Daher können mit Hilfe der Lissajous-Figuren Frequenzbestimmungen durchgeführt werden, falls eine der Frequenzen, die "Normalfrequenz",bekannt ist.

Durch Wahl verschiedener Koppelungen zwischen den Pendel, erkennen wir dass der Energieaustausch umso schneller
erfolgt, je stärker die Koppelung ist.

Macht man den Versuch mit verschiedenen Fadenpendeln, erkennt man, dass die Energie nicht vollständig von einem Pendel
auf das andere übergeht. Dies ist nur bei gleichen Eigenfrequenzen der Fall. Diese Punkte werden duch die Parameter
dt,a1,a2w1,w2 und phi festgelegt.

Dazu gibt es bestimmte Fälle, die durch die verschiedenen Koppelungen, wie bereits erwähnt, aufträten.
Diese Koppelungen stehen in ver- schiedenen Verhältnissen zu einander.
Die für die auftretenden Figuren ausschlaggebend sien wie man in den an geführten Fällen sehen wird.
Die alle selbst Sonderfälle der Lissajous-Figuren sind.

Sonderfälle

Fall1:


dt=0.01;a1=135;a2=135;w1=1;w2=1;phi=Math.PI/2;
Ein Strich wird gezeichnet.

Fall2:


dt=0.01;a1=135;a2=135;w1=1;w2=1;phi=00;
Ein Kreis wird gezeichnet.

Fall3:


dt=0.01;a1=135;a2=135;w1=1;w2=2;phi=00;
Ein Achter wird gezeichnet.

Ausführung im Java

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Kaengaru extends Frame  implements KeyListener,Runnable {
  // Anfang Variablen
  int fall=6;
  int breit= 800; int hoch= 600;  // Fenstermaße
  boolean neu=true;           // Rasen/Himmel bereits gezeichnet?
  boolean pause=false;
  boolean ende=false;         // (x,y) außerhalb der Grenzen
  double x,y;                 // GeschoßKoordinaten
  double t=0;
  double dt=0.01;              // Schrittweite in Sekunden
  double a1=135;               //Amplietuden
  double a2=135;
  double w1=1;              // Kreisfrequenzen
  double w2=2;             //Phasenverschiebung
  double phi=00;

  public Kaengaru (String Title) {
    super (Title);
    addWindowListener(new WindowAdapter() {
      public void windowClosing (WindowEvent evt) {System.exit(0);}});
    setBackground(Color.lightGray);
    setSize(breit, hoch);
    setLayout(new BorderLayout());
      addKeyListener(this);
    Thread t = new Thread(this);    t.start();

    if (fall==1) {dt=0.01;a1=135;a2=135;w1=1;w2=1;phi=Math.PI/2;}
    if (fall==2) {dt=0.01;a1=135;a2=135;w1=1;w2=1;phi=00;}
    if (fall==3) {dt=0.01;a1=135;a2=135;w1=1;w2=2;phi=00;}
    if (fall==4) {dt=0.01;a1=135;a2=135;w1=2;w2=3;phi=15;}
    if (fall==5) {dt=0.01;a1=135;a2=135;w1=1;w2=3;phi=00;}
    if (fall==6) {dt=0.01;a1=135;a2=135;w1=1;w2=3;phi=02;}



  }

  public void keyPressed(KeyEvent event){
    if (event.getKeyCode()== KeyEvent.VK_SPACE) pause=!pause;
    if (event.getKeyCode()== KeyEvent.VK_ESCAPE) System.exit(0);
  }
  public void keyReleased(KeyEvent event){}
  public void keyTyped(KeyEvent event){}

  public void update (Graphics g) {paint(g);}

  public void paint(Graphics g){
    if (neu) {
      g.setColor(Color.blue); g.fillRect(0,0,breit,hoch);
      g.setColor(Color.red) ; g.drawRect(0,0,breit,hoch/2);
      g.setColor(Color.red);  g.drawRect(0,0,breit/2,hoch);
      g.setFont(new Font("Times",Font.BOLD,12));
      g.setColor(new Color(0,200,50));
      g.drawString("Lissajous-Figuren",(int)(breit/2-50),50);
      neu=false;
    }
    else {
      g.setColor(Color.white);
      g.drawOval((int)(breit/2+x),(int)(hoch/2-y),2,2);
    }
  }
  public void run(){

    while (!ende) {
      if (!pause) t=t+dt;
       x=a1*Math.cos(w1*t);
       y=a2*Math.sin(w2*t-phi);
      repaint();
      try{Thread.sleep((int)(1000*dt));} catch (InterruptedException e){}
    }
  }

  public static void main (String args[]) {
    new Kaengaru ("Wurfparabel").show();
  }
}

Das ausgeführte Programm, im Java programmiert