[an error occurred while processing this directive]
Rheinland-Pfalz;
Informatik
Letzte Aktualisierung: 17.7.2009; Claus Schmitt
| Startseite Informatik-Rheinland-Pfalz |
Physik-Applets
Fadenpendel
Fadenpendel
(durchgehend schwingend)
Newtons Wiege
Mathematik-Applets
Thales
Pythagoras
Primzahlsieb
Quellen
zurück
zur Java Startseite
Dies
Angebot ist noch in der Entwicklung:|
I FadenpendelUm das Verständnis zu Newtons Wiege (Energie- und Impulserhaltung) zu erleichtern, haben wir ein Applet vorgeschaltet, in dem ein einfaches Fadenpendel realisiert wird. (Browser aktualisieren für eine erneute Schwingung).
// Java-Applet Fadenpendel (Beispiel für eine einfache Animation)
// Kompilierung mit J2SDK 1.6.0
// Walter Fendt,
// Vorschläge zur didaktischen Reduzierung
// Claus Jürgen Schmitt
// 04.04.2009
import java.awt.*; import javax.swing.*; public class Fadenpedel extends JApplet implements Runnable { //----------------------------------------------------------------------------- // Konstanten //----------------------------------------------------------------------------- final int R = 20; // Radius Pendelkörper (Pixel) final int R2 = 2*R; // Durchmesser Pendelkörper (Pixel) final int L = 200; // Pendellänge (Pixel) final double A = 0.4; // Amplitude (Bogenmaß); // entspricht etwa 23° final double T = 2; // Schwingungsdauer (s) final double OMEGA = 2*Math.PI/T; // Kreisfrequenz (1/s) final Color FZF = Color.yellow; // Hintergrundfarbe Zeichenfläche //----------------------------------------------------------------------------- // Attribute //----------------------------------------------------------------------------- Container cp; // Container für Komponenten int breite, höhe; // Abmessungen (Pixel) Zeichenfläche zf; // Zeichenfläche int ax, ay; // Aufhängung des Pendels (Pixel) double phi; // Phase (Bogenmaß) Thread thr; // Prozess für Animation double t; // Zeit (s) //-----------------------------------------------------------------------------
// Weitere Methoden
//-----------------------------------------------------------------------------
// Start-Methode:
public void start () {
cp = getContentPane(); // Container für Komponenten
cp.setLayout(null); // Hartes Layout (Pixelangaben)
Dimension dim = getSize(); // Abmessungen (aus HTML-Datei)
breite = dim.width; // Breite (Pixel)
höhe = dim.height; // Höhe (Pixel)
ax = breite/2; // x-Koordinate Aufhängung (Pixel)
ay = 40; // y-Koordinate Aufhängung (Pixel)
zf = new Zeichenfläche(); // Zeichenfläche (innere Klasse)
zf.setBackground(FZF); // Hintergrundfarbe Zeichenfläche
zf.setBounds(0,0,breite,höhe); // Position/Abmessungen Zeichenfläche
cp.add(zf); // Zeichenfläche zum Container hinzufügen
thr = new Thread(this); // Prozess für Animation
thr.start(); // Prozess starten
}
// Stopp-Methode:
public void stop () {
thr = null; // Prozess für Garbage Collection freigeben
cp.removeAll(); // Komponenten entfernen
}
// Methode für Animation // (Schleife über eine Schwingung): public void run () {
long t0, t1;
t0 = System.currentTimeMillis(); // Zeit in ms
while (thr == Thread.currentThread()) { // Solange Prozess thr aktiv ...
if (t <= T) // ... Falls erste Periode ...
zf.repaint(); // ... Zeichenfläche neu zeichnen
try {Thread.sleep(50);} // ... 50 ms Unterbrechung
catch (InterruptedException ie) {}
t1 = System.currentTimeMillis(); // ... Zeit in ms
t += (t1-t0)/1000.0; // ... Zeit-Variable aktualisieren (in s)
t0 = t1; // ... Zeit in ms
}
}
// Pendel zeichnen: // g ... Grafik-Kontext void pendel (Graphics g) {
// Zur Zeit t = 0 ist das Pendel
// nach links maximal ausgelenkt.
phi = A*Math.cos(OMEGA*t); // Phase (Bogenmaß)
// Im Gradmaß Auslenkung
// etwa von 23° bis -23°
int px, py; // Mittelpunktskoordinaten Pendelkörper
px = (int)Math.round(ax-L*Math.sin(phi)); // x-Koordinate Kugelmittelpunkt
py = (int)Math.round(ay+L*Math.cos(phi)); // y-Koordinate Kugelmittelpunkt
g.setColor(Color.black); // Faden
g.drawLine(ax,ay,px,py);
g.setColor(Color.blue); // Pendelkörper (Kreisfläche)
g.fillOval(px-R,py-R,R2,R2);
g.setColor(Color.black); // Pendelkörper (Kreisrand)
g.drawOval(px-R,py-R,R2,R2);
}
// --------------------------------------------------------------------------
// Innere Klasse Zeichenfläche:
class Zeichenfläche extends JPanel { // Grafik-Ausgabe: // g ... Grafik-Kontext public void paint (Graphics g) {
super.paint(g); // Hintergrund zeichnen
g.setColor(Color.black); // Aufhängung zeichnen
g.fillRect(40,ay-4,breite-80,4);
pendel(g); // Pendel zeichnen
}
} // Ende Zeichenfläche
} // Ende Fadenpendel
|
|
Fadenpendel
(durchgehend schwingend)
Soll das Pendel kontinuierlich schwingen, genügt es, in der inneren Klasse Zeichenfläche in der Methode paint()vor dem Pendelaufruf folgende Schleife einzufügen: while (t >= T) t -= T; (vgl. Fadenpendel1.java in Java-Quelltexte dann Applet\WFendt ). |
|
Newtons
Wiege
(Energie- und Impulserhaltung)
// Java-Applet NWiege
// Newtons Wiege (Demonstration von Impuls- und Energieerhaltungssatz)
// Kompilierung mit J2SDK 1.6.0
// Walter Fendt
// 03.11.1997 - 24.03.2009
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class NWiege extends JApplet implements Runnable { //-----------------------------------------------------------------------------
// Konstanten
//-----------------------------------------------------------------------------
final int N = 5; // Zahl der Pendel final int R = 20; // Radius Pendelkörper (Pixel) final int R2 = 2*R; // Durchmesser Pendelkörper (Pixel) final int L = 200; // Pendellänge (Pixel) final double A = 0.4; // Amplitude (Bogenmaß) final double T = 2; // Schwingungsdauer (s) final double OMEGA = 2*Math.PI/T; // Kreisfrequenz (1/s) final Color FZF = Color.yellow; // Hintergrundfarbe Zeichenfläche final Color FSF = Color.green; // Hintergrundfarbe Schaltfläche0 final Font SANSSERIF // Logischer Font = new Font("SansSerif",Font.BOLD,12); //-----------------------------------------------------------------------------
// Attribute
//-----------------------------------------------------------------------------
Container cp; // Content Pane int breite, höhe, höhe0; // Abmessungen (Pixel) Zeichenfläche zf; // Zeichenfläche Schaltfläche0 sf; // Schaltfläche0 JComboBox ch; // Auswahlfeld int ax, ay; // Aufhängung des linken Pendels double phi; // Phase (Bogenmaß) Thread thr; // Prozess für Animation double t; // Zeit (s) //-----------------------------------------------------------------------------
// Weitere Methoden
//-----------------------------------------------------------------------------
// Start-Methode:
public void start () {
cp = getContentPane(); // Container für Komponenten
cp.setLayout(null); // Hartes Layout (Pixelangaben)
Dimension dim = getSize(); // Abmessungen (aus HTML-Datei)
breite = dim.width; // Breite (Pixel)
höhe = dim.height; // Gesamthöhe (Pixel)
höhe0 = 280; // Höhe der Zeichenfläche (Pixel)
ay = 40; // Aufhängung, unterer Rand
ax = breite/2-(N-1)*R; // Aufhängung (linkes Pendel)
zf = new Zeichenfläche(); // Zeichenfläche (innere Klasse)
zf.setBackground(FZF); // Hintergrundfarbe Zeichenfläche
zf.setBounds(0,0,breite,höhe0); // Position/Abmessungen Zeichenfläche
cp.add(zf); // Zeichenfläche hinzufügen
sf = new Schaltfläche0(FSF,SANSSERIF); // Zur Klasse Schaltfläche0 siehe unten
sf.setBounds(0,höhe0,breite,höhe-höhe0);// Position/Abmessungen Schaltfläche0
String text // Zeichenkette für Label
= "Zahl der ausgelenkten Kugeln:";
sf.hinzufügen(new JLabel(text), // Label hinzufügen
FSF,0,0,1,10,10,10,0);
ch = new JComboBox(); // Auswahlfeld
for (int i=1; i<=N; i++) // Felder für die Zahl ...
ch.addItem(" "+i+" "); // ... der ausgelenkten Kugeln
ch.setSelectedIndex(1); // Voreinstellung: Zwei Kugeln ausgelenkt
sf.hinzufügen(ch, // Auswahlfeld hinzufügen
Color.white,1,0,1,10,10,10,10);
text = "© W. Fendt 1997"; // Zeichenkette für Label
sf.hinzufügen(new JLabel(text), // Label hinzufügen
FSF,2,0,1,10,30,10,10);
cp.add(sf); // Schaltfläche0 hinzufügen
thr = new Thread(this); // Prozess für Animation
thr.start(); // Prozess starten
}
// Stopp-Methode:
public void stop () {
thr = null; // Prozess für Garbage Collection freigeben
cp.removeAll(); // Komponenten entfernen
}
// Methode für Animation (Endlosschleife):
public void run () {
long t0, t1;
t0 = System.currentTimeMillis(); // Zeit in ms
sf.repaint(); // Schaltfläche0 neu zeichnen
while (thr == Thread.currentThread()) { // Solange Prozess thr aktiv ...
zf.repaint(); // ... Zeichenfläche neu zeichnen
try {Thread.sleep(50);} // ... 50 ms Unterbrechung
catch (InterruptedException ie) {}
t1 = System.currentTimeMillis(); // ... Zeit in ms
t += (t1-t0)/1000.0; // ... Zeit seit der letzten Ablesung in s
t0 = t1; // ... Zeit in ms
}
}
// Einzelnes Pendel: // g ... Grafik-Kontext // i ... Nummer (0 bis N-1) void pendel (Graphics g, int i) {
while (t >= T) t -= T; // Bedingung 0 <= t < T erzwingen
phi = A*Math.cos(OMEGA*t); // Phase (Bogenmaß)
int k = ch.getSelectedIndex()+1; // Zahl der ausgelenkten Kugeln
int px, py; // Mittelpunktskoordinaten der Kugel
boolean links = (t < T/4 || t >= 3*T/4);// Auslenkung nach links
if ((links && i < k) // Kugel nach links ausgelenkt
|| (!links && i >= N-k)) { // Kugel nach rechts ausgelenkt
px = (int)Math.round(ax+i*R2-L*Math.sin(phi)); // x-Koordinate Kugelmittelpunkt
py = (int)Math.round(ay+L*Math.cos(phi)); // y-Koordinate Kugelmittelpunkt
}
else {px = ax+i*R2; py = ay+L;} // Kugel in Ruhe
g.setColor(Color.black); // Faden
g.drawLine(ax+i*R2,ay,px,py);
g.setColor(Color.blue); // Pendelkörper (Kreisfläche)
g.fillOval(px-R,py-R,R2,R2);
g.setColor(Color.black); // Pendelkörper (Kreisrand)
g.drawOval(px-R,py-R,R2,R2);
}
// --------------------------------------------------------------------------
// Innere Klasse Zeichenfläche:
class Zeichenfläche extends JPanel { // Grafik-Ausgabe:
// g ... Grafik-Kontext
public void paint (Graphics g) {
super.paint(g); // Hintergrund zeichnen
g.setColor(Color.black); // Aufhängung zeichnen
g.fillRect(breite/2-(N+1)*R,ay-4,(N+1)*R2,4);
for (int i=0; i<N; i++) pendel(g,i); // Einzelne Pendel zeichnen
}
} // Ende Zeichenfläche
}
// Ende NWiege |
| Mathematik-Applets vgl. |
|
Herrn
Walter
Fendt /
Paul-Klee-Gymnasium
Gersthofen / Fachlehrer für Mathematik / Physik / Informatik bin ich für hilfreichen Anregungen und die Überarbeitung der Applet-Quelltexte sehr dankbar. Außerdem danke ich für den kommentierten Quelltext der beiden Applets, welche er extra für diese ZUM-Seite neu überarbeitet hat! |
| Startseite Informatik-Rheinland-Pfalz |