Две вращающиеся точки - Java
Формулировка задачи:
Задание состоит в том чтобы остались только две точки вращающиеся а у меня линии, и еще не могу сделать чтобы при нажатии на кнопку они вращались в другую сторону, они начинают вращаться сначала а потом снова начинают крутиться так же как при первоначальном запуске, помогите пожалуйста исправить. Вот код работаю в эклипсе
package prog7;
import java.applet.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class myprogseven extends Applet implements Runnable {
Thread t = null; // поток
int i = 0,// i -- текущее положение;
x1 = 200,
y1 = 200, //x1, y1 -- координаты первого
// конца отрезка
x3 = 50, y3 = 50,
x4 = 110, y4 = 110,
x2 = 220, y2 = 50,
num = 90; // x2, y2 -- координаты второго конца отрезка; num --
// кол-во шагов по окружности (90 -- шаг на 4 градуса)
double r2 = 100, ugi2 = 2* Math.PI / num, ug2; // r -- длина отрезка;
double r3 = 100, ugi3 = Math.PI / num, ug3;// ugi -- угол поворота,
double r4 = 100, ugi4 = Math.PI / num, ug4;// ug -- расчёт текущего угла
public void init() {
this.setSize(380, 380); // задаём размер апплета
}
public void start() {
if (t == null) // если поток пуст
t = new Thread(this); // создаём новый
t.start(); // запускаем поток
}
public void run() {
while (true) // выполняем в бесконечном цикле
{
try {
Thread.sleep(25); // задержка в мс
ug2 = i++ * ugi2; // рассчитываем текущий угол
x2 = (int) Math.round(x1 + r2 * Math.cos(ug2)); // считаем
// координаты
// второго конца
y2 = (int) Math.round(y1 + r2 * Math.sin(ug2));
x3 = (int) Math.round(x1 + r3 * Math.tan(ug3)); // считаем
// координаты
// второго конца
y3 = (int) Math.round(y1 + r3 * Math.sin(ug3));
if (i >= num)
i = 0; // если прошли окружность, то начинаем снова
repaint(); // вызываем отрисовку отрезка
} catch (InterruptedException e) {
}
Button b1 = new Button("Кнопка 1");
b1.setBounds(1,100,100,20);
add(b1);
b1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event){
try {
Thread.sleep(25); // задержка в мс
ug2 = i++ * ugi2; // рассчитываем текущий угол
x2 = (int) Math.round(x1 - r2 * Math.cos(ug2)); // считаем
// координаты
// второго конца
y2 = (int) Math.round(y1 + r2 * Math.sin(ug2));
x3 = (int) Math.round(x1 + r3 * Math.tan(ug3)); // считаем
// координаты
// второго конца
y3 = (int) Math.round(y1 + r3 * Math.sin(ug3));
if (i >= num)
i = 0; // если прошли окружность, то начинаем снова
repaint(); // вызываем отрисовку отрезка
}catch(InterruptedException e){
}
}});
}
}
public void paint(Graphics dr) {
{
//dr.setColor(Color.green);
dr.drawLine(x3, y3, x2, y2);
dr.setColor(Color.blue);
dr.drawLine(x3, y3, x2-6, y2-50);
//dr.drawLine(x3, x3, x4, y4);
}
}
}Решение задачи: «Две вращающиеся точки»
textual
Листинг программы
public void init() {
this.setSize(380, 380); // задаём размер апплета
this.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(e.getX() + " " + e.getY());
}
});
}