Lissajous-Figuren

Willkommen auf meiner Web-Site!!!

Das Thema mit dem ich mich heute beschäftige sind Schwingungen und vor allem Lissajous-Figuren.

Wichtige Größen:

y=Elongation (Momentane Entfernung von der Ruhelage)
r=Amplitude (Maximale Entfernung von der Ruhelage)
t=Zeit, die der Massenpunkt für eine volle Schwingung benötigt
f=Frequenz

Besondere Schwingungen:

Interferenz: Überlagerung zweier Schwingungen, wobei besonders die Phasenverschiebung beachtet werden muss. Es gibt zwei Arten von Interferenz; konstruktive Interferenz (Verstärkung) oder Destruktive (Auslöschung).
Schwebung: Überlagerung von Wellen mit geringem Gangunterschied führt zum einem periodischen Anwachsen und Abklingen der Amplitude.
Lissajous-Figuren: Damit werde ich mich auf meiner Seite noch umfassender beschäftigen.

Physikalischer Hintergrund:

Diese Erscheinung in der Physik ist nach dem französischen Physiker J. A. Lissajous (1822-1880) benannt. Dieses Phänomen tritt auf, wenn ein Oszillator gezwungen wird gleichzeitig zwei Schwingungen auszuführen, wobei die Schwingungsrichtungen auf einander normal stehen müssen. Die dabei entstehenden Figuren sind charakteristisch für das Frequenzverhältnis.

Auf diesem Bild kann man die Frequenzunterschiede gut erkennen.

 

Dieser Screenshot veranschaulicht die Arbeitsweise des Applets!

 

Parameter:

Sollte man die Ampitude vergrößern steigert sich das Ausmaß der Lissajous-Figur.
Eine Änderung der Frequenz führt zu einer Verschiebung des Frequenzverhälznisses.(siehe Abbildung)
Mit Hilfe der Checkbox entscheidet man ob man eine Lissajous-Figur erzeugen will oder eine normale Schwingung.

 

Dokumentation

init-Methode:


public void init() {
    // Frame-Initialisierung
    breit=getSize().width;
    hoch=getSize().height;
    setLayout(new BorderLayout());    
    Thread t = new Thread(this);
    t.start();
   
    // Anfang Komponenten                                            //nord Panel
    Panel nord= new Panel();
    nord.setLayout(new GridLayout(3,4));
    add(nord,BorderLayout.NORTH);

    amp1Label= new Label("1.Amplitude:",Label.RIGHT);                //1.Zeile
    nord.add(amp1Label);
    amp1Feld= new TextField("100",6);
    amp1Feld.addActionListener(this);
    nord.add(amp1Feld);
    amp2Label= new Label("2.Amplitude:",Label.RIGHT);
    nord.add(amp2Label);
    amp2Feld= new TextField("80",6);
    amp2Feld.addActionListener(this);
    nord.add(amp2Feld);
    liss.addItemListener(this);

    fre1Label= new Label("1.Frequenz:",Label.RIGHT);                //2.Zeile
    nord.add(fre1Label);
    fre1Feld= new TextField("3",6);
    fre1Feld.addActionListener(this);
    nord.add(fre1Feld);
    fre2Label= new Label("2.Frequenz:",Label.RIGHT);
    nord.add(fre2Label);
    fre2Feld= new TextField("2",6);
    fre2Feld.addActionListener(this);
    nord.add(fre2Feld);

    phasLabel= new Label("Phasenverschiebung:(in °)",Label.RIGHT);            //3.Zeile
    nord.add(phasLabel);
    phasFeld= new TextField("0",6);
    phasFeld.addActionListener(this);
    nord.add(phasFeld);
    lissLabel= new Label("Lissajous?",Label.RIGHT);
    nord.add(lissLabel);
    nord.add(liss);


    Panel sued= new Panel();                                         //Süd Panel
    sued.setLayout(new GridLayout(1,3));
    add(sued,BorderLayout.SOUTH);


    start.setLabel("Start");
    start.setBackground(Color.blue);
    sued.add(start);
    start.addActionListener(this);


    ende.setLabel("Pause");
    ende.setBackground(Color.red);
    sued.add(ende);
    ende.addActionListener(this);

    neustart.setLabel("Neustart");
    neustart.addActionListener(this);
    sued.add(neustart);
    // Ende Komponenten
   
  }

Hier sind alle Buttons und Labels aufgelistet. Ihre Funktion wird im Action-Listener erklärt.

 

Action-Listener:

public void actionPerformed (ActionEvent event)
    {

      if(event.getSource()==start)
      {
        if(lissajous) c=true;
        else c=false;
        am1=amp1Feld.getText();
        am2=amp2Feld.getText();
        fr1=fre1Feld.getText();
        fr2=fre2Feld.getText();
        pha=phasFeld.getText();

        try {

        a1=Double.valueOf(am1).doubleValue();
        a2=Double.valueOf(am2).doubleValue();
        f1=Double.valueOf(fr1).doubleValue();
        f2=Double.valueOf(fr2).doubleValue();
        ph=Double.valueOf(pha).doubleValue();

        }
        catch(NumberFormatException e) {

        c=false;
        zeichne=false;
        }
        ph=ph*Math.PI/180;

        c=true;
        zeichne=true;
        repaint();
      }

      if(event.getSource()==ende)
      {
        if(pause)
        {
          ende.setLabel("Pause");
          pause=false;
        }
        else
        {
          ende.setLabel("Fortsetzen");
          pause=true;
        }
      }
      if(event.getSource()==neustart)
      {
        t=0;
        mx=10; my=280;
        dt=0.003;
        c=false;
        pause=false;
        zeichne=false;
        lissajous=false;
        neustartX=true;
        liss.setState(false);
        repaint();
       }

  }

Hier werden die Eingaben ausgewertet und die Arbeitsprozeduren aufgerufen.

paint-Methode:


public void paint(Graphics g)
  {
    if(lissajous )
    {
      mx=breit/2;
      g.drawLine ((int) mx,0,(int) mx,hoch);
    }
    if(neustartX)
    {
      g.setColor(Color.white);
      g.fillRect(0, 0, breit, hoch);
      neustartX=false;
    }
    if(!zeichne)
    {
      mx=5;
      g.setColor(Color.black);
      g.drawLine (0,(int)my,breit,(int)my);
    }

   if(zeichne)
   {
     x1=a1*Math.sin(2*Math.PI*f1*t);
     x2=a2*Math.sin(2*Math.PI*f2*t-ph);
     t=t+dt;
     if (lissajous)
     {
       g.setColor(Color.red);
       g.fillOval((int)(mx+x1),(int)(my-x2),3,3);
     }
     else
     {
       g.setColor(Color.blue);
       g.fillOval((int)(t/dt),(int)(my-(x1+x2)),3,3);
     }
  }
 }

Hier wird die grafische Ausgabe vorbereitet und ausgeführt.

Sollte ihr Interesse weiterhin vorhanden sein, dürfen sie sich am gesamten Programm "erfreuen".

Diese Seite wurde von KLAUS KOREN erstellt. Ich danke wie immer niemanden, obwohl Fleiss Phillipp einen nicht unbedeutenden Anteil leistete. und CIAO!!!!!!