Движение точек по окружности - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Проблема вот в чем: нужно сделать анимацию, подобную этой: LINK Но никак не могу сообразить, как сделать смещение точек, чтобы был сам эффект волны. Вот код:
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.geom.Ellipse2D;
  6. public class PointOnCircle extends JComponent {
  7. private double angle;
  8. public PointOnCircle() {
  9. angle = 0;
  10. Timer timer = new Timer(1, new ActionListener() {
  11. @Override
  12. public void actionPerformed(ActionEvent e) {
  13. angle += 0.05;
  14. repaint();
  15. }
  16. });
  17. timer.start();
  18. }
  19. protected void paintComponent(Graphics g) {
  20. int width = getWidth();
  21. int height = getHeight();
  22. g.setColor(Color.white);
  23. g.fillRect(0, 0, width, height);
  24. g.setColor(Color.black);
  25. Graphics2D g2d = (Graphics2D) g;
  26. g2d.setStroke(new BasicStroke(1f));
  27. g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  28. for (int i = 0; i <= width; i += 25) {
  29. for (int j = 0; j <= height; j += 25) {
  30. double x = width - i;
  31. double y = height - j;
  32. double r = 20;
  33. g2d.draw(circle(x, y, r));
  34. g2d.setColor(Color.black);
  35. x += r * Math.cos(angle);
  36. y += r * Math.sin(angle);
  37. r = 5;
  38. g2d.fill(circle(x, y, r));
  39. }
  40. }
  41. }
  42. private Shape circle(double x, double y, double r) {
  43. return new Ellipse2D.Double(x - r, y - r, 2 * r, 2 * r);
  44. }
  45. public static void main(String[] args) {
  46. SwingUtilities.invokeLater(new Runnable() {
  47. @Override
  48. public void run() {
  49. JFrame frame = new JFrame("Points on circles");
  50. frame.add(new PointOnCircle());
  51. frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  52. frame.setSize(800, 600);
  53. frame.setVisible(true);
  54. }
  55. });
  56. }
  57. }
Заранее огромное спасибо!

Решение задачи: «Движение точек по окружности»

textual
Листинг программы
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.awt.geom.Ellipse2D;
  6.  
  7. public class PointOnCircle extends JComponent {
  8.  
  9.     private double angle;
  10.  
  11.     public PointOnCircle() {
  12.         angle = 0;
  13.         Timer timer = new Timer(1, new ActionListener() {
  14.             @Override
  15.             public void actionPerformed(ActionEvent e) {
  16.                 angle += 0.05;
  17.                 repaint();
  18.             }
  19.         });
  20.         timer.start();
  21.     }
  22.  
  23.     protected void paintComponent(Graphics g) {
  24.         int width = getWidth();
  25.         int height = getHeight();
  26.         g.setColor(Color.white);
  27.         g.fillRect(0, 0, width, height);
  28.         g.setColor(Color.black);
  29.         Graphics2D g2d = (Graphics2D) g;
  30.         g2d.setStroke(new BasicStroke(1f));
  31.         g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
  32.         double phaseX = 0;
  33.         double phaseY = 0;
  34.         for (int i = 0; i <= width; i += 30) {
  35.             phaseX = 0;
  36.             phaseY = phaseY-0.4;
  37.             for (int j = 0; j <= height; j +=30) {
  38.                 phaseX = phaseX-0.4;
  39.                 double x = width - i;
  40.                 double y = height - j;
  41.                 double r = 30;
  42.                 g2d.draw(circle(x, y, r));
  43.                 g2d.setColor(Color.black);
  44.                 x += r * Math.cos(angle+phaseY+phaseX);
  45.                 y += r * Math.sin(angle+phaseY+phaseX);
  46.                 r = 5;
  47.                 g2d.fill(circle(x, y, r));
  48.             }
  49.         }
  50.     }
  51.  
  52.     private Shape circle(double x, double y, double r) {
  53.         return new Ellipse2D.Double(x - r, y - r, 2 * r, 2 * r);
  54.     }
  55.  
  56.     public static void main(String[] args) {
  57.         SwingUtilities.invokeLater(new Runnable() {
  58.             @Override
  59.             public void run() {
  60.                 JFrame frame = new JFrame("Points on circles");
  61.                 frame.add(new PointOnCircle());
  62.                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  63.                 frame.setSize(800, 600);
  64.                 frame.setVisible(true);
  65.             }
  66.         });
  67.     }
  68. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут