| Seminar
Physik mit Java - Startseite
|
|---|
Im ersten Teil des Seminars werden bis ca. zu den Weihnachtsferien die physikalischen Grundlagen besprochen.
Dabei soll jeder Seminarteilnehmer ein Kurzreferat zu einem Thema halten.
Im zweiten Teil bis ca. zu den Osterferien erarbeiten wir uns die notwendigen Kenntnisse, wie man Bewegungen in Java programmieren kann.
Im dritten Teil nach den Osterferien werden die Seminarthemen festgelegt und es wird an den Seminaren gearbeitet.
Gegen Ende des Schuljahres sollen die ersten Zwischenergebnisse präsentiert werden.
Im Semester 12/1 wird die Seminararbeit beendet und präsentiert.
Beispiel:
![]()
Versuche anhand des Quelltextes herauszufinden, welche physikalische Bewegung hier programmiert wurde.
Importiere anschließend das Applet nach BlueJ (Kopiere dazu den Ordner einkoerper2dt1 in dein Arbeitsverzeichnis, öffne ein neues leeres BlueJ-Projekt und importiere dann diesen Ordner nach BlueJ.)
Verändere anschließend die Startparameter und beobachte die Wirkung auf die Bahn.
/** * @(#)Einkoerper2dt1.java * * Sample Applet application * * @author * @version 1.00 08/11/22 */ import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; import java.awt.event.*;
public class Einkoerper2dt1 extends Applet {
class Vektor {
double x, y;
Vektor(double x, double y) { this.x = x; this.y = y; }
Vektor(Vektor v) { x = v.x; y = v.y; }
double norm() { return Math.sqrt(x * x + y * y); }
void mal(double s) { x *= s; y *= s; }
void plus(Vektor v) { x += v.x; y += v.y; }
void plusvs(Vektor v, double s) { x += v.x * s; y += v.y * s; }
}
class Massenpunkt {
Vektor q, p;
double m;
Massenpunkt(double qx, double qy, double px, double py, double m) {
q = new Vektor(qx, qy);
p = new Vektor(px, py);
this.m = m;
}
void euler(double dt, Vektor kraft) {
q.plusvs(p, dt / m);
p.plusvs(kraft, dt);
}
}
double xScale, yScale, xOffset, yOffset;
void setRange(double xMin, double xMax, double yMin, double yMax) {
xScale = getSize().width / (xMax - xMin);
yScale = -getSize().height / (yMax - yMin);
xOffset = -xMin * xScale;
yOffset = getSize().height - yMin * yScale;
}
int sx(double x) { return (int)(x * xScale + xOffset); }
int sy(double y) { return (int)(y * yScale + yOffset); }
Vektor Feder(Massenpunkt M) {
final double ax = 1.0, ay = 1.0; // Federkonstanten
return new Vektor(-ax * M.q.x, -ay * M.q.y); }
public void paint(Graphics g) {
Massenpunkt M = new Massenpunkt(1.0, 0.0, 0.5, 1.5, 1.0);
Vektor kraft, q_alt;
double tmax = 10.0, dt = 0.01;
setRange(-2.0, 2.0, -2.0, 2.0);
g.setColor(Color.blue);
for(double t = 0.0; t <= tmax; t += dt) {
q_alt = new Vektor(M.q);
kraft = Feder(M);
M.euler(dt, kraft);
g.drawLine(sx(q_alt.x), sy(q_alt.y), sx(M.q.x), sy(M.q.y));
try{ Thread.sleep(5); } catch(InterruptedException e) {};
}
}
}