Java-Gaming.org Hi !
 Featured games (83) games approved by the League of Dukes Games in Showcase (582) Games in Android Showcase (163) games submitted by our members Games in WIP (633) 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 1269 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: 80

 « 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.

 Ralphanese (18 views) 2015-05-29 13:07:55 Gibbo3771 (15 views) 2015-05-29 06:54:17 Ralphanese (23 views) 2015-05-28 16:52:52 theagentd (31 views) 2015-05-27 22:21:17 theagentd (36 views) 2015-05-27 22:21:08 CopyableCougar4 (25 views) 2015-05-27 19:24:50 MrMapcom (24 views) 2015-05-23 20:26:16 MrMapcom (33 views) 2015-05-23 20:23:34 Waterwolf (37 views) 2015-05-20 15:01:45 chrislo27 (44 views) 2015-05-20 03:42:21
 Riven 25x Rayvolution 24x theagentd 22x BurntPizza 19x Spasi 17x orangepascal 16x Drenius 15x KevinWorkman 14x ra4king 13x DavidBVal 12x princec 12x opiop65 12x EgonOlsen 11x Husk 11x kevglass 9x Slyth2727 8x
 Intersection Methodsby Roquen2015-05-29 08:19:33List of Learning Resources2015-05-05 10:20:32How to: JGO Wikiby Mac702015-02-17 20:56:162D Dynamic Lighting2015-01-01 20:25:42How do I start Java Game Development?by gouessej2014-12-27 19:41:21Resources for WIP gamesby kpars2014-12-18 10:26:14Understanding relations between setOrigin, setScale and setPosition in libGdx2014-10-09 22:35:00Definite guide to supporting multiple device resolutions on Android (2014)2014-10-02 22:36:02
 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