Greg Peckory
Greg Peckory

Reputation: 8058

Using Sin-1 or inverse sin in python

Here is my code:

# point of intersection between opposite and hypotenuse

x,y  =    pygame.mouse.get_pos()


# using formula for length of line

lenline1 = (x-x)**2 + (300-y)**2
lenline2 = (x-700)**2 + (y-300)**2

opposite = math.sqrt(lenline1)

adjacent = math.sqrt(lenline2)

# Converting length of lines to angle

PQ = opposite/adjacent
k = math.sin(PQ)
j = math.asin(k)

print(j)  

I'm not getting the results I expected, although after messing around with it I got close but it wasn't quite right. Could someone please tell me what I'm doin wrong. I have two lines: opposite and adjacent And I wish to get the angle using the inverse of sin. What am I doing wrong. I'm only a beginner so don't give too detailed info. I can't imagine this is hard to do.

Thanks.

Upvotes: 2

Views: 21637

Answers (3)

Chris_Cole42
Chris_Cole42

Reputation: 23

Looks like you're trying to find the angle of the triangle (700,300), (x,300), (x,y). You're making it much more complicated than it needs to be. the length of the hypotenuse is math.hypot((700-x),(300-y)) and the angle is math.atan2((700-x), (300-y)).

Upvotes: 1

James
James

Reputation: 66834

Don't bother with the k computation, its meaningless.

j = math.asin(PQ)

However, this only works for right-angled triangles and you have to appropriate side lengths in the right places. In general this will not work and you need to use the dot product method.

Upvotes: 1

nneonneo
nneonneo

Reputation: 179422

To find the angle between two lines, use the following relation:

cos(angle) = (l1 dot l2) / (|l1| |l2|)

That is,

dotproduct = l1x * l2x + l1y * l2y
lenproduct = |l1| * |l2|
angle = acos(dotproduct / lenproduct)

where l1x, l1y are the x,y components of the line l1.

Upvotes: 3

Related Questions