diff options
| author | Lua Team <team@lua.org> | 1995-11-28 12:00:00 +0000 |
|---|---|---|
| committer | repogen <> | 1995-11-28 12:00:00 +0000 |
| commit | 71754d2f6423fb9b6e87658e58bafc5470d53f65 (patch) | |
| tree | c704e97b80e52a52d3152738941bb4c8ca676b97 /test/examples/complex | |
| parent | a8b6ba0954edb9e0e669e1f451b9a8f145ce5166 (diff) | |
| download | lua-github-2.2.tar.gz | |
Lua 2.22.2
Diffstat (limited to 'test/examples/complex')
| -rw-r--r-- | test/examples/complex/complex.lua | 82 | ||||
| -rw-r--r-- | test/examples/complex/mandel.lua | 25 |
2 files changed, 107 insertions, 0 deletions
diff --git a/test/examples/complex/complex.lua b/test/examples/complex/complex.lua new file mode 100644 index 00000000..a213a746 --- /dev/null +++ b/test/examples/complex/complex.lua @@ -0,0 +1,82 @@ +-- complex.lua +-- complex arithmetic package for lua +-- Luiz Henrique de Figueiredo (lhf@csg.uwaterloo.ca) +-- 24 Oct 95 +$debug + +Complex={type="package"} + +function complex(x,y) + return { re=x, im=y, type="complex" } +end + +function Complex.conj(x,y) + return complex(x.re,-x.im) +end + +function Complex.norm2(x) + local n=Complex.mul(x,Complex.conj(x)) + return n.re +end + +function Complex.abs(x) + return sqrt(Complex.norm2(x)) +end + +function Complex.add(x,y) + return complex(x.re+y.re,x.im+y.im) +end + +function Complex.sub(x,y) + return complex(x.re-y.re,x.im-y.im) +end + +function Complex.mul(x,y) + return complex(x.re*y.re-x.im*y.im,x.re*y.im+x.im*y.re) +end + +function Complex.div(x,y) + local z=x*Complex.conj(y) + local t=Complex.norm2(y) + z.re=z.re/t + z.im=z.im/t + return z +end + +function Complex.fallback(x,y,op) + if type(x)=="number" then x=complex(x,0) end + if type(y)=="number" then y=complex(y,0) end + if type(x)=="complex" and type(y)=="complex" then + return Complex[op](x,y) + else + return Complex.oldfallback(x,y) + end +end + +function Complex.newtype(x) + local t=Complex.oldtype(x) + if t=="table" and x.type then return x.type else return t end +end + +function Complex.print(x) + if type(x)~="complex" then + Complex.oldprint(x) + else + local s + if x.im>=0 then s="+" else s="" end + Complex.oldprint(x.re..s..x.im.."I") + end +end + +function Complex.newabs(x) + if type(x)~="complex" then + return Complex.oldabs(x) + else + return Complex.abs(x) + end +end + +Complex.oldfallback=setfallback("arith",Complex.fallback) +Complex.oldtype=type type=Complex.newtype +Complex.oldprint=print print=Complex.print +Complex.oldabs=abs abs=Complex.abs diff --git a/test/examples/complex/mandel.lua b/test/examples/complex/mandel.lua new file mode 100644 index 00000000..5e3d3eb6 --- /dev/null +++ b/test/examples/complex/mandel.lua @@ -0,0 +1,25 @@ +dofile("complex.lua") + +xmin=-2 xmax=2 ymin=-2 ymax=2 +d=.125 + +function level(x,y) + local c=complex(x,y) + local l=0 + local z=c + repeat + z=z*z+c + l=l+1 + until abs(z)>2 or l>255 + return l-1 +end + +x=xmin +while x<xmax do + y=ymin + while y<ymax do + print(level(x,y)) + y=y+d + end + x=x+d +end |
