JAVA中的圆周运动图像
我想用JAVA实现图像的圆周运动,我想我已经找到了解决方案,但它不起作用,我现在有点不知所措 要计算点,需要使用毕达哥拉斯计算高度(点B) 如果能打一轮我就满意了,但多打几轮就好了 图像大小约为500 x 300像素 这是我的密码: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
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完全不同;)