any interest to create a newton's cradle for learning objective:

conservation of momentum

conservation of kinetic energy

The current well reference applet is this one by walter but it is still can be modified to a learner centered exploration simulation instead of a show and tell"see".

good idea?

reference:

found the source code in german from http://duepublico.uni-duisburg-essen.de/servlets/DerivateServlet/Derivate-81/Pendel5.java
[code]// Applet zur Simulation von fünf Pendeln
// (Demonstration von Impuls- und Energieerhaltungssatz
// 03.11.1997 - 22.05.1998

import java.applet.*;
import java.awt.*;
import java.util.*;

public class Pendel5 extends Applet implements Runnable {

int width, height;
Graphics g1, g2;
Image offscreen;
Choice ch;                        // Auswahlbox für Zahl der ausgelenkten Pendel
final int n = 5;                  // Zahl der Pendel
int k = 2;                        // Zahl der ausgelenkten Pendel
final int r = 20;                  // Radius der Pendelkörper
final int ax = 120, ay = 50;      // Aufhängung des linken Pendels
final int l = 200;                // Pendellänge
final double A = 0.4;              // Amplitude (Bogenmaß)
final double T = 2;                // Schwingungsdauer (s)
final double omega = 2*Math.PI/T;  // Kreisfrequenz (1/s)
double phi;                        // Phase (Bogenmaß)
Date d;
long t0 = 0, t1 = 0;              // Zeit (ms)
double t = 0;                      // Zeit (s)
int px, py;                        // Mittelpunkt der Pendelkörper

public void init() {
width = bounds().width; height = bounds().height;
g1 = getGraphics();
offscreen = createImage(width,height); g2 = offscreen.getGraphics();
ch = new Choice();
}

public void drawPendulum (int i) {
while (t >= T) t -= T;
phi = A*Math.cos(omega*t);
if (((t<0.25*T || t>=0.75*T) && i=0.25*T && t<0.75*T && i>=n-k)) {
px = (int)(ax+i*2*r-l*Math.sin(phi)+0.5);
py = (int)(ay+l*Math.cos(phi)+0.5);
g2.setColor(Color.black); g2.drawLine(ax+i*2*r,ay,px,py);
g2.setColor(Color.blue); g2.fillOval(px-r,py-r,2*r,2*r);
}
else {
g2.setColor(Color.black); g2.drawLine(ax+i*2*r,ay,ax+i*2*r,ay+l);
g2.setColor(Color.blue); g2.fillOval(ax+i*2*r-r,ay+l-r,2*r,2*r);
}
}

public void paint (Graphics g) {
int i;
g.setColor(Color.yellow); g.fillRect(0,0,width,height);
g.setColor(Color.black); g.fillRect(50,ay-2,300,4);
for (i=0;i<5;i++) drawPendulum(i);
}

public boolean action (Event e, Object o) {
if (e.target==ch) k = ch.getSelectedIndex()+1;
paint(g2); g1.drawImage(offscreen,0,0,this);
return true;
}

public void start () {
}
}

public void stop () {
}

// Laufen des Programms (Endlosschleife):

public void run () {
d = new Date(); t0 = d.getTime();
while (true) {
paint(g2); g1.drawImage(offscreen,0,0,this);
d = new Date();
t1 = d.getTime(); t += (t1-t0)/1000.0;
t0 = t1;
}
}

}[/code]