Vi prøver igjen med litt knask for fysikklærarar med sans for klassiske fysikkproblem.
Her er 3 skråplan utan friksjon (Her er trekanten 250m x 250m, men det er ikkje viktig).
Velg knekkpunkt med museklikk. Finn knekkpunkt som gir maksimal tidsdifferans,
og knekkpunkt når A og B brukar like lang tid ved å prøve ut
simuleringa. Utfordring: Finn analytisk uttrykk for det samme! Send svar til redaktøren.
Har du julenøtter etter julestria? Store nøtter, eller småknask! Send inn til redaktøren.
Er du interessert i JAVA-programmering? Her er kjeldkoden utan komentarer:
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class Skraaplan extends Applet
implements Runnable,MouseListener
{
int hgde=400;
int breidde=400;
int x0=50;
int y0=50;
int x3=350;
int y3=350;
int x2=150;
int y2=250;
double vx=0;
double vy=0;
double ux=0;
double uy=0;
double s03=Math.sqrt((y3-y0)*(y3-y0)+(x3-x0)*(x3-x0));
double sin03=(double)(y3-y0)/s03;
double cos03=(double)(x3-x0)/s03;
double s02=Math.sqrt((y2-y0)*(y2-y0)+(x2-x0)*(x2-x0));
double sin02=(double)(y2-y0)/s02;
double cos02=(double)(x2-x0)/s02;
double s23=Math.sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));
double sin23=(double)(y3-y2)/s23;
double cos23=(double)(x3-x2)/s23;
double a03=9.81*sin03;
double a02=9.81*sin02;
double a23=9.81*sin23;
double s1=0;
double s2=0;
double s3=0;
int xa=x0;
int ya=y0;
int xb=x0;
int yb=y0;
double t=0.0;
double t2=0.0;
double va=0.0;
double ta=0;
double tb=0;
double tdiff=0;
double x2rel=(double)(int)((double)(x2-x0)*100/(x3-x0))/100;
double y2rel=(double)(int)((double)(y3-y2)*100/(y3-y0))/100;
Thread mintraad;
public void mouseClicked(MouseEvent e)
{
return;
}
public void mouseEntered(MouseEvent e)
{
return;
}
public void mouseExited(MouseEvent e)
{
return;
}
private void nullstill2()
{
vx=0;
vy=0;
ux=0;
uy=0;
s02=Math.sqrt((y2-y0)*(y2-y0)+(x2-x0)*(x2-x0));
sin02=(double)(y2-y0)/s02;
cos02=(double)(x2-x0)/s02;
s23=Math.sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));
sin23=(double)(y3-y2)/s23;
cos23=(double)(x3-x2)/s23;
a02=9.81*sin02;
a23=9.81*sin23;
s1=0;
s2=0;
s3=0;
t=0.0;
xb=x0;
yb=x0;
t2=0;
va=0.0;
xa=x0;
ya=y0;
}
private void nullstill3()
{
s03=Math.sqrt((y3-y0)*(y3-y0)+(x3-x0)*(x3-x0));
sin03=(double)(y3-y0)/s03;
cos03=(double)(x3-x0)/s03;
a03=9.81*sin03;
}
public void mousePressed(MouseEvent e)
{
return;
}
public void mouseReleased(MouseEvent e)
{
x2=e.getX();
y2=e.getY();
nullstill2();
nullstill3();
x2rel=(double)(int)((double)(x2-x0)*100/(x3-x0))/100;
y2rel=(double)(int)((double)(y3-y2)*100/(y3-y0))/100;
repaint();
return;
}
public void init()
{
addMouseListener(this);
nullstill2();
nullstill3();
}
Image OffScreenImage;
public void update(Graphics g)
{
if (OffScreenImage==null)
OffScreenImage=createImage(hgde,breidde);
Graphics
offScreenGraphics=OffScreenImage.getGraphics();
offScreenGraphics.setColor(getBackground());
offScreenGraphics.fillRect(0,0,hgde,breidde);
offScreenGraphics.setColor(getForeground());
paint(offScreenGraphics);
g.drawImage(OffScreenImage,0,0,this);
offScreenGraphics.dispose();
}
public void paint(Graphics g)
{
g.drawLine(x0,y0,x0,y3);
g.drawLine(x0,y3,x3,y3);
g.drawLine(x3,y3,x0,y0);
g.drawLine(x0,y0,x2,y2);
g.drawLine(x2,y2,x3,y3);
g.drawString("Velg knekkpunkt med
museklikk",50,15);
g.drawString("("+x2rel+","+y2rel+")",x2-25,y2+25);
g.drawString("A",xa,ya);
g.drawString("B",xb,yb);
if (tdiff!=0)
g.drawString("Diff="+tdiff+"sek",x3-50,y3+30);
g.drawString("2000,
L.O.Tveita",breidde-100,hgde);
}
public void start()
{
if (mintraad==null)
{
mintraad=new
Thread(this);
mintraad.start();
}
}
public void stop()
{
if (mintraad!=null)
{
mintraad.stop();
mintraad=null;
}
}
public void run()
{
while(true)
{
try
{
Thread.sleep(50);
if((xa<x3)&&(xb<x3)){
t=t+0.05;
s1=0.5*a03*t*t;
if(s1<s03){
xa=x0+(int)(s1*cos03);
ya=y0+(int)(s1*sin03);
ta=t;
}
s2=0.5*a02*t*t;
s3=va*(t-t2)+0.5*a23*(t-t2)*(t-t2);
if(s2<=s02){
t2=t;
xb=x0+(int)(s2*cos02);
yb=y0+(int)(s2*sin02);
va=a02*t;
tb=t;
}
else if(s3<s23){
xb=x2+(int)(s3*cos23);
yb=y2+(int)(s3*sin23);
tb=t;
}
tdiff=((double)(int)((ta-tb)*100))/100;
repaint();
}
else stop();
}
catch(InterruptedException e)
{
stop();
}
}
}
}