Java-Gaming.org Hi !
 Featured games (90) games approved by the League of Dukes Games in Showcase (683) Games in Android Showcase (196) games submitted by our members Games in WIP (751) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Connecting two points.  (Read 1526 times) 0 Members and 1 Guest are viewing this topic.
lethargic

Junior Newbie

 « Posted 2005-12-14 11:12:49 »

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??
oNyx

JGO Coder

Medals: 2

pixels! :x

 « Reply #1 - Posted 2005-12-14 11:45:33 »

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.

cylab

JGO Wizard

Medals: 135

 « Reply #2 - Posted 2005-12-14 12:41:21 »

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)

Mathias - I Know What [you] Did Last Summer!
lethargic

Junior Newbie

 « Reply #3 - Posted 2005-12-15 02:06:27 »

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

Junior Devvie

All opinions will be lined up and shot!

 « Reply #4 - Posted 2005-12-15 20:17:41 »

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

Kommi
Maverick

Senior Newbie

 « Reply #5 - Posted 2005-12-17 23:59:33 »

See if this helps you:
 1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27 `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 updatepublic 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.
Pages: [1]
 ignore  |  Print

You cannot reply to this message, because it is very, very old.

 orrenravid (227 views) 2016-07-16 03:57:23 theagentd (295 views) 2016-07-11 14:28:54 Hydroque (382 views) 2016-07-06 05:56:57 Hydroque (533 views) 2016-07-03 08:52:54 GrandCastle (403 views) 2016-07-01 09:13:47 GrandCastle (396 views) 2016-07-01 09:09:45 CopyableCougar4 (449 views) 2016-06-25 16:56:52 Hydroque (422 views) 2016-06-22 02:17:53 SwampChicken (387 views) 2016-06-20 13:22:57 SwampChicken (306 views) 2016-06-20 13:22:49
 Archive 30x Slyth2727 24x Brynn 23x EgonOlsen 22x orangepascal 22x TritonDreyja 21x orange451 20x DavidBVal 19x Spasi 18x LiquidNitrogen 11x Phased 11x Opiop 11x princec 11x Longor1996 10x ziozio 10x KaiHH 10x
 Making a Dynamic Plugin Systemby Hydroque2016-06-25 00:13:25Java Data structures2016-06-13 21:22:09Java Data structures2016-06-13 21:20:42FPS Camera Tutorialby Hydroque2016-05-22 05:40:58Website offering 3D Models specifically for games for freeby vusman2016-05-18 17:23:09Website offering 3D Models specifically for games for freeby vusman2016-05-09 08:50:56Website offering 3D Models specifically for games for freeby vusman2016-05-06 11:10:21Website offering 3D Models specifically for games for freeby vusman2016-04-29 12:56:17
 java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org