Find angle in degrees of a point from another point

Question:

class Point:
    def __init__(self, x: int, y: int):
        self.x: int = x
        self.y: int = y

I have two points A and B, where their x, y coordinate can be any integers (+ve/ 0/ -ve).
I want to find the angle in degree of one point from another.

For example, in this case we have points A(4,3) and B(6,5)

A.angleFromSelf(B) should get 45 (like this) and B.angleFromSelf(A) should get 225 (like this).

What is the best way of getting the angle in degrees of one point from another point?

I am thinking something like getting the slope of straight line AB, and then using the formula atan(slope) = angle, but I don’t know whether it will work when there is a negative slope.

tried:

from math import atan
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def angleFromSelf(self, other):
        slope = (self.y-other.y) / (self.x-other.x)
        angle = atan(slope)
        return angle

A = Point(4,3)
B = Point(6,5)

print(A.angleFromSelf(B))
print(B.angleFromSelf(A))

gets:

0.7853981633974483
0.7853981633974483

expects:

45
225
Asked By: J.C.

||

Answers:

You need to use atan2 to get the correct result

from math import atan2, pi
class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def angleFromSelf(self, other):
        angle = atan2(self.y-other.y, self.x-other.x)
        if angle<0:
            angle+=2*pi
        return angle

def rad_2_deg(angle):
    return angle*180/pi

A = Point(4,3)
B = Point(6,5)

print(rad_2_deg(A.angleFromSelf(B)))
print(rad_2_deg(B.angleFromSelf(A)))
Answered By: OM222O
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.