Fog Creek Software
Discussion Board




Math wizards - look in here!

I'm a self admitted Math 'tard (TM)

I have 2 points with x,y coords.  How can I find the slope of the line formed by the 2 points in degrees ?


i.e. the line formed by 2 points could be a 45 degree angle, or a 40 degree angle , etc. But I only know the x,y coords, how do I calculate the degrees ?

Captain Offshore
Thursday, April 29, 2004

Trigonometry!

I forget how, though.

Yup.
Thursday, April 29, 2004

Has this been offshored to you Captain Offshore?

Matthew Lock
Thursday, April 29, 2004

First find the slope of the line.  Then the angle that the line makes with the x-axis (you weren't clear about what angle you wanted, but I think you probably meant the angle with the x-axis) is the inverse tangent of the slope.  If your two points are (x1,y1) and (x2-y2), then the angle is given by

arctan((y1-y2)/(x1-x2))

Kent
Thursday, April 29, 2004

Kent - Thanks!

Matthew - No, I'm an American citizen working in Orlando FL.  The great offshoring debate is one of my favorite topics.

Captain Offshore
Thursday, April 29, 2004

The line L is defined by two points (x1, y1), (x2, y2).

The slope of L is (y2 - y1) / (x2 - x1)

The length, |L|, is sqrt((x2 - x1)**2 + (y2 - y1)**2)

If you interpret L to be the hypotenuse of a right triangle whose right angle is 'below' L, the lower angle 't' (what I assume you mean by slope angle) is:

cos(t) = A / |L|
cos(t) = (x2 - x1) / |L|
cos(t) = (x2 - x1) / ((x2 - x1)**2 + (y2 - y1)**2)
t = acos((x2 - x1) / ((x2 - x1)**2 + (y2 - y1)**2))

That'll be in radians, so if you want it in degrees just multiply 't' by 180 / pi.

Kalani
Thursday, April 29, 2004

There I went and took too long to post while you got an answer.  Go ahead and use the atan method, it's cheaper.  Just remember SOHCAHTOA for the trig functions (Sine: Opposite / Hypotenuse, Cosine: Adjacent / Hypotenuse, Tangent: Opposite / Adjacent).

Kalani
Thursday, April 29, 2004

Kalani , Thanks for your input - I appreciate your detailed response.

Captain Offshore
Thursday, April 29, 2004

If I remember correctly (ha -- trig was just last term, and already I've forgotten this), the arctan function is only defined for half of the unit circle...so it may not give accurate results for all sets of two points.

Anybody else want to back me up (or smack me down) on this?  I'm too lazy to go get my book from the office... (=

Sam Livingston-Gray
Thursday, April 29, 2004

The basic problem with arctan is that it returns a value in the range -90 to +90, and can't distiguish between angles 180 degrees apart - eg if y2-y1 = -1, and x2-x1=-1, it will return a value of 45 degrees instead of the true answer of 235. Also you have to be careful if x1=x2, when the division will fail.

In C, a better solution is the library function atan2(y2-y1, x2-x1), although this returns a value in radians between -pi & pi, which you'll need to convert to degrees by multiplying by 180/pi.

as
Thursday, April 29, 2004

SOHCAHTOA

injun chief
Friday, April 30, 2004

The arctan function is the inverse of the tan function.

  tan x = sin x / cos x

tan is a periodic function with a period of of Pi

Math Geek
Friday, April 30, 2004

If you're coding in C, use the atan2 function, not atan. It does most of the hard work for you.

http://www.die.net/doc/linux/man/man3/atan2.3.html

Tom Payne
Friday, April 30, 2004

Use atan, just be careful in the case that x1 == x2 (you'll end up dividing by zero, you naughty boy).

Alyosha`
Friday, April 30, 2004

*  Recent Topics

*  Fog Creek Home