Search code examples
javajava-2dgraphics2d

How to animate Rectangle on a Path2D object in Graphics2D context


I have just started learning basics about Graphics2D class, So far I am able to draw different objects and implements ActionListener to actually move them on screen by onKeyPress. So far so good, While I thought of doing something more complicated. I want to give a path to my object and animate it on that particular path only.

Something like, I will draw a line on sky and a plane should stick with that drawn line and keep it self to fly on that particular line. Now is it possible?

I don't need any sort of code, But few different method or ideas will let me get started working on this. A visualise elaboration of my idea is as below.

Start Point :

enter image description here

End Point :

enter image description here

Now as shown above, my yellow box(in future plane) should stick with given path while animating(path grey line)

My research so far,

I have searched my buzz words such as path in java, and found Path2D and GeneralPath classes, Does anyone know if I can use that to solve this.

Thanks


Solution

  • Great !

    It reminds me of my first steps in IT. How much I enjoyed all this simple math stuff but that make things move on screen. :)

    What you need is actually a linear interpolation . There are other sorts of interpolation and some api offer a nice encapsulation for the concept but here is the main idea, and you will quite often need this stuff :

    you must rewrite your path

    y = f (x ) 
    

    as a function of time :

    at time 0 the item will be on start position, at time 1 it will reach the end. And then you increment time (t) as you wish (0.001 every ms for instance).

    So here is the formula for a simple linear path :

    x = xstart + (xend-xstart) * t
    y = ystart + (yend-ystart) * t
    

    when t varies, you object will just move linearly along the path, linearly has speed will be constant on all the path. You could imagine some kind of gravtity attraction at end for instance, this would be modeled by a quadratic acceleration (t^2 instead of t) ...

    Regards, Stephane