2013-09-02 2 views
0

Я создаю симулятор радаров для полетов в Java для проекта класса.Вращение нескольких изображений - Java

До сих пор я мог показывать много маленьких изображений самолетов, перемещающихся по радару с заданным направлением и разной скоростью.

Моя проблема заключается в том, как я могу поворачивать каждое изображение самолета, чтобы следовать его направлению в радаре. Radar http://img694.imageshack.us/img694/1746/5d8z.png

Линия показывает направление, в котором плоскость движется и должна указывать.

ответ

1

Есть несколько способов сделать это в Java. AffineTransform работает, но я обнаружил, что я не мог легко изменять размеры изображений для обработки вращений не на 90 градусов. Решение, которое я завершил, приведен ниже. Углы в радианах.

public static BufferedImage rotate(BufferedImage image, double angle) { 
    double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle)); 
    int w = image.getWidth(); 
    int h = image.getHeight(); 
    int newW = (int) Math.floor(w * cos + h * sin); 
    int newH = (int) Math.floor(h * cos + w * sin); 
    GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment() 
                .getDefaultScreenDevice() 
                .getDefaultConfiguration(); 

    BufferedImage result = gc.createCompatibleImage(newW, newH, Transparency.TRANSLUCENT); 
    Graphics2D g = result.createGraphics(); 
    g.translate((newW - w)/2, (newH - h)/2); 
    g.rotate(angle, w/2, h/2); 
    g.drawRenderedImage(image, null); 
    g.dispose(); 
    return result; 
} 
+0

спасибо, он работал большой, жесткий образ искажается – sandiego

+0

В случае вышеупомянутых самолетов, что это должно произойти. Каждый самолет имеет ширину всего в несколько пикселей, поэтому округление пикселей будет заметным. Три соображения, которые приходят на ум: 1. Используйте более крупное изображение самолета, поверните его перед масштабированием и используйте вместо него, 2. Используйте несколько спрайтов одной и той же плоскости под разными углами. 3. Используйте вектор вместо растровых изображений (т. Е. svg) и библиотеку, такую ​​как Batik. Третью идею было бы сложнее реализовать, но в результате получилась бы лучшая графика. – PattimusPrime