Inverse of math.atan2?

前端 未结 4 799
面向向阳花
面向向阳花 2021-02-07 06:46

What is the inverse of the function

math.atan2

I use this in Lua where I can get the inverse of math.atan by math.tan

相关标签:
4条回答
  • 2021-02-07 06:55

    Apparently, something like this will help:

    x = cos(theta)
    y = sin(theta) 
    

    Simple Google search threw this up, and the guy who asked the question said it solved it.

    0 讨论(0)
  • According this reference:

    Returns the arc tangent of y/x (in radians), but uses the signs of both parameters to find the quadrant of the result. (It also handles correctly the case of x being zero.)

    So I guess you can use math.tan to invert it also.

    0 讨论(0)
  • 2021-02-07 07:01

    Given only the angle you can only derive a unit vector pointing to (dx, dy). To get the original (dx, dy) you also need to know the length of the vector (dx, dy), which I'll call len. You also have to convert the angle you derived from degrees back to radians and then use the trig equations mentioned elsewhere in this post. That is you have:

    local dy = y1-y2
    local dx = x1-x2
    local angle = atan2(dy,dx) * 180 / pi
    local len = sqrt(dx*dx + dy*dy)
    

    Given angle (in degrees) and the vector length, len, you can derive dx and dy by:

    local theta = angle * pi / 180
    local dx = len * cos(theta)
    local dy = len * sin(theta)
    
    0 讨论(0)
  • 2021-02-07 07:10

    You'll probably get the wrong numbers if you use:

    local dy = y1-y2 
    local dx = x1-x2
    local angle = atan2(dy,dx) * 180 / pi
    

    If you are using the coordinate system where y gets bigger going down the screen and x gets bigger going to the right then you should use:

    local dy = y1 - y2
    local dx = x2 - x1
    local angle = math.deg(math.atan2(dy, dx))
    if (angle < 0) then
      angle = 360 + angle
    end
    

    The reason you want to use this is because atan2 in lua will give you a number between -180 and 180. It will be correct until you hit 180 then as it should go beyond 180 (i.e. 187) it will invert it to a negative number going down from -180 to 0 as you get closer to 360. To correct for this we check to see if the angle is less than 0 and if it is we add 360 to give us the correct angle.

    0 讨论(0)
提交回复
热议问题