diff options
Diffstat (limited to 'apps/plugins/lua/include_lua/math_ex.lua')
| -rw-r--r-- | apps/plugins/lua/include_lua/math_ex.lua | 158 |
1 files changed, 0 insertions, 158 deletions
diff --git a/apps/plugins/lua/include_lua/math_ex.lua b/apps/plugins/lua/include_lua/math_ex.lua deleted file mode 100644 index c0bf55c..0000000 --- a/apps/plugins/lua/include_lua/math_ex.lua +++ /dev/null @@ -1,158 +0,0 @@ ---[[ Lua Missing Math functions -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2017 William Wilgus - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -]] - ---[[ Exposed Functions - - _math.clamp - _math.clamp_roll - _math.d_sin - _math.d_cos - _math.d_tan - _math.i_sqrt - -]] - -local _math = {} do - - -- internal constants - local _NIL = nil -- _NIL placeholder - - -- clamps value to >= min and <= max - local function clamp(iVal, iMin, iMax) - if iMin > iMax then - local swap = iMin - iMin, iMax = iMax, swap - end - - if iVal < iMin then - return iMin - elseif iVal < iMax then - return iVal - end - - return iMax - end - - -- clamps value to >= min and <= max rolls over to opposite - local function clamp_roll(iVal, iMin, iMax) - if iMin > iMax then - local swap = iMin - iMin, iMax = iMax, swap - end - - if iVal < iMin then - iVal = iMax - elseif iVal > iMax then - iVal = iMin - end - - return iVal - end - - local function i_sqrt(n) - -- Newtons square root approximation - if n < 2 then return n end - local g = n / 2 - local l = 1 - - for c = 1, 25 do -- if l,g haven't converged after 25 iterations quit - - l = (n / g + g)/ 2 - g = (n / l + l)/ 2 - - if g == l then return g end - end - - -- check for period-two cycle between g and l - if g - l == 1 then - return l - elseif l - g == 1 then - return g - end - - return _NIL - end - - local function d_sin(iDeg, bExtraPrecision) - --[[ values are returned multiplied by 10000 - II | I 180-90 | 90-0 - ---(--)--- -------(--)------- - III | IV 180-270 | 270-360 - - sine is only positive in quadrants I , II => 0 - 180 degrees - sine 180-360 degrees is a reflection of sine 0-180 - Bhaskara I's sine approximation formula isn't overly accurate - but it is close enough for rough image work. - ]] - local sign, x - -- no negative angles -10 degrees = 350 degrees - if iDeg < 0 then - x = 360 + (iDeg % 360) - else --keep rotation in 0-360 range - x = iDeg % 360 - end - - -- reflect II & I onto III & IV - if x > 180 then - sign = -1 - x = x % 180 - else - sign = 1 - end - - local x1 = x * (180 - x) - - if bExtraPrecision then -- ~halves the largest errors - if x <= 22 or x >= 158 then - return sign * 39818 * x1 / (40497 - x1) - elseif (x >= 40 and x <= 56) or (x > 124 and x < 140) then - return sign * 40002 * x1 / (40450 - x1) - elseif (x > 31 and x < 71) or (x > 109 and x < 150) then - return sign * 40009 * x1 / (40470 - x1) - end - end - - --multiplied by 10000 so no decimal in results (RB LUA is integer only) - return sign * 40000 * x1 / (40497 - x1) - end - - local function d_cos(iDeg, bExtraPrecision) - --cos is just sine shifed by 90 degrees CCW - return d_sin(90 - iDeg, bExtraPrecision) - end - - local function d_tan(iDeg, bExtraPrecision) - --tan = sin0 / cos0 - return (d_sin(iDeg, bExtraPrecision) * 10000 / d_sin(90 - iDeg, bExtraPrecision)) - end - - --expose functions to the outside through _math table - _math.clamp = clamp - _math.clamp_roll = clamp_roll - _math.i_sqrt = i_sqrt - _math.d_sin = d_sin - _math.d_cos = d_cos - _math.d_tan = d_tan -end -- missing math functions - -return _math |