Garry's Mod Wiki

Revision Difference

math.atan2#549072

<function name="atan2" parent="math" type="libraryfunc"> <description> functions like <page>math.atan</page>(y / x), except it also takes into account the quadrant of the angle and so doesn't have a limited range of output. <note>The Y argument comes first!</note> </description> <realm>Shared and Menu</realm> <args> <arg name="y" type="number">Y coordinate.</arg> <arg name="x" type="number">X coordinate.</arg> </args> <rets> <ret name="" type="number">The angle of the line from (0, 0) to (x, y) in radians, in the left-open interval (-pi, pi]</ret> </rets> </function> <example> <description> atan( 1 ) and atan2( 1, 1 ) are both math.pi / 4 atan2( -1, -1 ) equals to ( (-3) * math.pi ) / 4 </description> <code> print( atan( 1 ) ) print( atan2( 1, 1 ) ) print( atan2( -1, -1 ) ) </code> <output> 0.7853981633974483 0.7853981633974483 -2.356194490192345 </output> </example> <example> <description>Draws an icon in the center of the screen that rotates relative to the position of the cursor.</description> <description>Draws an icon in the center of the screen that rotates relative to the position of the cursor. **Note**: you might have to use <page>Panel:LocalCursorPos</page> if you want to draw this inside a panel.</description> <code> local icon = Material("icon16/emoticon_smile.png", "smooth") local iconSize = 64 hook.Add("HUDPaint", "Atan2Example", function() -- The point relative to which the angle will be calculated -- We can assume that this is our "zero" coordinate local centerX, centerY = ScrW()/2, ScrH()/2 -- The point for which we will look for the angle local mouseX, mouseY = input.GetCursorPos() -- Get the angle in radians local angle = math.atan2( centerY - mouseY, mouseX - centerX ) -- Convert to degrees local deg = math.deg(angle) surface.SetDrawColor(255, 255, 255, 255) surface.SetMaterial(icon) surface.DrawTexturedRectRotated(centerX, centerY, iconSize, iconSize, deg) -- Just for debug draw.SimpleText(deg, "DermaDefault", centerX, centerY + 40, color_white, TEXT_ALIGN_CENTER) end) </code> </example>