Mail Archives: djgpp/1998/10/09/22:01:28
From: | "Jeff" <sjford AT sprintmail DOT com>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | Re: Tank Movement
|
Date: | Fri, 9 Oct 1998 21:42:02 -0400
|
Organization: | EarthLink Network, Inc.
|
Lines: | 45
|
Message-ID: | <6vmc9m$ob$1@fir.prod.itd.earthlink.net>
|
References: | <36147a32 DOT 10039817 AT ct-news DOT iafrica DOT com>
|
NNTP-Posting-Host: | sdn-ar-001ohdaytp291.dialsprint.net
|
X-Newsreader: | Microsoft Outlook Express 4.72.3110.5
|
X-Posted-Path-Was: | not-for-mail
|
X-MimeOLE: | Produced By Microsoft MimeOLE V4.72.3110.3
|
X-ELN-Date: | Fri Oct 9 18:12:22 1998
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
Chris Brooker wrote ...
>Hi,
>Sorry if my code sucks, I a mquite new to C.
>I am busy writing a Real Time Strategy ...
>double dir_degrees(int x1, int y1, int y2, int x2)
>{
> int v1, v2;
> double dir;
> v1 = y1 - y2;
> v2 = x1 - x2;
> if (v2 == 0)
> v2++; //Stops division by zero errors
> dir = 57 * atan(v1 / v2);
> return dir;
>}
>
The atan() function can only return values between -90 and 90 degrees, which
is two out of four quandrants. You need to check the signs of v1 and v2 to
determine if the angle is between -180 and -90 or between 90 and 180
degrees and add or subtract 90 degrees accordingly.
If x and y coordinates are standard cartesian, with "right" as positive x
and "top" as positive y:
if x>0 and y>0, the angle must be 0 to 90 degrees. No adjustment.
if x>0 and y<0, angle is -90 to 0. No adjustment.
if x<0 and y>0 angle is 90 to 180. Add 180 degrees to return value.
if x<0 and y<0 angle is -180 to -90. Subtract 180 degrees from return
value.
You may need to experiment to get the right adjustment as I have not tested
it. Good luck.
-Jeff
- Raw text -