/* Ćwiczenie 12 sem.2
*/
// SYMULACJA KULI BILARDOWEJimport java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
public class Animacja1 extends javax.swing.JFrame implements ActionListener { Kula K;
Timer timer = new Timer(10, this); //zegar tykający co 10 ms public Animacja1() { //konstruktor klasy Animacja1
initComponents();
setSize(600, 400);
setBackground(Color.yellow);
K = new Kula(10, 30, Color.red);
timer.start(); //uruchomienie zegara }
public void paint(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
K.przesuń(getWidth(), getHeight());
K.rysuj(g);
}
public void actionPerformed(ActionEvent e) { repaint();
}
public static void main(String args[]) { }
} // KONIEC KLASY ANIMACJA1
import java.awt.Color; // KLASA KULA import java.awt.Graphics;
public class Kula { Color kolor;
int x = 0, y = 0, d = 20, dx = 3, dy = 5;
public Kula(int x0, int y0, Color k) { //konstruktor klasy Kula x = x0;
y = y0;
kolor = k;
}
void rysuj(Graphics g){
g.setColor(kolor);
g.fillOval(x, y, d, d);
}
void przesuń(int zakresX, int zakresY) { x += dx;
y += dy; // zmiana położenia – przesunięcie o (dx, dy) if (x >= zakresX - d || x <= 0) {
dx = -dx; } // odbicie od krawędzi okna – zmiana kierunku ruchu if (y >= zakresY - d || y <= 30) { dy = -dy;}
} }
// SYMULACJA WIELU KUL import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Timer;
public class Animacja2 extends javax.swing.JFrame implements ActionListener, MouseListener { Kula K;
List< Kula> LK = new ArrayList<>();
Timer timer = new Timer(10, this); //zegar tykający co 10 ms public Animacja2() { //konstruktor klasy Animacja2
initComponents();
setSize(600, 400);
setBackground(Color.yellow);
addMouseListener(this);
timer.start(); //uruchomienie zegara }
public void paint(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
for (Kula K : LK) {
K.przesuń(getWidth(), getHeight());
K.rysuj(g);
} }
public void actionPerformed(ActionEvent e) { repaint();
}
public void mouseClicked(MouseEvent e) { } public void mousePressed(MouseEvent e) { int x = e.getX();
int y = e.getY();
if (e.getButton() == MouseEvent.BUTTON1) {
K = new Kula(x, y, Color.red); // tworzenie kuli lewym przyciskiem myszy LK.add(K);
} else { LK.clear(); } //usuwanie wszystkich kul prawym lub środkowym przyciskiem myszy }
public void mouseReleased(MouseEvent e) { } public void mouseEntered(MouseEvent e) { } public void mouseExited(MouseEvent e) { }
public static void main(String args[]) { }
} // KONIEC KLASY ANIMACJA2
import java.awt.Color; // KLASA KULA import java.awt.Graphics;
public class Kula { Color kolor;
int x = 0, y = 0, d = 20, dx = 3, dy = 5;
public Kula(int x0, int y0, Color k) { //konstruktor klasy Kula x = x0;
y = y0;
kolor = k;
}
void rysuj(Graphics g){
g.setColor(kolor);
g.fillOval(x, y, d, d);
}
void przesuń(int zakresX, int zakresY) { x += dx;
y += dy; // zmiana położenia – przesunięcie o (dx, dy)
if (x >= zakresX - d || x <= 0) { dx = -dx; } // odbicie od krawędzi okna – zmiana kierunku ruchu if (y >= zakresY - d || y <=30) { dy = -dy;}
} }
/* Ćwiczenie 12 sem.2
*/
// SYMULACJA WAHADŁA MATEMATYCZNEGO import java.awt.Color;import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.Timer;
public class Animacja3 extends javax.swing.JFrame implements ActionListener, KeyListener { Wahadło W;
Timer timer = new Timer(10, this); //zegar tykający co 10 ms public Animacja3() { //konstruktor klasy Animacja3 initComponents();
W = new Wahadło(getWidth() / 2, 30, 250, Color.blue);
setFocusable(true);
addKeyListener(this);
timer.start(); //uruchomienie zegara }
public void paint(Graphics g) {
g.clearRect(0, 0, getWidth(), getHeight());
W.wychyl();
W.rysuj(g);
}
public void actionPerformed(ActionEvent e) { repaint();
}
public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { int a = e.getKeyCode();
if (a == KeyEvent.VK_RIGHT) { W.zmień(0.05, 0); } // zmiana kąta wychylenia o 0.05 radiana if (a == KeyEvent.VK_LEFT) { W.zmień(-0.05, 0); }
if (a == KeyEvent.VK_UP) { W.zmień(0, -2); } // zmiana długości nitki o 2 piksele if (a == KeyEvent.VK_DOWN) { W.zmień(0, 2); }
if (a == KeyEvent.VK_SPACE) { W.stop(); } // zatrzymanie ruchu }
public void keyReleased(KeyEvent e) { int a = e.getKeyCode();
if (a == KeyEvent.VK_RIGHT || a == KeyEvent.VK_LEFT || a == KeyEvent.VK_UP || a == KeyEvent.VK_DOWN) { W.start();
} }
public static void main(String args[]) { }
} // KONIEC KLASY ANIMACJA3
import java.awt.Color; // KLASA WAHADŁO import java.awt.Graphics;
public class Wahadło {
double t; // czas
double alfa0, alfa; // początkowy i bieżący kąt wychylenia double dt = 0.004; // przyrost czasu
int x0, y0; // współrzędne punktu zaczepienia wahadła int d; // długość nitki
Color kolor; // kolor ciężarka
public Wahadło(int xp, int yp, int dl, Color k) { //konstruktor klasy Wahadło x0 = xp;
y0 = yp;
d = dl;
kolor = k;
}
void rysuj(Graphics g) { g.setColor(kolor);
int x = x0 + (int) (d * Math.sin(alfa)); // x, y – współrzędne położenia ciężarka wahadła int y = y0 + (int) (d * Math.cos(alfa));
g.drawLine(x0, y0, x, y); // linia od punktu x0, y0 do punktu x, y g.fillOval(x - 10, y - 10, 20, 20);
} // koło o średnicy 20, ze środkiem w punkcie x, y void start() {
t = 0; alfa0 = alfa;
}
void wychyl() { if (alfa0 != 0) {
t += dt; // przyrost czasu o wartość dt
alfa = alfa0 * Math.cos(Math.sqrt(981 / d / 0.0375) * t); //równanie wahadła matematycznego }
}
void zmień(double da, int dl) {
d += dl; if (d < 10) { d = 10; } // minimalna długość nitki wynosi 10 alfa = alfa + da;
alfa0 = 0;
}
void stop() { alfa0 = 0;
alfa = 0;
} }