AffineTransform - problem z rotacją

0

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

}
 
0

Po pierwsze musisz zaproponować jakiś model matematyczny tego układu. Najprościej byłoby oprzeć się o ruch harmoniczny, bo wzory na prędkość i po łożenie znajdziesz w książce od fizyki albo na wikipedii. Dalej jak będziesz miał model to możesz zaimplementować silnik graficzny, który przerysowuje widok w określonych odstępach czasu. Przy takim podejściu może się okazać, że łatwiej to zrobić bez transformacji. Ale jak jest wymagana, to też się da. ostatni punkt, to przekonać nauczyciela, że w treści zadania nie kazał opierać się na modelu fizycznie realnym :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1