Mam do napisania program, w którym będzie okrąg poruszający się po poziomej belce tam i z powrotem. Belka ta ma się wahać, w zależności od tego, w którym miejscu będzie się znajdował okrąg (w położeniu poziomym ma być tylko wtedy, gdy środek okręgu będzie dokładnie nad środkiem belki). I tu pojawia się problem. Nie wiem jak zrobić tak, żeby ta belka wahała się bez przerwy, bo wychyla się w lewo, potem zaraz w prawo, potem jeszcze raz w lewo i zostaje w takim położeniu. Zamieszczam kod:
public class Wheel extends GObject {
public double alpha, beta, angle=0;
@Override
public void rotate(){
alpha += Math.PI/24.0;
beta = Math.PI/72.0;
}
@Override
public void drawMe(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
int dx0 = g2d.getClipBounds().width/2;
int dy0 = -g2d.getClipBounds().height/3;
int minxy = (dx0>=-dy0) ? -dy0:dx0;
AffineTransform saveAT = g2d.getTransform();
t = new AffineTransform();
t.scale(1, -1);
t.translate(minxy+alpha*minxy,dy0);
t.rotate(-alpha);
g2d.setTransform(t);
g2d.drawLine(-minxy, 0, minxy, 0);
g2d.drawLine( 0, -minxy, 0, minxy);
g2d.drawOval(-minxy, -minxy, minxy*2, minxy*2);
g2d.setTransform(saveAT);
t = new AffineTransform();
t.translate(dx0, -2*dy0);
t.rotate(-beta);
++angle;
if(angle==4){
t.rotate(2*beta);
}
g2d.setTransform(t);
g2d.drawLine(-minxy*2, 0, minxy*2, 1);
g2d.setTransform(saveAT);
}
}