Java-Gaming.org Hi !
 Featured games (84) games approved by the League of Dukes Games in Showcase (574) Games in Android Showcase (154) games submitted by our members Games in WIP (620) games currently in development
 News: Read the Java Gaming Resources, or peek at the official Java tutorials
Pages: [1]
 ignore  |  Print
 Removed..  (Read 11010 times) 0 Members and 1 Guest are viewing this topic.
NewOnJava

Junior Devvie

1970 born Java game hobbyer.

 « Posted 2010-03-30 13:50:32 »

Removed..
Bonbon-Chan

JGO Coder

Medals: 12

 « Reply #1 - Posted 2010-03-30 14:48:11 »

"The angle between two points" doesn't mean anything.
For the angle between two vectors (dx1,dy1) and (dx2,dy2), just use :
Math.toDegrees(Math.atan2(dy1,dx1)-Math.atan2(dy2,dx2))

No ?
Karmington

Senior Devvie

Medals: 1
Projects: 1

Co-op Freak

 « Reply #2 - Posted 2010-03-30 14:58:40 »

this is 'calculate angle of one line' in effect.

Roquen
 « Reply #3 - Posted 2010-03-30 15:53:44 »

I think this is what you want:

 1  2  3  4  5  6  7  8  9  10  11  12  13  14 `  public static final float calcAngle(Point p0, Point p1)  {    float x0 = (float)p0.getX();    float y0 = (float)p0.getY();    float x1 = (float)p1.getX();    float y1 = (float)p1.getY();        // op = m sin(theta)    // ip = m cos(theta), where m = |P0| * |P1|    float op = x1*y0-x0*y1;    float ip = x0*x1+y0*y1;       return (float)Math.toDegrees(Math.atan2(op,ip));  }`

But I'm not sure.  Your code returns 45 for: (0,1) & (1,0)  and something near 90 for (0,1) & (10000,0).  So I might be not understanding the question.
dishmoth
 « Reply #4 - Posted 2010-03-30 16:27:16 »

If you're after the angle of the line that passes through points p1 and p2, then
 1 `Math.toDegrees( Math.atan2( p2.getY()-p1.getY(), p2.getX()-p1.getX() ) )`

should do it.

The result will be in the range -180 to +180 degrees, measured anti-clockwise from East (see the comments here on angles in polar coordinates).

Simon

Eli Delventhal

JGO Kernel

Medals: 42
Projects: 11
Exp: 10 years

Game Engineer

 « Reply #5 - Posted 2010-03-30 16:45:15 »

Yup, that's exactly what atan2 is for. You don't have to bother with checking quadrants like you've been doing.

See my work:
OTC Software
NewOnJava

Junior Devvie

1970 born Java game hobbyer.

 « Reply #6 - Posted 2010-03-30 21:07:46 »

Removed..
Eli Delventhal

JGO Kernel

Medals: 42
Projects: 11
Exp: 10 years

Game Engineer

 « Reply #7 - Posted 2010-03-30 22:33:25 »

Angle!

Ok, i get this example working on my plane game, i receive East -180 to East +180 degrees, still,
im after North +0 to North +360 degrees at on my game, is there any matematical solution with Java for North 0 to North 360 angles.

or, do i do tricks, like a i did on my first post ??

-----

Thanks..

The result above makes East = 0.
If you want North to be 0, East effectively becomes -90.
That means, add 90 to the value returned.

The result above gives you a value from -180 to 180 (where 0 is east).
If you want to make it 0 to 360, effectively everything is 180 more.
That means, add 180 to the value returned.

We want to do both.

Let's convert it into an equation.

 1  2  3  4  5  6  7  8 `public double convertToNorth(double angle){    return angle + 90;}public double convertTo360(double angle){    return angle + 180;}`

Doing both means you've got to convert it to 360 and then make sure 0 is considered north. That means:
 1  2  3  4  5  6  7  8  9  10  11  12  13  14 `public double doBoth(double angle){    //At this point, -180 to 180 and East is 0.    angle = convertTo360(angle);    //At this point, 0 to 360 and West is 0.        angle = convertToNorth(angle);    //Now, 0 to 360 and North is 0.    return angle;}`

Make sense yet? What's the final result? That's right. Add 270.

See my work:
OTC Software
NewOnJava

Junior Devvie

1970 born Java game hobbyer.

 « Reply #8 - Posted 2010-03-31 07:28:07 »

Removed..
Riven
« League of Dukes »

« JGO Overlord »

Medals: 953
Projects: 4
Exp: 16 years

 « Reply #9 - Posted 2010-03-31 13:06:13 »

 1  2  3  4  5 `public float calcAngle (Point p1, Point p2 ){    float f1 = (float)Math.toDegrees( Math.atan2( p1.getY()-p2.getY(), p1.getX()-p2.getX() ) );    return (f1+270)%360;}`

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings!

JGO Wizard

Medals: 16
Projects: 19

Mojang Specifications

 « Reply #10 - Posted 2010-03-31 13:46:14 »

Do you need to know the angle?

I often find that it's both faster and easier to work with vectors and dot products.

Play Minecraft!
Eli Delventhal

JGO Kernel

Medals: 42
Projects: 11
Exp: 10 years

Game Engineer

 « Reply #11 - Posted 2010-03-31 16:31:35 »

Do you need to know the angle?

I often find that it's both faster and easier to work with vectors and dot products.
One time I needed the angle specifically for where I was applying a rotation to Sprite (a goal compass). Otherwise I've always used vectors.

See my work:
OTC Software
imorio

Junior Newbie

 « Reply #12 - Posted 2010-09-05 11:09:09 »

Make sense yet? What's the final result? That's right. Add 270.

I know I'm replying to an old post but this answer is just wrong I think.

The original results would give if:
north=90
west=180 or -180
south= -90
east= 0

north=360
west=450 or 90
south=180
east=270

the only result I can think of that would be usefull is:

north=0 or 360
east or west=270
south=180
east or west=90

edit: This gives the right answer if the original answer was "polar":
int nonPolar= 90-((polar+180)%360)
if(nonPolar<0)
{
nonPolar=nonPolar+360;
}
Pages: [1]
 ignore  |  Print

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

 Riven (28 views) 2015-04-16 10:48:47 Duke0200 (42 views) 2015-04-16 01:59:01 Fairy Tailz (32 views) 2015-04-14 20:13:12 Riven (33 views) 2015-04-12 21:36:37 bus hotdog (49 views) 2015-04-10 02:39:32 CopyableCougar4 (51 views) 2015-04-10 00:51:04 BurntPizza (51 views) 2015-04-06 22:06:58 ags1 (53 views) 2015-04-02 10:58:48 Riven (52 views) 2015-04-01 18:27:05 ags1 (69 views) 2015-03-31 10:55:12
 theagentd 27x BurntPizza 17x wessles 15x 65K 11x kingroka123 11x Rayvolution 11x alwex 10x KevinWorkman 9x kevglass 8x phu004 8x Hanksha 7x SHC 7x Olo 7x ra4king 7x Ecumene 7x Roquen 7x
 How 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:02List of Learning Resources2014-08-16 10:40:00List of Learning Resources2014-08-05 19:33:27
 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