Connecting two points.

Hi.
I don’t have much experience with graphics, but my question is pretty straight foward.
This question might go a bit into geometry.

If I have two points on a canvas, and I want to say… make a sprite travel from one to the other in a straight line, how would I do that?

For example, if I have (23, 43) and (130, 20), how would I best track every coordinate between them?
Like, if I could just get the “direction” to go in I could easily track it myself, is the delta like direction?
How would I get that??

Linear interpolation would be a simple solution. However, getting the speed right would be a tad painful with this approach.

(23, 43) and (130, 20)… that would be (107, -23) as vector, which could be then normalized and after that you can just move the character in that direction x units per frame (a simple multiplication).

LWJGL for example comes with some vector classes. Just get the source and take a look at how that stuff is done.

The delta would be the “raw” form of the direction and corresponds exactly to the vector (107, -23) oNyx pointed out. To normalize a vector means to divide this vector, so that the line you draw along this direction is exactly of the length 1, meaning dividing the x/y delta values by the overall lenght of your “raw” direction. You can calculate this using the formula of pythagoras: double len=Math.sqrt(Math.pow(x,2)+Math.pow(y,2)).

Normalizing the direction vector has the advantage of representing the x and y deltas you need to travel 1 unit in the desired direction.

A decent vector library can take away the details of such operations and offers the benefit of easy transition from 2D graphics to 3D graphics, so I would suggest to get some reading on linear algebra and vector math in detail. I can recommend the book “Essential Mathematics for Games and Interactive Applications”
http://www.amazon.com/gp/product/155860863X/qid=1134564195/sr=8-2/ref=sr_8_xs_ap_i2_xgl14/002-9312530-3104828?n=507846&s=books&v=glance

but it might be a bit much to swollow (700 pages, but it includes nearly all game related mathematics needed)

Thank you very much, this is a great place to start.

I have code that does what you want, will post it up when I get home

See if this helps you:

public float toXPos;
    public float toYPos;
    public float vectX;
    public float vectY;
    public int initialYpos;
    public int initialXpos;
    private int dist;
    public float d = 0;
    public Rectangle targetRectangle;

// in constructor
        initialYpos = (int)yPos;
        initialXpos = (int)xPos;
        this.toXPos = (float)(fighterRectangle.getX()+Math.random()*(fighterRectangle.getWidth()));
        this.toYPos = (float)(fighterRectangle.getY()+Math.random()*(fighterRectangle.getHeight()));
        vectY =(toYPos-yPos);
        vectX = (toXPos-xPos);
        dist = (int)(Math.sqrt(vectX*vectX + vectY*vectY))/10; //by changin the 10 you will vary the speed of the object.

//in update
public void update(){
        d++;
        xPos = (int)(d/dist*vectX + initialXpos);
        yPos = (int)(d/dist*vectY+initialYpos);
        rectangle.x = xPos;
        rectangle.y = yPos;
    }

pd: did not try it. but i beleive it should work.
forgot to tell you, this will pick a random point of a rectangle to shoot to, if you want to always shoot straight just assign toXPos and toYPos an exact value.