Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA中的圆周运动图像_Java_Animation - Fatal编程技术网

JAVA中的圆周运动图像

JAVA中的圆周运动图像,java,animation,Java,Animation,我想用JAVA实现图像的圆周运动,我想我已经找到了解决方案,但它不起作用,我现在有点不知所措 要计算点,需要使用毕达哥拉斯计算高度(点B) 如果能打一轮我就满意了,但多打几轮就好了 图像大小约为500 x 300像素 这是我的密码: package vogel; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.image.*; import java.io.*; import javax.imageio

我想用JAVA实现图像的圆周运动,我想我已经找到了解决方案,但它不起作用,我现在有点不知所措

要计算点,需要使用毕达哥拉斯计算高度(点B)

如果能打一轮我就满意了,但多打几轮就好了

图像大小约为500 x 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) {}
        }
    }
}
package-vogel;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.image.*;
导入java.io.*;
导入javax.imageio.*;
导入javax.swing.*;
公共类Vogel扩展组件{
私人INTX;
私人INTR;
私人INTB;
缓冲图像img;
公共vogel(){
试一试{
img=ImageIO.read(新文件(“F:/JAVA/workspace/School/src/vogel/vogel.png”);
}捕获(IOE异常){
} 
r=60;
x=10;
}
@凌驾
公共空间涂料(图g){

对于(inti=-x;i使用绘制(图形)方法中的循环,它通过一次重新绘制绘制21只鸟

您应该使用存储在对象变量中的角度,并使用Math.sin()和Math.cos()函数计算x和y位置。每次重新绘制()时,角度都应该增加

加上:

// 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;

这就是代码,试试看。

除了Sibbo的代码之外,还可以将角度转换为rads

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);
}

还有一个非常类似的帖子,你能不能一直缩进代码&在论坛上发布的时候要更加小心。到目前为止,你的两篇帖子都没有在最后的结尾使用代码格式
}
。我认为角度应该是弧度-使用数学。toRadians(角度)用这个来看看java.lang.Math方法的一些例子我只是用rads计算,因为运动速度是一个光学问题,与5°/s完全不同;)