Modul:Expr: Unterschied zwischen den Versionen
K
keine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung |
KKeine Bearbeitungszusammenfassung |
||
| Zeile 8: | Zeile 8: | ||
]=] | ]=] | ||
-- Circumference of an ellipse. Approximation by Ramanujan's formula. | |||
-- Returns the approximation and a locical value (true, if the data is well) | |||
local function ellipse(a, epsilon) | |||
epsilon = tonumber(epsilon) or false; | |||
a = tonumber(a) or false; | |||
if not epsilon then return 0, false; end | |||
if not a then return 0, false; end | |||
if epsilon < 0 or epsilon > 1 then return 0, false; end | |||
a = math.abs(a); | |||
local b = a * math.sqrt (1 - epsilon * epsilon); | |||
local lambda = (a - b) / (a + b); | |||
local circumference = math.pi * (a + b) * (1 + (3 * lambda * lambda)/(10 + math.sqrt (4 - 3 * lambda * lambda))); | |||
if circumference then | |||
return circumference, true; | |||
else | |||
return 0, false; | |||
end | |||
end | |||
local messagePrefix = "lua-module-Expr-" | local messagePrefix = "lua-module-Expr-" | ||
| Zeile 261: | Zeile 279: | ||
return r | return r | ||
end -- minmax() | end -- minmax() | ||
-- Export | -- Export | ||
| Zeile 329: | Zeile 345: | ||
return r | return r | ||
end -- .Expr() | end -- .Expr() | ||
function p.ramanujan(frame) | |||
local semiaxis = frame.args[1] or 0; | |||
local eps = frame.args[2] or 0; | |||
local value, isOk = ellipse(semiaxis,eps); | |||
if isOk then | |||
return tostring(value); | |||
else | |||
return ""; | |||
end | |||
end | |||
return p -- Expr | return p -- Expr | ||