On Sat, Mar 10, 2001 at 04:25:20PM -0400, Bob Covill wrote:
Jeshua Lacock wrote:
> Greetings,
>
> I would greatly appreciate any help with developing a simple function
> that returns the angle (in degrees) of a line when given two points
> (x1, y1 and x2, y2).
>
> Embarrassingly I have spent days trying to figure this out (that's
> what I get for using the teachers edition of geometry in high
> school!!). ;->
>
> I have ran across a function on the web, but somehow it seems really off:
> angle = (((Atan((northingDifference/eastingDifference)))*180)/PI)
Arctan() will give you an acute angle. You would need to know the
quadrant the line is in (assuming the first point as the origin) to add
a correction factor.
Assuming (0 == North, 90 == East, etc...):
// Sorta code...
dy = (y2 - y1);
dx = (x2 - x1);
if (dy > 0.0 && dx > 0.0) {quadadjust = 0.0;}
else if (dy > 0.0 && dx < 0.0) {quadadjust = 360.0;}
else if (dy < 0.0 && dx > 0.0) {quadadjust = 180.0;}
else if (dy < 0.0 && dx < 0.0) {quadadjust = 180.0;}
else {
if (dx == 0.0) {slope = (dy > 0.0) ? 0.0 : 180.0;}
else if (dy == 0.0) {slope = (dx > 0.0) ? 90.0 : 270.0;}
else {/* huh? */}
return slope;
}
slope = ((atan(dy/dx) * 180) / M_PI) + quadadjust;
return slope;
// End.
Note, I haven't really checked the above... And floating point numbers
can be weird in comparisons, so maybe an EPSILON is needed...
I understand there are better ways to do this than using atan() which
can be expensive...
Jeshua,
If you take a look at the new version of r.profile, it has a routine that returns
the azimuth between two points. Hopefully this helps with what you are looking
for.
A library routine that returns the azimuth between two points would be a nice
feature.
--
Bob Covill
Tekmap Consulting
P.O. Box 2016
Fall River, NS
Canada
B2T 1K6
----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'
--
Eric G. Miller <egm2@jps.net>
----------------------------------------
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo@geog.uni-hannover.de with
subject 'unsubscribe grass5'