我有三个点,p1
(开始),p2
(结束)和pos
(对象的当前位置),以及运行其中每个帧的方法我需要在点p1
和p2
之间移动对象。
我只需要沿点之间的直线移动物体
答案 0 :(得分:1)
海峡线的方程是y=mx+c
。当你需要在2个点之间移动一个物体时,方程式可以简化为y=mx
;所以你可以用你的2个点找到m。y依赖于x和方程式。看这张图片
尝试更改x1,y1 and x2,y2
并看到它在这条海峡线上移动。
以下我只是写一个课程,这样你就可以轻松地运行它。
public class AnimationJPanel extends JPanel {
//edit x1,y1 is starting point x2,y2 is end point
int x1=0;
int y1=0;
int x2=100;
int y2=100;
//
int x=x1;
int y;
int r=6;
int m=(y2-y1)/(x2-x1);
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
AnimationJPanel panel = new AnimationJPanel();
panel.setPreferredSize(new Dimension(400, 300));
panel.animate();
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
private Timer timer;
public AnimationJPanel() {
setBackground(Color.BLACK);
setForeground(Color.RED);
setOpaque(true);
}
public void animate() {
timer = new Timer(15, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(x>=x2){
timer.stop();//stop when pass the end point
}
x++;
y = m * x;
System.out.println("x" + x + " y" + y);
repaint();
}
});
timer.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawOval(x, y, r, r);
}
}
答案 1 :(得分:0)
线性插值,A和B之间的线中的任何点,对于值double k
(在0和1之间),是:
Point p = B + (A-B)*k;
只需循环for (double k=0; k<=1; k+= deltaK)