Seminar Physik mit Java - Startseite

 Inhalt des Seminars    
0. Startseite   Beispielarbeit: Elastischer Stoß
1. Physikalische Grundlagen     Beispielarbeit: Schiefe Ebene
2. Java   Beispielanwendung: Gedämpfte Schwingung
3. Seminararbeiten   Beispielanwendung: Raketengleichung
  Beispielanwendung: Inelastischer Stoß
   
     
     
     
     
         

Ablauf des Seminars

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:

 

Übung

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) {};
   }
   } 
}