Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вращение фигур, несколько вращающихся фигур 
:(
    Опции темы
agR
Дата 27.3.2008, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 19.7.2006
Где: Киев

Репутация: нет
Всего: 2



Вроде бы закрутить одну фигурку не так уж и сложно:
Код


import java.awt.Color;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;

import javax.swing.JComponent;
import javax.swing.JFrame;

public class RotateRectangle extends JComponent implements Runnable {
    
      public RotateRectangle() {
        paint = new GradientPaint(0, 0, Color.blue, 20, 10, Color.red, true);
        Thread t = new Thread(this);
        t.start();
      }

    public void run() {
        try {
          while (true) {
            repaint();
            Thread.sleep(10);
            timeStep();
          }
        } catch (InterruptedException ie) {
        }
      }

      public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        Shape s = createShape(40);
        g2.setPaint(paint);
        g2.transform(at);
        g2.fill(s);
      }

      private void timeStep() {
         angle = 1;
          at.rotate(Math.toRadians(angle),60,60);
      }

      private Shape createShape(int angle) {
          rect = new Rectangle2D.Double(angle,angle,angle+10,angle+10);
          return rect;
      }

      public static void main(String[] args) {
        JFrame f = new JFrame("Rotate");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new RotateRectangle());
        f.setSize(130, 150);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
      }
      
      private AffineTransform at = new AffineTransform();
      private int angle = 0;
      private Paint paint;
      private Rectangle2D rect;
    }

А вот каким образом можно вращать две, не говоря уже о нескольких фигурах одновременно? Имеется ввиду, чтоб у каждого было свое вращение, не взаимосвязанное, но в одном фрейме.
PM MAIL ICQ   Вверх
ecologist
Дата 28.3.2008, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: нет
Всего: 9



Ну самый простой вариант - для каждой фигуры определить количество тактов, через который она повернется. Разные фигуры - разные такты. Значит одна будет вращаться быстрее другой.
Можно также увеличить угол вращения в секунду - т.е. скорость. Но это близко к такту.

В конце концов можно определить для фигур интерфейс, который будет рассчитывать положение фигуры на следующий такт и для каждого экземпляра расчет даст разные результаты само собой.
PM MAIL   Вверх
agR
Дата 28.3.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 19.7.2006
Где: Киев

Репутация: нет
Всего: 2



Цитата(ecologist @  28.3.2008,  09:19 Найти цитируемый пост)
Ну самый простой вариант - для каждой фигуры определить количество тактов, через который она повернется. Разные фигуры - разные такты. Значит одна будет вращаться быстрее другой.
Можно также увеличить угол вращения в секунду - т.е. скорость. Но это близко к такту.

В конце концов можно определить для фигур интерфейс, который будет рассчитывать положение фигуры на следующий такт и для каждого экземпляра расчет даст разные результаты само собой. 


А ничего проще нет? Честно говоря слабо представляю, как можно таким способом заставить крутиться на месте три и больше фигуры
PM MAIL ICQ   Вверх
dorogoyIV
Дата 30.3.2008, 07:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



Код

import javax.swing.*;
import java.awt.*;
import java.awt.geom.*;

class RotateFigure extends JComponent
                   implements Runnable
{
 AffineTransform at=new AffineTransform();
 int angle=0;
 int width=0, height=0;

 RotateFigure(int angle, int width, int height)
 {
  this.angle=angle;
  this.width=width;
  this.height=height;
  new Thread(this).start();
 }

 public void paint(Graphics g)
 {
  Graphics2D g2=(Graphics2D)g;
  Rectangle rect=new Rectangle(20, 20, width, height);
  g2.transform(at);
  g2.draw(rect);
 }

 public void rotateRect()
 {
  at.rotate(Math.toRadians(angle), width/2 + 20,
                                   height/2 + 20);
 }

 public void run()
 {
  try
  {
   while(true)
   {
    Thread.currentThread().sleep(10);
    rotateRect();
    repaint();
   }
  }
  catch(Exception ex){}
 }

 public static void main(String [] args)
 {
  JFrame f=new JFrame();
  f.setLayout(null);
  f.setBounds(100, 100, 400, 300);
  RotateFigure f1=new RotateFigure(5, 40, 40);
  f1.setBounds(100, 100, 80, 80);
  f.add(f1);
  RotateFigure f2=new RotateFigure(1, 40, 40);
  f2.setBounds(200, 100, 80, 80);
  f.add(f2);
  f.setVisible(true);
  f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}

PM MAIL   Вверх
agR
Дата 1.4.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 19.7.2006
Где: Киев

Репутация: нет
Всего: 2



dorogoyIV, то, что надо  smile 

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.1151 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.