Изображение кругового движения в JAVA - PullRequest
2 голосов
/ 13 октября 2011

Мне нужно круговое движение изображения в JAVA, я думал, что у меня есть решение, но оно не работает, и сейчас я немного невежественен.

Для вычисления точек необходимо использовать имитацию Пифагора для расчета высоты (точка B).

, если он делает один раунд, я удовлетворен, но больше раундов было бы здорово.

Размер изображения составляет около 500 х 300 пикселей.

Вот мой код:

package vogel;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.*;

public class Vogel extends Component {
    private int x;
    private int r;
    private int b;
    BufferedImage img;

    public vogel() {
       try {
           img = ImageIO.read(new File("F:/JAVA/workspace/School/src/vogel/vogel.png"));
       } catch (IOException e) {
       } 
       r = 60;
       x = 10;
    }

    @Override
    public void paint(Graphics g) {
        for(int i = -x; i <= x; i++) {      
            b = (int)Math.sqrt(r^2 - i^2);
            g.drawImage(img, x, b, this);
        }        
    }

    public static void main(String[] args) { 
    JFrame f = new JFrame("Vogel");   
    f.setSize(1000,1000);
    f.add(new Vogel());        
    f.setVisible(true);

    for (int number = 1; number <= 1500000; number++) {
        f.repaint();

        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {}
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 13 октября 2011

Используя ваш цикл в методе paint (Graphics), он рисует 21 птицу с одним перекрашиванием.

Вы должны сделать это с углом, сохраненным в переменной объекта, и использовать Math.sin () и Math.Функция .cos () вычисляет координаты x и y.Угол должен увеличиваться с каждым repaint ().

Чтобы добавить:

// To control the radius of moving
private final double MAX_X = 200;
private final double MAX_Y = 200;

private double angle = 0;

@Override
public void paint(Graphics g) {
    // increase angle (should be a double value)
    angle += 0.1;

    // rotate around P(0/0), assuming that 0° is vector (1/0)
    int x = (int) (Math.cos(angle) * MAX_X);
    int y = (int) (Math.sin(angle) * MAX_Y);

    // move P to center of JFrame (width and height = 1000)
    x += 500;
    y += 500;

    // image is 500x300, calc upper left corner
    x -= 250;
    y -= 150;

    // draw
    g.drawImage(img, x, y, null);
}

Чтобы удалить:

private double x, b, r;

Так что это код, попробуйте.

1 голос
/ 13 октября 2011

Дополнение к коду Сиббо для преобразования угла в радиусы

private double angle = 0.1;

@Override
public void paint(Graphics g) {
    // increase angle (should be a double value

    double random = angle * 2.0 * Math.PI/360.0; //this will convert it to rads
    // rotate around P(0/0)
    int x = (int) (Math.cos(random) * MAX_X);
    int y = (int) (Math.sin(random) * MAX_Y);

    // move P to center of JFrame (width and height = 1000)
    x += 500;
    y += 500;

    // image is 500x300, calc upper left corner
    x -= 250;
    y -= 150;
    angle++
    // draw
    g.drawImage(img, x, y, null);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...