積分は足し算

積分は足し算だということを説明するためのプログラムを考えてみる。

aが加速度。dx,dyが速度。x,yが座標。
毎回x,yにdx,dyを足す。で、dyにaを足す。dxは一定。
そうすると、こんな動きに。
小学生のころ、わけわからず1、2、3、4と足していくとジャンプの動きになって喜んでた。で、こんな簡単にいくわけないので実際にはもっと複雑な式が必要なんだろうと思ってたのだけど、実はこれでよかった。

import java.awt.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class Integral {
    public static void main(String[] args){
        Image img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_RGB);
        final Graphics2D g = (Graphics2D) img.getGraphics();
        
        JFrame f = new JFrame("積分");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(400, 300);
        final JLabel label = new JLabel(new ImageIcon(img));
        f.add(label);
        f.setVisible(true);
        
        new Thread(){

            @Override
            public void run() {
                int x = 0;
                int y = 150;
                int a = 1;
                int dx = 2;
                int dy = 0;
                for(;;){
                    g.setColor(Color.WHITE);
                    g.fillRect(0, 0, 400, 300);
                    g.setColor(Color.BLUE);
                    g.fillOval(x, y, 8, 8);
                    label.repaint();
                    
                    x += dx;
                    y += dy;
                    dy += a;
                    
                    if(x > 350 || x < 0){
                        dx = -dx;
                    }
                    if(y > 250){
                        dy = -dy + a;
                    }
                    try{
                        Thread.sleep(20);
                    }catch(InterruptedException e){}
                }
            }
            
        }.start();
    }
}