From d3bb3a95be3cd729072fa880d8cd02353948873b Mon Sep 17 00:00:00 2001 From: Xiangfu Liu Date: Tue, 18 Jan 2011 16:21:06 +0800 Subject: [PATCH] add some lua-plplot-examples --- .../lua-plplot-examples/plplot_examples.lua | 12 + .../files/lua-plplot-examples/x01.lua | 210 ++++++++++ .../files/lua-plplot-examples/x02.lua | 152 +++++++ .../files/lua-plplot-examples/x03.lua | 105 +++++ .../files/lua-plplot-examples/x04.lua | 106 +++++ .../files/lua-plplot-examples/x05.lua | 54 +++ .../files/lua-plplot-examples/x06.lua | 90 +++++ .../files/lua-plplot-examples/x07.lua | 90 +++++ .../files/lua-plplot-examples/x08.lua | 189 +++++++++ .../files/lua-plplot-examples/x09.lua | 350 ++++++++++++++++ .../files/lua-plplot-examples/x10.lua | 49 +++ .../files/lua-plplot-examples/x11.lua | 160 ++++++++ .../files/lua-plplot-examples/x12.lua | 78 ++++ .../files/lua-plplot-examples/x13.lua | 96 +++++ .../files/lua-plplot-examples/x14.lua | 361 +++++++++++++++++ .../files/lua-plplot-examples/x15.lua | 234 +++++++++++ .../files/lua-plplot-examples/x16.lua | 324 +++++++++++++++ .../files/lua-plplot-examples/x17.lua | 118 ++++++ .../files/lua-plplot-examples/x18.lua | 145 +++++++ .../files/lua-plplot-examples/x19.lua | 153 +++++++ .../files/lua-plplot-examples/x20.lua | 294 ++++++++++++++ .../files/lua-plplot-examples/x21.lua | 256 ++++++++++++ .../files/lua-plplot-examples/x22.lua | 273 +++++++++++++ .../files/lua-plplot-examples/x23.lua | 331 +++++++++++++++ .../files/lua-plplot-examples/x24.lua | 142 +++++++ .../files/lua-plplot-examples/x25.lua | 96 +++++ .../files/lua-plplot-examples/x26.lua | 151 +++++++ .../files/lua-plplot-examples/x27.lua | 129 ++++++ .../files/lua-plplot-examples/x28.lua | 376 ++++++++++++++++++ .../files/lua-plplot-examples/x29.lua | 327 +++++++++++++++ .../files/lua-plplot-examples/x30.lua | 137 +++++++ .../files/lua-plplot-examples/x31.lua | 225 +++++++++++ 32 files changed, 5813 insertions(+) create mode 100644 nanonote-example-files/files/lua-plplot-examples/plplot_examples.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x01.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x02.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x03.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x04.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x05.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x06.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x07.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x08.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x09.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x10.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x11.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x12.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x13.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x14.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x15.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x16.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x17.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x18.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x19.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x20.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x21.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x22.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x23.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x24.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x25.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x26.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x27.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x28.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x29.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x30.lua create mode 100644 nanonote-example-files/files/lua-plplot-examples/x31.lua diff --git a/nanonote-example-files/files/lua-plplot-examples/plplot_examples.lua b/nanonote-example-files/files/lua-plplot-examples/plplot_examples.lua new file mode 100644 index 0000000..449f8a6 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/plplot_examples.lua @@ -0,0 +1,12 @@ +-- initialise Lua bindings for PLplot examples. +if string.sub(_VERSION,1,7)=='Lua 5.0' then + lib=loadlib('/home/pub/spock/src/qi/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/plplot-5.9.7/bindings/lua/plplotluac.so','luaopen_plplotluac') or + loadlib('/home/pub/spock/src/qi/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/plplot-5.9.7/bindings/lua/plplotluac.dll','luaopen_plplotluac') or + loadlib('/home/pub/spock/src/qi/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/plplot-5.9.7/bindings/lua/plplotluac.dylib','luaopen_plplotluac') + assert(lib)() +else + package.cpath = '/home/pub/spock/src/qi/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/plplot-5.9.7/bindings/lua/?.so;' .. + '/home/pub/spock/src/qi/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/plplot-5.9.7/bindings/lua/?.dll;' .. + '/home/pub/spock/src/qi/openwrt-xburst/build_dir/target-mipsel_uClibc-0.9.30.1/plplot-5.9.7/bindings/lua/?.dylib;' ..package.cpath + require('plplotluac') +end diff --git a/nanonote-example-files/files/lua-plplot-examples/x01.lua b/nanonote-example-files/files/lua-plplot-examples/x01.lua new file mode 100644 index 0000000..f02cbee --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x01.lua @@ -0,0 +1,210 @@ +--[[ $Id: x01.lua 9414 2009-01-29 22:48:54Z airwin $ + + Simple line plot and multiple windows demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-- Variables and data arrays used by plot generators +x = {} +y = {} +xs = {} +ys = {} + +fontset = 1 +f_name = "" + + +function plot1(do_test) + for i = 1, 60 do + x[i] = xoff + xscale * (i) / 60 + y[i] = yoff + yscale * x[i]^2 + end + + xmin = x[1] + xmax = x[60] + ymin = y[1] + ymax = y[60] + + for i = 1, 6 do + xs[i] = x[(i-1) * 10 + 4] + ys[i] = y[(i-1) * 10 + 4] + end + + -- Set up the viewport and window using PLENV. The range in X is + -- 0.0 to 6.0, and the range in Y is 0.0 to 30.0. The axes are + -- scaled separately (just = 0), and we just draw a labelled + -- box (axis = 0). + pl.col0(1) + pl.env(xmin, xmax, ymin, ymax, 0, 0) + pl.col0(2) + pl.lab("(x)", "(y)", "#frPLplot Example 1 - y=x#u2") + + -- Plot the data points + pl.col0(4) + pl.poin(xs, ys, 9) + + -- Draw the line through the data + pl.col0(3) + pl.line(x, y) +end + + +function plot2() + -- Set up the viewport and window using PLENV. The range in X is -2.0 to + -- 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled separately + --(just = 0), and we draw a box with axes (axis = 1). + pl.col0(1) + pl.env(-2, 10, -0.4, 1.2, 0, 1) + pl.col0(2) + pl.lab("(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function") + + -- Fill up the arrays + for i=1, 100 do + x[i] = (i - 20) / 6 + y[i] = 1 + if x[i] ~= 0 then y[i] = math.sin(x[i])/x[i] end + end + + -- Draw the line + pl.col0(3) + pl.wid(2) + pl.line(x, y) + pl.wid(1) +end + + +function plot3() + space0 = { } + mark0 = { } + space1 = { 1500 } + mark1 = { 1500 } + + -- For the final graph we wish to override the default tick intervals, and + --so do not use plenv(). + pl.adv(0) + + -- Use standard viewport, and define X range from 0 to 360 degrees, Y range + --from -1.2 to 1.2. + pl.vsta() + pl.wind(0, 360, -1.2, 1.2) + + -- Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. + pl.col0(1) + pl.box("bcnst", 60, 2, "bcnstv", 0.2, 2) + + -- Superimpose a dashed line grid, with 1.5 mm marks and spaces. + -- plstyl expects a pointer! + pl.styl(mark1, space1) + pl.col0(2) + pl.box("g", 30, 0, "g", 0.2, 0) + pl.styl(mark0, space0) + + pl.col0(3) + pl.lab("Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function") + + for i=1, 101 do + x[i] = 3.6*(i-1) + y[i] = math.sin(x[i]*math.pi/180) + end + + pl.col0(4) + pl.line(x, y) +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Generates several simple line plots. Demonstrates: +-- - subwindow capability +-- - setting up the window, drawing plot, and labelling +-- - changing the color +-- - automatic axis rescaling to exponential notation +-- - placing the axes in the middle of the box +-- - gridded coordinate axes +---------------------------------------------------------------------------- + +-- plplot initialization + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Get version number, just for kicks +ver=pl.gver() +print("PLplot library version: " .. ver) + +-- Initialize plplot +-- Divide page into 2x2 plots +-- Note: calling plstar replaces separate calls to plssub and plinit +pl.star(2,2) + +-- Select font set as per input flag +if fontset ~= 0 then + pl.fontld(1) +else + pl.fontld(0) +end + +-- Set up the data +-- Original case +xscale = 6 +yscale = 1 +xoff = 0 +yoff = 0 + +-- Do a plot +plot1(0) + +-- Set up the data +xscale = 1 +yscale = 0.0014 +yoff = 0.0185 + +-- Do a plot +digmax = 5 +pl.syax(digmax, 0) + +plot1(1) +plot2() +plot3() + +-- Show how to save a plot: +-- Open a new device, make it current, copy parameters, +-- and replay the plot buffer +if f_name~="" then -- command line option '-save filename' + print("The current plot was saved in color Postscript under the name " .. f_name .. ".\n") + cur_strm = pl.gstrm() -- get current stream + new_strm = pl.mkstrm() -- create a new one + + pl.sfnam(f_name) -- file name + pl.sdev("psc") -- device type + + pl.cpstrm(cur_strm, 0) -- copy old stream parameters to new stream + pl.replot() -- do the save by replaying the plot buffer + pl.plend1() -- finish the device + + pl.sstrm(cur_strm) -- return to previous stream +end + +-- Don't forget to call plend() to finish off! +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x02.lua b/nanonote-example-files/files/lua-plplot-examples/x02.lua new file mode 100644 index 0000000..1f7193c --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x02.lua @@ -0,0 +1,152 @@ +--[[ $Id: x02.lua 9414 2009-01-29 22:48:54Z airwin $ + + Multiple window and color map 0 demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +---------------------------------------------------------------------------- +-- draw_windows +-- +-- Draws a set of numbered boxes with colors according to cmap0 entry. +---------------------------------------------------------------------------- + +function draw_windows(nw, cmap0_offset) + pl.schr(0, 3.5) + pl.font(4) + + for i = 0, nw-1 do + pl.col0(i+cmap0_offset) + pl.adv(0) + vmin = 0.1 + vmax = 0.9 + for j = 0, 2 do + pl.wid(j + 1) + pl.vpor(vmin, vmax, vmin, vmax) + pl.wind(0, 1, 0, 1) + pl.box("bc", 0, 0, "bc", 0, 0) + vmin = vmin + 0.1 + vmax = vmax - 0.1 + end + pl.wid(1) + pl.ptex(0.5, 0.5, 1, 0, 0.5, tostring(i)) + end +end + + +---------------------------------------------------------------------------- +-- demo1 +-- +-- Demonstrates multipl.e windows and default color map 0 palette. +---------------------------------------------------------------------------- + +function demo1() + pl.bop() + + -- Divide screen into 16 regions + pl.ssub(4, 4) + + draw_windows(16, 0) + + pl.eop() +end + + +---------------------------------------------------------------------------- +-- demo2 +-- +-- Demonstrates multipl.e windows, user-modified color map 0 palette, and +-- HLS -> RGB translation. +---------------------------------------------------------------------------- + +function demo2() + -- Set up cmap0 + -- Use 100 custom colors in addition to base 16 + r = {} + g = {} + b = {} + + -- Min & max lightness values + lmin = 0.15 + lmax = 0.85 + + pl.bop() + + -- Divide screen into 100 regions + + pl.ssub(10, 10) + + for i = 0, 99 do + -- Bounds on HLS, from pl.hlsrgb() commentary -- + -- hue [0., 360.] degrees + -- lightness [0., 1.] magnitude + -- saturation [0., 1.] magnitude + + -- Vary hue uniformly from left to right + h = (360/10) * math.mod(i, 10) + + -- Vary lightness uniformly from top to bottom, between min & max + l = lmin + (lmax - lmin) * math.floor(i/10)/9 + + -- Use max saturation + s = 1 + + r1, g1, b1 = pl.hlsrgb(h, l, s) + + -- Use 255.001 to avoid close truncation decisions in this example. + r[i+1+16] = r1 * 255.001 + g[i+1+16] = g1 * 255.001 + b[i+1+16] = b1 * 255.001 + end + + -- Load default cmap0 colors into our custom set + for i = 0, 15 do + r[i+1], g[i+1], b[i+1] = pl.gcol0(i) + end + + -- Now set cmap0 all at once (faster, since fewer driver calls) + pl.scmap0(r, g, b) + + draw_windows(100, 16) + + pl.eop() +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Demonstrates multipl.e windows and color map 0 palette, both default and +-- user-modified. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize pl.pl.ot +pl.init() + +-- Run demos +demo1() +demo2() + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x03.lua b/nanonote-example-files/files/lua-plplot-examples/x03.lua new file mode 100644 index 0000000..c405feb --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x03.lua @@ -0,0 +1,105 @@ +--[[ $Id: x03.lua 10613 2009-11-19 12:05:09Z andrewross $ + + Polar plot demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +---------------------------------------------------------------------------- +-- main +-- +-- Generates polar plot, with 1-1 scaling. +---------------------------------------------------------------------------- + +x0 = {} +y0 = {} +x = {} +y = {} + +dtr = math.pi/180 +for i = 1, 361 do + x0[i] = math.cos(dtr * (i-1)) + y0[i] = math.sin(dtr * (i-1)) +end + +-- Parse and process command line arguments + +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Set orientation to portrait - note not all device drivers +-- support this, in particular most interactive drivers do not +pl.sori(1) + +-- Initialize plplot +pl.init() + +-- Set up viewport and window, but do not draw box +pl.env(-1.3, 1.3, -1.3, 1.3, 1, -2) + +-- Draw circles for polar grid +for i = 1, 10 do + pl.arc(0, 0, 0.1*i, 0.1*i, 0, 360, 0); +end + +pl.col0(2) +for i=1, 12 do + theta = 30 * (i-1) + dx = math.cos(dtr * theta) + dy = math.sin(dtr * theta) + + -- Draw radial spokes for polar grid + + pl.join(0, 0, dx, dy) + + -- Write labels for angle + if theta < 9.99 then + offset = 0.45 + else + if theta < 99.9 then + offset = 0.30 + else + offset = 0.15 + end + end + + -- Slightly off zero to avoid floating point logic flips at 90 and 270 deg. + if dx >= -0.00001 then + pl.ptex(dx, dy, dx, dy, -offset, tostring(math.floor(theta))) + else + pl.ptex(dx, dy, -dx, -dy, 1.+offset, tostring(math.floor(theta))) + end +end + +-- Draw the graph +for i=1, 361 do + r = math.sin(dtr * (5*(i-1))) + x[i] = x0[i] * r + y[i] = y0[i] * r +end +pl.col0(3) +pl.line(x, y) + +pl.col0(4) +pl.mtex("t", 2, 0.5, 0.5, "#frPLplot Example 3 - r(#gh)=sin 5#gh") + +-- Close the plot at end +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x04.lua b/nanonote-example-files/files/lua-plplot-examples/x04.lua new file mode 100644 index 0000000..a0685e6 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x04.lua @@ -0,0 +1,106 @@ +--[[ $Id: x04.lua 9414 2009-01-29 22:48:54Z airwin $ + + Log plot demo. + Simple line plot and multiple windows demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +---------------------------------------------------------------------------- +-- plot1 +-- +-- Log-linear plot. +---------------------------------------------------------------------------- + +function plot1(type) + freql = {} + ampl = {} + phase = {} + + pl.adv(0) + + -- Set up data for log plot + f0 = 1 + for i=1, 101 do + freql[i] = -2 + (i-1) / 20 + freq = 10^freql[i] + ampl[i] = 20 * math.log10(1 / math.sqrt(1 + (freq / f0)^2)) + phase[i] = -(180 / math.pi) * math.atan(freq / f0) + end + + pl.vpor(0.15, 0.85, 0.1, 0.9) + pl.wind(-2, 3, -80, 0) + + -- Try different axis and labelling styles. + pl.col0(1) + if type == 0 then + pl.box("bclnst", 0, 0, "bnstv", 0, 0) + end + + if type == 1 then + pl.box("bcfghlnst", 0, 0, "bcghnstv", 0, 0) + end + + -- Plot ampl vs freq + pl.col0(2) + pl.line(freql, ampl) + pl.col0(1) + pl.ptex(1.6, -30, 1, -20, 0.5, "-20 dB/decade") + + -- Put labels on + pl.col0(1) + pl.mtex("b", 3.2, 0.5, 0.5, "Frequency") + pl.mtex("t", 2, 0.5, 0.5, "Single Pole Low-Pass Filter") + pl.col0(2) + pl.mtex("l", 5, 0.5, 0.5, "Amplitude (dB)") + + -- For the gridless case, put phase vs freq on same plot + if type == 0 then + pl.col0(1) + pl.wind(-2, 3, -100, 0) + pl.box("", 0, 0, "cmstv", 30, 3) + pl.col0(3) + pl.line(freql, phase) + pl.col0(3) + pl.mtex("r", 5, 0.5, 0.5, "Phase shift (degrees)") + end +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Illustration of logarithmic axes, and redefinition of window. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() +pl.font(2) + +-- Make log plots using two different styles. +plot1(0) +plot1(1) + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x05.lua b/nanonote-example-files/files/lua-plplot-examples/x05.lua new file mode 100644 index 0000000..b140222 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x05.lua @@ -0,0 +1,54 @@ +--[[ $Id: x05.lua 9414 2009-01-29 22:48:54Z airwin $ + + Histogram demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-------------------------------------------------------------------------- +-- main +-- +-- Draws a histogram from sample data. +-------------------------------------------------------------------------- + +NPTS=2047 +data = {} + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL); + +-- Initialize plplot +pl.init() + +-- Fill up data points +delta = 2.0*math.pi/NPTS +for i=1, NPTS do + data[i] = math.sin((i-1)*delta) +end + +pl.col0(1) +pl.hist(data, -1.1, 1.1, 44, 0) +pl.col0(2) +pl.lab("#frValue", "#frFrequency", + "#frPLplot Example 5 - Probability function of Oscillator") + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x06.lua b/nanonote-example-files/files/lua-plplot-examples/x06.lua new file mode 100644 index 0000000..fd44470 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x06.lua @@ -0,0 +1,90 @@ +--[[ $Id: x06.lua 11032 2010-05-27 22:34:40Z andrewross $ + + Font demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +---------------------------------------------------------------------------- +-- main +-- +-- Displays the entire "plpoin" symbol (font) set. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +for kind_font = 0,1 do + pl.fontld( kind_font ) + if kind_font == 0 then + maxfont = 1 + else + maxfont = 4 + end + + for font = 1,maxfont do + pl.font( font ) + pl.adv(0) + + -- Set up viewport and window + pl.col0(2) + pl.vpor(0.1, 1, 0.1, 0.9) + pl.wind(0, 1, 0, 1.3) + + -- Draw the grid using plbox + pl.box("bcg", 0.1, 0, "bcg", 0.1, 0) + + -- Write the digits below the frame + pl.col0(15) + for i=0, 9 do + pl.mtex("b", 1.5, (0.1 * i + 0.05), 0.5, tostring(i)) + end + + k = 0 + x = {} + y ={} + for i = 0, 12 do + -- Write the digits to the left of the frame + pl.mtex("lv", 1, (1 - (2 * i + 1) / 26), 1, tostring(10*i)) + for j = 0, 9 do + x[1] = 0.1 * j + 0.05 + y[1] = 1.25 - 0.1 * i + + -- Display the symbols + if k < 128 then + pl.poin(x, y, k) + end + k = k + 1 + end + end + + if kind_font == 0 then + pl.mtex("t", 1.5, 0.5, 0.5, "PLplot Example 6 - plpoin symbols (compact)") + else + pl.mtex("t", 1.5, 0.5, 0.5, "PLplot Example 6 - plpoin symbols (extended)") + end + end +end +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x07.lua b/nanonote-example-files/files/lua-plplot-examples/x07.lua new file mode 100644 index 0000000..73e4f02 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x07.lua @@ -0,0 +1,90 @@ +--[[ $Id: x07.lua 11032 2010-05-27 22:34:40Z andrewross $ + + Font demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +base = { 0, 100, 0, 100, 200, 500, 600, 700, 800, 900, + 2000, 2100, 2200, 2300, 2400, 2500, + 2600, 2700, 2800, 2900 } + +---------------------------------------------------------------------------- +-- main +-- +-- Displays the entire "plsym" symbol (font) set. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +pl.fontld(0) +for l = 1, 20 do + + if l == 3 then + pl.fontld(1) + end + pl.adv(0) + + -- Set up viewport and window + pl.col0(2) + pl.vpor(0.15, 0.95, 0.1, 0.9) + pl.wind(0, 1, 0, 1) + + -- Draw the grid using plbox + + pl.box("bcg", 0.1, 0, "bcg", 0.1, 0) + + -- Write the digits below the frame + + pl.col0(15) + for i = 0, 9 do + pl.mtex("b", 1.5, (0.1 * i + 0.05), 0.5, tostring(i)) + end + + k = 0 + x = {} + y = {} + for i = 0, 9 do + -- Write the digits to the left of the frame + pl.mtex("lv", 1.0, (0.95 - 0.1 * i), 1.0, tostring(base[l] + 10 * i)) + for j=0, 9 do + x[1] = 0.1 * j + 0.05 + y[1] = 0.95 - 0.1 * i + + -- Display the symbols + pl.sym(x, y, base[l] + k) + k = k + 1 + end + end + + if l <= 2 then + pl.mtex("t", 1.5, 0.5, 0.5, "PLplot Example 7 - PLSYM symbols (compact)") + else + pl.mtex("t", 1.5, 0.5, 0.5, "PLplot Example 7 - PLSYM symbols (extended)") + end +end + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x08.lua b/nanonote-example-files/files/lua-plplot-examples/x08.lua new file mode 100644 index 0000000..81372d1 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x08.lua @@ -0,0 +1,189 @@ +--[[ $Id: x08.lua 9533 2009-02-16 22:18:37Z smekal $ + + 3-d plot demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + + +-- bitwise or operator from http://lua-users.org/wiki/BaseSixtyFour +-- (c) 2006-2008 by Alex Kloss +-- licensed under the terms of the LGPL2 + +-- return single bit (for OR) +function bit(x,b) + return (math.mod(x, 2^b) - math.mod(x,2^(b-1)) > 0) +end + +-- logic OR for number values +function lor(x,y) + result = 0 + for p=1,8 do result = result + (((bit(x,p) or bit(y,p)) == true) and 2^(p-1) or 0) end + return result +end + + +---------------------------------------------------------------------------- +-- cmap1_init1 +-- +-- Initializes color map 1 in HLS space. +-- Basic grayscale variation from half-dark (which makes more interesting +-- looking plot compared to dark) to light. +-- An interesting variation on this: +-- s[1] = 1.0 +---------------------------------------------------------------------------- + +function cmap1_init(gray) + i = { 0, 1 } -- left and right boundary + + if gray ~= 0 then + h = { 0, 0 } -- hue -- low: red (arbitrary if s=0), high: red (arbitrary if s=0) + l = { 0.5, 1 } -- lightness -- low: half-dark, high: light + s = { 0, 0 } -- minimum saturation + else + h = { 240, 0 } -- blue -> green -> yellow -> red + l = { 0.6, 0.6 } + s = { 0.8, 0.8 } + end + + pl.scmap1n(256) + pl.scmap1l(0, i, h, l, s) +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Does a series of 3-d plots for a given data set, with different +-- viewing options in each plot. +---------------------------------------------------------------------------- + +XPTS = 35 -- Data points in x +YPTS = 46 -- Data points in y +LEVELS = 10 + +alt = { 60, 20 } +az = { 30, 60 } + +title = { + "#frPLplot Example 8 - Alt=60, Az=30", + "#frPLplot Example 8 - Alt=20, Az=60" +} + +clevel = {} +nlevel = LEVELS +rosen = 1 +sombrero = 0 + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) +if sombrero ~= 0 then rosen=0 end + +-- Initialize plplot +pl.init() + +-- Allocate data structures +x = {} +y = {} +z = {} + +for i=1, XPTS do + x[i] = (i-1-math.floor(XPTS/2)) / math.floor(XPTS/2) + if rosen~=0 then x[i]=x[i]*1.5 end +end + +for i=1, YPTS do + y[i] = (i-1-math.floor(YPTS/2)) / math.floor(YPTS/2) + if rosen~=0 then y[i]=y[i]+0.5 end +end + +for i=1, XPTS do + xx = x[i] + z[i]= {} + for j=1, YPTS do + yy = y[j] + if rosen~=0 then + z[i][j] = (1-xx)^2 + 100*(yy-xx^2)^2 + -- The log argument may be zero for just the right grid. + if z[i][j] > 0 then + z[i][j] = math.log(z[i][j]) + else + z[i][j] = -5 -- MAXFLOAT would mess-up up the scale + end + else + r = math.sqrt(xx^2 + yy^2) + z[i][j] = math.exp(-r^2) * math.cos(2*math.pi*r) + end + end +end + +zmax, zmin = pl.MinMax2dGrid(z) +step = (zmax-zmin)/(nlevel+1) +for i=1, nlevel do + clevel[i] = zmin + step + step*(i-1) +end + +pl.lightsource(1, 1, 1) + +for k=1, 2 do + for ifshade = 1, 4 do + pl.adv(0) + pl.vpor(0, 1, 0, 0.9) + pl.wind(-1, 1, -0.9, 1.1) + pl.col0(3) + pl.mtex("t", 1, 0.5, 0.5, title[k]) + pl.col0(1) + if rosen~=0 then + pl.w3d(1, 1, 1, -1.5, 1.5, -0.5, 1.5, zmin, zmax, alt[k], az[k]) + else + pl.w3d(1, 1, 1, -1, 1, -1, 1, zmin, zmax, alt[k], az[k]) + end + + pl.box3("bnstu", "x axis", 0, 0, + "bnstu", "y axis", 0, 0, + "bcdmnstuv", "z axis", 0, 0) + pl.col0(2) + + if ifshade==1 then -- diffuse light surface plot + cmap1_init(1) + pl.surf3d(x, y, z, 0, clevel) + end + + if ifshade==2 then -- magnitude colored plot + cmap1_init(0) + pl.surf3d(x, y, z, pl.MAG_COLOR, {}) + end + + if ifshade==3 then -- magnitude colored plot with faceted squares + cmap1_init(0) + pl.surf3d(x, y, z, lor(pl.MAG_COLOR, pl.FACETED), {}) + end + + if ifshade==4 then -- magnitude colored plot with contours + cmap1_init(0) + pl.surf3d(x, y, z, lor(lor(pl.MAG_COLOR, pl.SURF_CONT), pl.BASE_CONT), clevel) + end + end +end + +-- Clean up +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x09.lua b/nanonote-example-files/files/lua-plplot-examples/x09.lua new file mode 100644 index 0000000..1b0829e --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x09.lua @@ -0,0 +1,350 @@ +--[[ $Id: x09.lua 9533 2009-02-16 22:18:37Z smekal $ + + Contour plot demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +XPTS = 35 -- Data points in x +YPTS = 46 -- Data points in y + +XSPA = 2/(XPTS-1) +YSPA = 2/(YPTS-1) + +-- polar plot data +PERIMETERPTS = 100 +RPTS = 40 +THETAPTS = 40 + +-- potential plot data +PPERIMETERPTS = 100 +PRPTS = 40 +PTHETAPTS = 64 +PNLEVEL = 20 + +clevel = { -1, -0.8, -0.6, -0.4, -0.2, 0, 0.2, 0.4, 0.6, 0.8, 1} + +-- Transformation function +tr = { XSPA, 0, -1, 0, YSPA, -1 } + +function mypltr(x, y) + tx = tr[1] * x + tr[2] * y + tr[3] + ty = tr[4] * x + tr[5] * y + tr[6] + + return tx, ty +end + +--polar contour plot example. +function polar() + px = {} + py = {} + lev = {} + + pl.env(-1, 1, -1, 1, 0, -2) + pl.col0(1) + + --Perimeter + for i=1, PERIMETERPTS do + t = (2*math.pi/(PERIMETERPTS-1))*(i-1) + px[i] = math.cos(t) + py[i] = math.sin(t) + end + pl.line(px, py) + + --create data to be contoured. + cgrid2["xg"] = {} + cgrid2["yg"] = {} + cgrid2["nx"] = RPTS + cgrid2["ny"] = THETAPTS + z = {} + + for i = 1, RPTS do + r = (i-1)/(RPTS-1) + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + z[i] = {} + for j = 1, THETAPTS do + theta = (2*math.pi/(THETAPTS-1))*(j-1) + cgrid2["xg"][i][j] = r*math.cos(theta) + cgrid2["yg"][i][j] = r*math.sin(theta) + z[i][j] = r + end + end + + for i = 1, 10 do + lev[i] = 0.05 + 0.10*(i-1) + end + + pl.col0(2) + pl.cont(z, 1, RPTS, 1, THETAPTS, lev, "pltr2", cgrid2) + pl.col0(1) + pl.lab("", "", "Polar Contour Plot") +end + + +---------------------------------------------------------------------------- +-- f2mnmx +-- +-- Returns min & max of input 2d array. +---------------------------------------------------------------------------- +function f2mnmx(f, nx, ny) + fmax = f[1][1] + fmin = fmax + + for i=1, nx do + for j=1, ny do + fmax = math.max(fmax, f[i][j]) + fmin = math.min(fmin, f[i][j]) + end + end + + return fmin, fmax +end + + +--shielded potential contour plot example. +function potential() + clevelneg = {} + clevelpos = {} + px = {} + py = {} + + --create data to be contoured. + cgrid2["xg"] = {} + cgrid2["yg"] = {} + cgrid2["nx"] = PRPTS + cgrid2["ny"] = PTHETAPTS + z = {} + + for i = 1, PRPTS do + r = 0.5 + (i-1) + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + for j = 1, PTHETAPTS do + theta = 2*math.pi/(PTHETAPTS-1)*(j-0.5) + cgrid2["xg"][i][j] = r*math.cos(theta) + cgrid2["yg"][i][j] = r*math.sin(theta) + end + end + + rmax = PRPTS-0.5 + xmin, xmax = f2mnmx(cgrid2["xg"], PRPTS, PTHETAPTS) + ymin, ymax = f2mnmx(cgrid2["yg"], PRPTS, PTHETAPTS) + x0 = (xmin + xmax)/2 + y0 = (ymin + ymax)/2 + + -- Expanded limits + peps = 0.05 + xpmin = xmin - math.abs(xmin)*peps + xpmax = xmax + math.abs(xmax)*peps + ypmin = ymin - math.abs(ymin)*peps + ypmax = ymax + math.abs(ymax)*peps + + -- Potential inside a conducting cylinder (or sphere) by method of images. + -- Charge 1 is placed at (d1, d1), with image charge at (d2, d2). + -- Charge 2 is placed at (d1, -d1), with image charge at (d2, -d2). + -- Also put in smoothing term at small distances. + eps = 2 + q1 = 1 + d1 = rmax/4 + + q1i = - q1*rmax/d1 + d1i = rmax^2/d1 + + q2 = -1 + d2 = rmax/4 + + q2i = - q2*rmax/d2 + d2i = rmax^2/d2 + + for i = 1, PRPTS do + z[i] = {} + for j = 1, PTHETAPTS do + div1 = math.sqrt((cgrid2.xg[i][j]-d1)^2 + (cgrid2.yg[i][j]-d1)^2 + eps^2) + div1i = math.sqrt((cgrid2.xg[i][j]-d1i)^2 + (cgrid2.yg[i][j]-d1i)^2 + eps^2) + div2 = math.sqrt((cgrid2.xg[i][j]-d2)^2 + (cgrid2.yg[i][j]+d2)^2 + eps^2) + div2i = math.sqrt((cgrid2.xg[i][j]-d2i)^2 + (cgrid2.yg[i][j]+d2i)^2 + eps^2) + z[i][j] = q1/div1 + q1i/div1i + q2/div2 + q2i/div2i + end + end + zmin, zmax = f2mnmx(z, PRPTS, PTHETAPTS) + + -- Positive and negative contour levels. + dz = (zmax-zmin)/PNLEVEL + nlevelneg = 1 + nlevelpos = 1 + for i = 1, PNLEVEL do + clevel = zmin + (i-0.5)*dz + if clevel <= 0 then + clevelneg[nlevelneg] = clevel + nlevelneg = nlevelneg + 1 + else + clevelpos[nlevelpos] = clevel + nlevelpos = nlevelpos + 1 + end + end + + -- Colours! + ncollin = 11 + ncolbox = 1 + ncollab = 2 + + -- Finally start plotting this page! + pl.adv(0) + pl.col0(ncolbox) + + pl.vpas(0.1, 0.9, 0.1, 0.9, 1) + pl.wind(xpmin, xpmax, ypmin, ypmax) + pl.box("", 0, 0, "", 0, 0) + + pl.col0(ncollin) + if nlevelneg>1 then + -- Negative contours + pl.lsty(2) + pl.cont(z, 1, PRPTS, 1, PTHETAPTS, clevelneg, "pltr2", cgrid2) + end + + if nlevelpos>1 then + -- Positive contours + pl.lsty(1) + pl.cont(z, 1, PRPTS, 1, PTHETAPTS, clevelpos, "pltr2", cgrid2) + end + + -- Draw outer boundary + for i = 1, PPERIMETERPTS do + t = (2*math.pi/(PPERIMETERPTS-1))*(i-1) + px[i] = x0 + rmax*math.cos(t) + py[i] = y0 + rmax*math.sin(t) + end + + pl.col0(ncolbox) + pl.line(px, py) + + pl.col0(ncollab) + pl.lab("", "", "Shielded potential of charges in a conducting sphere") +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Does several contour plots using different coordinate mappings. +---------------------------------------------------------------------------- +mark = { 1500 } +space = { 1500 } + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +-- Set up function arrays +z = {} +w = {} + +for i = 1, XPTS do + xx = (i-1 - math.floor(XPTS/2)) / math.floor(XPTS/2) + z[i] = {} + w[i] = {} + for j = 1, YPTS do + yy = (j-1 - math.floor(YPTS/2)) / math.floor(YPTS/2) - 1 + z[i][j] = xx^2 - yy^2 + w[i][j] = 2 * xx * yy + end +end + +-- Set up grids +cgrid1 = {} +cgrid1["xg"] = {} +cgrid1["yg"] = {} +cgrid1["nx"] = XPTS +cgrid1["ny"] = YPTS +cgrid2 = {} +cgrid2["xg"] = {} +cgrid2["yg"] = {} +cgrid2["nx"] = XPTS +cgrid2["ny"] = YPTS + +for i = 1, XPTS do + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + for j = 1, YPTS do + xx, yy = mypltr(i-1, j-1) + + argx = xx * math.pi/2 + argy = yy * math.pi/2 + distort = 0.4 + + cgrid1["xg"][i] = xx + distort * math.cos(argx) + cgrid1["yg"][j] = yy - distort * math.cos(argy) + + cgrid2["xg"][i][j] = xx + distort * math.cos(argx) * math.cos(argy) + cgrid2["yg"][i][j] = yy - distort * math.cos(argx) * math.cos(argy) + end +end + +-- Plot using identity transform +pl.setcontlabelformat(4, 3) +pl.setcontlabelparam(0.006, 0.3, 0.1, 1) +pl.env(-1, 1, -1, 1, 0, 0) +pl.col0(2) +pl.cont(z, 1, XPTS, 1, YPTS, clevel, "mypltr") +pl.styl(mark, space) +pl.col0(3) +pl.cont(w, 1, XPTS, 1, YPTS, clevel, "mypltr") +pl.styl({}, {}) +pl.col0(1) +pl.lab("X Coordinate", "Y Coordinate", "Streamlines of flow") +pl.setcontlabelparam(0.006, 0.3, 0.1, 0) + +-- Plot using 1d coordinate transform +pl.env(-1, 1, -1, 1, 0, 0) +pl.col0(2) +pl.cont(z, 1, XPTS, 1, YPTS, clevel, "pltr1", cgrid1) +pl.styl(mark, space) +pl.col0(3) +pl.cont(w, 1, XPTS, 1, YPTS, clevel, "pltr1", cgrid1) +pl.styl({}, {}) +pl.col0(1) +pl.lab("X Coordinate", "Y Coordinate", "Streamlines of flow") + +-- Plot using 2d coordinate transform +pl.env(-1, 1, -1, 1, 0, 0) +pl.col0(2) +pl.cont(z, 1, XPTS, 1, YPTS, clevel, "pltr2", cgrid2) + +pl.styl(mark, space) +pl.col0(3) +pl.cont(w, 1, XPTS, 1, YPTS, clevel, "pltr2", cgrid2) +pl.styl({}, {}) +pl.col0(1) +pl.lab("X Coordinate", "Y Coordinate", "Streamlines of flow") + +pl.setcontlabelparam(0.006, 0.3, 0.1, 0) +polar() + +pl.setcontlabelparam(0.006, 0.3, 0.1, 0) +potential() + +-- Clean up +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x10.lua b/nanonote-example-files/files/lua-plplot-examples/x10.lua new file mode 100644 index 0000000..bb65432 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x10.lua @@ -0,0 +1,49 @@ +--[[ $Id: x10.lua 9414 2009-01-29 22:48:54Z airwin $ + + Window positioning demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + + +---------------------------------------------------------------------------- +-- main +-- +-- Demonstrates absolute positioning of graphs on a page. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL); + +-- Initialize plplot +pl.init() + +pl.adv(0) +pl.vpor(0.0, 1.0, 0.0, 1.0) +pl.wind(0.0, 1.0, 0.0, 1.0) +pl.box("bc", 0.0, 0, "bc", 0.0, 0) + +pl.svpa(50.0, 150.0, 50.0, 100.0) +pl.wind(0.0, 1.0, 0.0, 1.0) +pl.box("bc", 0.0, 0, "bc", 0.0, 0) +pl.ptex(0.5, 0.5, 1.0, 0.0, 0.5, "BOX at (50,150,50,100)") +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x11.lua b/nanonote-example-files/files/lua-plplot-examples/x11.lua new file mode 100644 index 0000000..4ed4047 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x11.lua @@ -0,0 +1,160 @@ +--[[ $Id: x11.lua 9533 2009-02-16 22:18:37Z smekal $ + + Mesh plot demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +XPTS = 35 -- Data points in x +YPTS = 46 -- Data points in y +LEVELS = 10 + +opt = { pl.DRAW_LINEXY, pl.DRAW_LINEXY } + +alt = { 33, 17 } +az = { 24, 115 } + +title = { + "#frPLplot Example 11 - Alt=33, Az=24, Opt=3", + "#frPLplot Example 11 - Alt=17, Az=115, Opt=3" } + + +-- bitwise or operator from http://lua-users.org/wiki/BaseSixtyFour +-- (c) 2006-2008 by Alex Kloss +-- licensed under the terms of the LGPL2 + +-- return single bit (for OR) +function bit(x,b) + return (math.mod(x, 2^b) - math.mod(x,2^(b-1)) > 0) +end + +-- logic OR for number values +function lor(x,y) + result = 0 + for p=1,8 do result = result + (((bit(x,p) or bit(y,p)) == true) and 2^(p-1) or 0) end + return result +end + + +function cmap1_init() + i = { 0, 1 } -- left boundary , right boundary + h = { 240, 0 } -- blue -> green -> yellow -> red + l = { 0.6, 0.6 } + s = { 0.8, 0.8 } + + pl.scmap1n(256) + pl.scmap1l(0, i, h, l, s) +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Does a series of mesh plots for a given data set, with different +-- viewing options in each plot. +---------------------------------------------------------------------------- + +nlevel = LEVELS +clevel = {} + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +x = {} +y = {} +z = {} + +for i=1, XPTS do + x[i] = 3 * (i-1-math.floor(XPTS/2)) / math.floor(XPTS/2) +end + +for i=1, YPTS do + y[i] = 3 * (i-1-math.floor(YPTS/2)) / math.floor(YPTS/2) +end + +for i=1, XPTS do + xx = x[i] + z[i] = {} + for j=1, YPTS do + yy = y[j] + z[i][j] = 3 * (1-xx)^2 * math.exp(-xx^2 - (yy+1.)^2) - + 10 * (xx/5 - xx^3 - yy^5) * math.exp(-xx^2-yy^2) - + 1/3 * math.exp(-(xx+1)^2 - yy^2) + + -- Jungfraujoch/Interlaken + if false then + if z[i][j] < -1 then z[i][j] = -1 end + end + end +end + +zmax, zmin = pl.MinMax2dGrid(z) +step = (zmax - zmin)/(nlevel+1) +for i=1, nlevel do + clevel[i] = zmin + step + step*(i-1) +end + +cmap1_init() +for k=1, 2 do + for i=1, 4 do + pl.adv(0) + pl.col0(1) + pl.vpor(0, 1, 0, 0.9) + pl.wind(-1, 1, -1, 1.5) + pl.w3d(1, 1, 1.2, -3, 3, -3, 3, zmin, zmax, alt[k], az[k]) + pl.box3("bnstu", "x axis", 0, 0, + "bnstu", "y axis", 0, 0, + "bcdmnstuv", "z axis", 0, 4) + + pl.col0(2) + + -- wireframe plot + if i==1 then + pl.mesh(x, y, z, opt[k]) + end + + -- magnitude colored wireframe plot + if i==2 then + pl.mesh(x, y, z, lor(opt[k], pl.MAG_COLOR)) + end + + -- magnitude colored wireframe plot with sides + if i==3 then + pl.plot3d(x, y, z, lor(opt[k], pl.MAG_COLOR), 1) + end + + -- magnitude colored wireframe plot with base contour + if i==4 then + pl.meshc(x, y, z, lor(lor(opt[k], pl.MAG_COLOR), pl.BASE_CONT), clevel) + end + + pl.col0(3) + pl.mtex("t", 1, 0.5, 0.5, title[k]) + end +end + +-- Clean up + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x12.lua b/nanonote-example-files/files/lua-plplot-examples/x12.lua new file mode 100644 index 0000000..40e717a --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x12.lua @@ -0,0 +1,78 @@ +--[[ $Id: x12.lua 9533 2009-02-16 22:18:37Z smekal $ + + Bar chart demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +function pl.fbox(x0, y0) + x = { x0, x0, x0+1,x0+1 } + y = { 0, y0, y0, 0 } + + pl.fill(x, y); + pl.col0(1); + pl.lsty(1); + pl.line(x, y); +end + +-------------------------------------------------------------------------- +-- main +-- +-- Does a simple bar chart, using color fill. If color fill is +-- unavailable, pattern fill is used instead (automatic). +-------------------------------------------------------------------------- + +y0 = {} + +pos = { 0, 0.25, 0.5, 0.75, 1 } +red = { 0, 0.25, 0.5, 1, 1 } +green = { 1, 0.5, 0.5, 0.5, 1 } +blue = { 1, 1, 0.5, 0.25, 0 } + + +-- Parse and process command line arguments + +pl.parseopts(arg, pl.PL_PARSE_FULL); + +-- Initialize plplot +pl.init() + +pl.adv(0) +pl.vsta() +pl.wind(1980, 1990, 0, 35) +pl.box("bc", 1, 0, "bcnv", 10, 0) +pl.col0(2) +pl.lab("Year", "Widget Sales (millions)", "#frPLplot Example 12") + +y0 = { 5, 15, 12, 24, 28, 30, 20, 8, 12, 3} + +pl.scmap1l(1, pos, red, green, blue); + +for i=1, 10 do + pl.col1((i-1)/9.0); + pl.psty(0); + pl.fbox((1980+i-1), y0[i]); + pl.ptex((1980+i-0.5), (y0[i]+1), 1, 0, 0.5, tostring(y0[i])); + pl.mtex("b", 1, (i*0.1-0.05), 0.5, tostring(1980+i-1)); +end + +pl.plend(); diff --git a/nanonote-example-files/files/lua-plplot-examples/x13.lua b/nanonote-example-files/files/lua-plplot-examples/x13.lua new file mode 100644 index 0000000..9d44bf6 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x13.lua @@ -0,0 +1,96 @@ +--[[ $Id: x13.lua 9526 2009-02-13 22:06:13Z smekal $ + + Pie chart demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +text = { "Maurice", "Geoffrey", "Alan", + "Rafael", "Vince" } + +-------------------------------------------------------------------------- +-- main +-- +-- Does a simple pie chart. +-------------------------------------------------------------------------- + +per = { 10, 32, 12, 30, 16 } + +-- Parse and process command line arguments + +pl.parseopts(arg, pl.PL_PARSE_FULL); + +-- Initialize plplot + +pl.init() + +pl.adv(0) + +-- Ensure window has aspect ratio of one so circle is +-- plotted as a circle. +pl.vasp(1) +pl.wind(0, 10, 0, 10) +pl.col0(2) + +-- n.b. all theta quantities scaled by 2*M_PI/500 to be integers to avoid +--floating point logic problems. +theta0 = 0 +dthet = 1 +for i = 1, 5 do + x = { 5 } + y = { 5 } + j = 2 + -- n.b. the theta quantities multiplied by 2*math.pi/500 afterward so + -- in fact per is interpreted as a percentage. + theta1 = theta0 + 5 * per[i] + if i == 5 then theta1 = 500 end + + for theta = theta0, theta1, dthet do + x[j] = 5 + 3 * math.cos(2*math.pi/500*theta) + y[j] = 5 + 3 * math.sin(2*math.pi/500*theta) + j = j + 1 + thetasave=theta + end + pl.col0(i) + pl.psty(math.mod((i + 2), 8) + 1) + pl.fill(x, y) + pl.col0(1) + pl.line(x, y) + just = 2*math.pi/500*(theta0 + theta1)/2 + dx = 0.25 * math.cos(just) + dy = 0.25 * math.sin(just) + if (theta0 + theta1)<250 or (theta0 + theta1)>750 then + just = 0 + else + just = 1 + end + + pl.ptex((x[(j-1)/2+1] + dx), (y[(j-1)/2+1] + dy), 1, 0, just, text[i]); + theta0 = thetasave +end + +pl.font(2) +pl.schr(0, 1.3) +pl.ptex(5, 9, 1, 0, 0.5, "Percentage of Sales") + +pl.plend() + diff --git a/nanonote-example-files/files/lua-plplot-examples/x14.lua b/nanonote-example-files/files/lua-plplot-examples/x14.lua new file mode 100644 index 0000000..ad7e2a4 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x14.lua @@ -0,0 +1,361 @@ +--[[ $Id: x14.lua 10793 2010-02-06 01:48:39Z hbabcock $ + + Demo of multiple stream/window capability (requires Tk or Tcl-DP). + + Maurice LeBrun + IFS, University of Texas at Austin + + Copyright (C) 2009 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +xs = {} +ys = {} +space0 = {} +mark0 = {} +space1 = { 1500 } +mark1 = { 1500 } + + +function plot1() + x = {} + y = {} + + for i = 1, 60 do + x[i] = xoff + xscale*i/60 + y[i] = yoff + yscale*x[i]^2 + end + + xmin = x[1] + xmax = x[60] + ymin = y[1] + ymax = y[60] + + for i = 1, 6 do + xs[i] = x[(i-1)*10 + 4] + ys[i] = y[(i-1)*10 + 4] + end + + -- Set up the viewport and window using PLENV. The range in X is + -- 0.0 to 6.0, and the range in Y is 0.0 to 30.0. The axes are + -- scaled separately (just = 0), and we just draw a labelled + -- box (axis = 0). + pl.col0(1) + pl.env(xmin, xmax, ymin, ymax, 0, 0) + pl.col0(6) + pl.lab("(x)", "(y)", "#frPLplot Example 1 - y=x#u2") + + -- Plot the data points + pl.col0(9) + pl.poin(xs, ys, 9) + + -- Draw the line through the data + pl.col0(4) + pl.line(x, y) + pl.flush() +end + + +function plot2() + x = {} + y = {} + + -- Set up the viewport and window using PLENV. The range in X is -2.0 to + -- 10.0, and the range in Y is -0.4 to 2.0. The axes are scaled separately + -- (just = 0), and we draw a box with axes (axis = 1). + pl.col0(1) + pl.env(-2, 10, -0.4, 1.2, 0, 1) + pl.col0(2) + pl.lab("(x)", "sin(x)/x", "#frPLplot Example 1 - Sinc Function") + + -- Fill up the arrays + for i = 1, 100 do + x[i] = (i-20)/6 + y[i] = 1 + if x[i]~=0 then + y[i] = math.sin(x[i])/x[i] + end + end + + -- Draw the line + pl.col0(3) + pl.line(x, y) + pl.flush() +end + + +function plot3() + x = {} + y = {} + + -- For the final graph we wish to override the default tick intervals, and + -- so do not use PLENV + pl.adv(0) + + -- Use standard viewport, and define X range from 0 to 360 degrees, Y range + -- from -1.2 to 1.2. + pl.vsta() + pl.wind(0, 360, -1.2, 1.2) + + -- Draw a box with ticks spaced 60 degrees apart in X, and 0.2 in Y. + pl.col0(1) + pl.box("bcnst", 60, 2, "bcnstv", 0.2, 2) + + -- Superimpose a dashed line grid, with 1.5 mm marks and spaces. plstyl + -- expects a pointer!! + pl.styl(mark1, space1) + pl.col0(2) + pl.box("g", 30, 0, "g", 0.2, 0) + pl.styl(mark0, space0) + + pl.col0(3) + pl.lab("Angle (degrees)", "sine", "#frPLplot Example 1 - Sine function") + + for i = 1, 101 do + x[i] = 3.6 * (i-1) + y[i] = math.sin(x[i]*math.pi/180) + end + + pl.col0(4) + pl.line(x, y) + pl.flush() +end + + +function plot4() + x0 = {} + y0 = {} + x = {} + y = {} + + dtr = math.pi/180 + for i = 1, 361 do + x0[i] = math.cos(dtr*(i-1)) + y0[i] = math.sin(dtr*(i-1)) + end + + -- Set up viewport and window, but do not draw box + pl.env(-1.3, 1.3, -1.3, 1.3, 1, -2) + for i = 1, 10 do + for j = 1, 361 do + x[j] = 0.1*i*x0[j] + y[j] = 0.1*i*y0[j] + end + + -- Draw circles for polar grid + pl.line(x, y) + end + + pl.col0(2) + for i = 1, 12 do + theta = 30.0 * (i-1) + dx = math.cos(dtr * theta) + dy = math.sin(dtr * theta) + + -- Draw radial spokes for polar grid + pl.join(0, 0, dx, dy) + + -- Write labels for angle + -- Slightly off zero to avoid floating point logic flips at 90 and 270 deg. + if dx>=-0.00001 then + pl.ptex(dx, dy, dx, dy, -0.15, tostring(theta)) + else + pl.ptex(dx, dy, -dx, -dy, 1.15, tostring(theta)) + end + end + + x = {} + y = {} + + -- Draw the graph + for i = 1, 361 do + r = math.sin(dtr * (5*(i-1))) + x[i] = x0[i] * r + y[i] = y0[i] * r + end + + pl.col0(3) + pl.line(x, y) + + pl.col0(4) + pl.mtex("t", 2, 0.5, 0.5, "#frPLplot Example 3 - r(#gh)=sin 5#gh") + pl.flush() +end + +-- Demonstration of contour plotting + +XPTS = 35 +YPTS = 46 +XSPA = 2/(XPTS-1) +YSPA = 2/(YPTS-1) + +tr = { XSPA, 0, -1, 0, YSPA, -1 } + +function mypltr(x, y) + tx = tr[1]*x + tr[2]*y + tr[3] + ty = tr[4]*x + tr[5]*y + tr[6] + + return tx, ty +end + +clevel = { -1, -.8, -.6, -.4, -.2, 0, .2, .4, .6, .8, 1 } + +function plot5() + mark = { 1500 } + space = { 1500 } + + -- Set up function arrays + z = {} + w = {} + + for i = 1, XPTS do + xx = (i-1-math.floor(XPTS/2))/math.floor(XPTS/2) + z[i] = {} + w[i] = {} + for j = 1, YPTS do + yy = (j-1-math.floor(YPTS/2))/math.floor(YPTS/2)-1 + z[i][j] = xx * xx - yy * yy + w[i][j] = 2 * xx * yy + end + end + + pl.env(-1, 1, -1, 1, 0, 0) + pl.col0(2) + pl.cont(z, 1, XPTS, 1, YPTS, clevel, "mypltr") + pl.styl(mark, space) + pl.col0(3) + pl.cont(w, 1, XPTS, 1, YPTS, clevel, "mypltr") + pl.col0(1) + pl.lab("X Coordinate", "Y Coordinate", "Streamlines of flow") + pl.flush() +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Plots several simple functions from other example programs. +-- +-- This version sends the output of the first 4 plots (one page) to two +-- independent streams. +---------------------------------------------------------------------------- + +-- Select either TK or DP driver and use a small window +-- Using DP results in a crash at the end due to some odd cleanup problems +-- The geometry strings MUST be in writable memory +geometry_master = "500x410+100+200" +geometry_slave = "500x410+650+200" + +-- plplot initialization +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- If valid geometry specified on command line, use it for both streams. +xp0, yp0, xleng0, yleng0, xoff0, yoff0 = pl.gpage() +valid_geometry = xleng0>0 and yleng0>0 + +-- Set up first stream +if valid_geometry==true then + pl.spage(xp0, yp0, xleng0, yleng0, xoff0, yoff0) +else + pl.setopt("geometry", geometry_master) +end + +pl.ssub(2, 2) +pl.init() + +driver = pl.gdev() +fam, num, bmax = pl.gfam() + +print("Demo of multiple output streams via the " .. driver .." driver.") +print("Running with the second stream as slave to the first.\n") + +-- Start next stream +pl.sstrm(1) + +if valid_geometry==true then + pl.spage(xp0, yp0, xleng0, yleng0, xoff0, yoff0) +else + pl.setopt("geometry", geometry_slave) +end + +-- Turn off pause to make this a slave (must follow master) +pl.spause(0) +pl.sdev(driver) +pl.sfam(fam,num,bmax) + +-- Currently number of digits in format number can only be +--set via the command line option +pl.setopt("fflen", "2") +pl.init() + +-- Set up the data & plot +-- Original case +pl.sstrm(0) + +xscale = 6 +yscale = 1 +xoff = 0 +yoff = 0 +plot1() + +-- Set up the data & plot +xscale = 1 +yscale = 1e6 +plot1() + +-- Set up the data & plot +xscale = 1. +yscale = 1.e-6 +digmax = 2 +pl.syax(digmax, 0) +plot1() + +-- Set up the data & plot +xscale = 1 +yscale = 0.0014 +yoff = 0.0185 +digmax = 5 +pl.syax(digmax, 0) +plot1() + +-- To slave +-- The pleop() ensures the eop indicator gets lit. +pl.sstrm(1) +plot4() +pl.eop() + +-- Back to master +pl.sstrm(0) +plot2() +plot3() + +-- To slave +pl.sstrm(1) +plot5() +pl.eop() + +-- Back to master to wait for user to advance +pl.sstrm(0) +pl.eop() + +-- Call plend to finish off. +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x15.lua b/nanonote-example-files/files/lua-plplot-examples/x15.lua new file mode 100644 index 0000000..4e809ff --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x15.lua @@ -0,0 +1,234 @@ +--[[ $Id: x15.lua 9533 2009-02-16 22:18:37Z smekal $ + + Shade plot demo. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +XPTS = 35 -- Data points in x +YPTS = 46 -- Data points in y + +z = {} + +-- Function prototypes + +---------------------------------------------------------------------------- +-- cmap1_init1 +-- +-- Initializes color map 1 in HLS space. +---------------------------------------------------------------------------- + +function cmap1_init1() + i = { 0, 0,45, 0.55, 1 } -- left boundary, just before center, + -- just after center, right boundary + h = { 260, 260, 20, 20 } -- hue -- low: blue-violet, only change as we go over vertex + -- hue -- high: red, keep fixed + l = { 0.5, 0, 0, 0.5 } -- lightness -- low, lightness -- center + -- lightness -- center, lightness -- high + s = { 1, 1, 1, 1 } -- maximum saturation + + pl.scmap1l(0, i, h, l, s) +end + + +---------------------------------------------------------------------------- +-- cmap1_init2 +-- +-- Initializes color map 1 in HLS space. +---------------------------------------------------------------------------- + +function cmap1_init2() + i = { 0, 0.45, 0.55, 1 } -- left boundary, just before center, + -- just after center, right boundary + h = { 260, 260, 20, 20 } -- hue -- low: blue-violet, only change as we go over vertex + -- hue -- high: red, keep fixed + l = { 0.6, 0, 0, 0.6 } -- lightness -- low, lightness -- center + -- lightness -- center, lightness -- high + s = { 1, 0.5, 0.5, 1 } -- saturation -- low, saturation -- center + -- saturation -- center, saturation -- high + + pl.scmap1l(0, i, h, l, s) +end + + +---------------------------------------------------------------------------- +-- plot1 +-- +-- Illustrates a single shaded region. +---------------------------------------------------------------------------- + +function plot1() + sh_cmap = 0 + + pl.adv(0) + pl.vpor(0.1, 0.9, 0.1, 0.9) + pl.wind(-1, 1, -1, 1) + + -- Plot using identity transform + shade_min = zmin + (zmax-zmin)*0.4 + shade_max = zmin + (zmax-zmin)*0.6 + sh_color = 7 + sh_width = 2 + min_color = 9 + max_color = 2 + min_width = 2 + max_width = 2 + + pl.psty(8) + pl.shade(z, -1, 1, -1, 1, shade_min, shade_max, sh_cmap, sh_color, sh_width, + min_color, min_width, max_color, max_width, 1) + + pl.col0(1) + pl.box("bcnst", 0, 0, "bcnstv", 0, 0) + pl.col0(2) + pl.lab("distance", "altitude", "Bogon flux") +end + + +---------------------------------------------------------------------------- +-- plot2 +-- +-- Illustrates multiple adjacent shaded regions, using different fill +-- patterns for each region. +---------------------------------------------------------------------------- + +function plot2() + sh_cmap = 0 + min_color = 0 + min_width = 0 + max_color = 0 + max_width = 0 + + inc = { {450}, {-450}, {0}, {900}, {300}, + {450,-450}, {0, 900}, {0, 450}, {450, -450}, {0, 900} } + del = { {2000}, {2000}, {2000}, {2000}, {2000}, + {2000, 2000}, {2000, 2000}, {2000, 2000}, {4000, 4000}, {4000, 2000} } + + sh_width = 2 + + pl.adv(0) + pl.vpor(0.1, 0.9, 0.1, 0.9) + pl.wind(-1, 1, -1, 1) + + -- Plot using identity transform + + for i = 1, 10 do + shade_min = zmin + (zmax - zmin) * (i-1)/10 + shade_max = zmin + (zmax - zmin) * i/10 + sh_color = i+5 + pl.pat(inc[i], del[i]) + + pl.shade(z, -1, 1, -1, 1, shade_min, shade_max, sh_cmap, sh_color, sh_width, + min_color, min_width, max_color, max_width, 1) + end + + pl.col0(1) + pl.box("bcnst", 0, 0, "bcnstv", 0, 0) + pl.col0(2) + pl.lab("distance", "altitude", "Bogon flux") +end + + +---------------------------------------------------------------------------- +-- plot3 +-- +-- Illustrates shaded regions in 3d, using a different fill pattern for +-- each region. +---------------------------------------------------------------------------- + +function plot3() + xx = { {-1, 1, 1, -1, -1}, {-1, 1, 1, -1, -1} } + yy = { {1, 1, 0, 0, 1}, {-1, -1, 0, 0, -1} } + zz = { {0, 0, 1, 1, 0}, {0, 0, 1, 1, 0} } + + pl.adv(0) + pl.vpor(0.1, 0.9, 0.1, 0.9) + pl.wind(-1, 1, -1, 1.) + pl.w3d(1, 1, 1, -1, 1, -1, 1, 0, 1.5, 30, -40) + + -- Plot using identity transform + pl.col0(1) + pl.box3("bntu", "X", 0, 0, "bntu", "Y", 0, 0, "bcdfntu", "Z", 0.5, 0) + pl.col0(2) + pl.lab("","","3-d polygon filling") + + pl.col0(3) + pl.psty(1) + pl.line3(xx[1], yy[1], zz[1]) + pl.fill3(xx[1], yy[1], zz[1]) + pl.psty(2) + pl.line3(xx[2], yy[2], zz[2]) + pl.fill3(xx[2], yy[2], zz[2]) +end + + +---------------------------------------------------------------------------- +-- f2mnmx +-- +-- Returns min & max of input 2d array. +---------------------------------------------------------------------------- + +function f2mnmx(f, nx, ny) + fmax = f[1][1] + fmin = fmax + + for i=1, nx do + for j=1, ny do + fmax = math.max(fmax, f[i][j]) + fmin = math.min(fmin, f[i][j]) + end + end + + return fmin, fmax +end + +---------------------------------------------------------------------------- +-- main +-- +-- Does a variety of shade plots. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Set up color map 1 +cmap1_init2() + +-- Initialize plplot +pl.init() + +-- Set up data array +for i=1, XPTS do + xx = ((i-1) - math.floor(XPTS/2))/math.floor(XPTS/2) + z[i] = {} + for j = 1, YPTS do + yy = ((j-1) - math.floor(YPTS/2))/math.floor(YPTS/2) - 1 + z[i][j] = xx^2 - yy^2 + (xx - yy)/(xx^2+yy^2 + 0.1) + end +end +zmin, zmax = f2mnmx(z, XPTS, YPTS) + +plot1() +plot2() +plot3() + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x16.lua b/nanonote-example-files/files/lua-plplot-examples/x16.lua new file mode 100644 index 0000000..43e74e8 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x16.lua @@ -0,0 +1,324 @@ +--[[ $Id: x16.lua 10304 2009-08-20 09:05:43Z andrewross $ + + plshade demo, using color fill. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-- Fundamental settings. See notes[] for more info. +ns = 20 -- Default number of shade levels +nx = 35 -- Default number of data points in x +ny = 46 -- Default number of data points in y +exclude = 0 -- By default do not plot a page illustrating + -- exclusion. API is probably going to change + -- anyway, and cannot be reproduced by any + -- front end other than the C one. + +-- polar plot data +PERIMETERPTS = 100 + +-- Transformation function +tr = {} + +function mypltr(x, y) + tx = tr[1] * x + tr[2] * y + tr[3] + ty = tr[4] * x + tr[5] * y + tr[6] + + return tx, ty +end + +---------------------------------------------------------------------------- +-- f2mnmx +-- +-- Returns min & max of input 2d array. +---------------------------------------------------------------------------- +function f2mnmx(f, nx, ny) + fmax = f[1][1] + fmin = fmax + + for i = 1, nx do + for j = 1, ny do + fmax = math.max(fmax, f[i][j]) + fmin = math.min(fmin, f[i][j]) + end + end + + return fmin, fmax +end + + +function zdefined(x, y) + z = math.sqrt(x^2 + y^2) + + return z<0.4 or z>0.6 +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Does several shade plots using different coordinate mappings. +---------------------------------------------------------------------------- + +px = {} +py = {} + +fill_width = 2 +cont_color = 0 +cont_width = 0 + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Load colour palettes +pl.spal0("cmap0_black_on_white.pal"); +pl.spal1("cmap1_gray.pal",1); + +-- Reduce colors in cmap 0 so that cmap 1 is useful on a 16-color display +pl.scmap0n(3) + +-- Initialize plplot +pl.init() + +-- Set up transformation function +tr = { 2/(nx-1), 0, -1, 0, 2/(ny-1), -1 } + +-- Allocate data structures +clevel = {} +shedge = {} +z = {} +w = {} + +-- Set up data array +for i = 1, nx do + x = (i-1 - math.floor(nx/2))/math.floor(nx/2) + z[i] = {} + w[i] = {} + for j = 1, ny do + y = (j-1 - math.floor(ny/2))/math.floor(ny/2)-1 + z[i][j] = -math.sin(7*x) * math.cos(7*y) + x^2 - y^2 + w[i][j] = -math.cos(7*x) * math.sin(7*y) + 2*x*y + end +end + +zmin, zmax = f2mnmx(z, nx, ny) +for i = 1, ns do + clevel[i] = zmin + (zmax-zmin)*(i-0.5)/ns +end + +for i = 1, ns+1 do + shedge[i] = zmin + (zmax-zmin)*(i-1)/ns +end + +-- Set up coordinate grids +cgrid1 = {} +cgrid1["xg"] = {} +cgrid1["yg"] = {} +cgrid1["nx"] = nx +cgrid1["ny"] = ny + +cgrid2 = {} +cgrid2["xg"] = {} +cgrid2["yg"] = {} +cgrid2["nx"] = nx +cgrid2["ny"] = ny + +for i = 1, nx do + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + for j = 1, ny do + x, y = mypltr(i-1, j-1) + + argx = x*math.pi/2 + argy = y*math.pi/2 + distort = 0.4 + + cgrid1["xg"][i] = x + distort * math.cos(argx) + cgrid1["yg"][j] = y - distort * math.cos(argy) + + cgrid2["xg"][i][j] = x + distort * math.cos(argx) * math.cos(argy) + cgrid2["yg"][i][j] = y - distort * math.cos(argx) * math.cos(argy) + end +end + +-- Plot using identity transform +pl.adv(0) +pl.vpor(0.1, 0.9, 0.1, 0.9) +pl.wind(-1, 1, -1, 1) + +pl.psty(0) + +pl.shades(z, -1, 1, -1, 1, shedge, fill_width, cont_color, cont_width, 1) + +pl.col0(1) +pl.box("bcnst", 0, 0, "bcnstv", 0, 0) +pl.col0(2) + +--pl.cont(w, 1, nx, 1, ny, clevel, mypltr, {}) +pl.lab("distance", "altitude", "Bogon density") + +-- Plot using 1d coordinate transform + +-- Load colour palettes +pl.spal0("cmap0_black_on_white.pal"); +pl.spal1("cmap1_blue_yellow.pal",1); + +-- Reduce colors in cmap 0 so that cmap 1 is useful on a 16-color display +pl.scmap0n(3); + +pl.adv(0) +pl.vpor(0.1, 0.9, 0.1, 0.9) +pl.wind(-1, 1, -1, 1) + +pl.psty(0) + +pl.shades(z, -1, 1, -1, 1, shedge, fill_width, cont_color, cont_width, 1, "pltr1", cgrid1) + +pl.col0(1) +pl.box("bcnst", 0, 0, "bcnstv", 0, 0) +pl.col0(2) +pl.lab("distance", "altitude", "Bogon density") + +-- Plot using 2d coordinate transform + +-- Load colour palettes +pl.spal0("cmap0_black_on_white.pal"); +pl.spal1("cmap1_blue_red.pal",1); + +-- Reduce colors in cmap 0 so that cmap 1 is useful on a 16-color display +pl.scmap0n(3); + +pl.adv(0) +pl.vpor(0.1, 0.9, 0.1, 0.9) +pl.wind(-1, 1, -1, 1) + +pl.psty(0) + +pl.shades(z, -1, 1, -1, 1, shedge, fill_width, cont_color, cont_width, 0, "pltr2", cgrid2) + +pl.col0(1) +pl.box("bcnst", 0, 0, "bcnstv", 0, 0) +pl.col0(2) +pl.cont(w, 1, nx, 1, ny, clevel, "pltr2", cgrid2) + +pl.lab("distance", "altitude", "Bogon density, with streamlines") + +-- Plot using 2d coordinate transform + +-- Load colour palettes +pl.spal0(""); +pl.spal1("",1); + +-- Reduce colors in cmap 0 so that cmap 1 is useful on a 16-color display +pl.scmap0n(3); + +pl.adv(0) +pl.vpor(0.1, 0.9, 0.1, 0.9) +pl.wind(-1, 1, -1, 1) + +pl.psty(0) + +pl.shades(z, -1, 1, -1, 1, shedge, fill_width, 2, 3, 0, "pltr2", cgrid2) + +pl.col0(1) +pl.box("bcnst", 0, 0, "bcnstv", 0, 0) +pl.col0(2) + +pl.lab("distance", "altitude", "Bogon density") + +-- Note this exclusion API will probably change. + +-- Plot using 2d coordinate transform and exclusion +if exclude~=0 then + + -- Load colour palettes + pl.spal0("cmap0_black_on_white.pal"); + pl.spal1("cmap1_gray.pal",1); + + -- Reduce colors in cmap 0 so that cmap 1 is useful on a 16-color display + pl.scmap0n(3); + + pl.adv(0) + pl.vpor(0.1, 0.9, 0.1, 0.9) + pl.wind(-1, 1, -1, 1) + + plpsty(0) + + pl.shades(z, zdefined, -1, 1, -1, 1, shedge, fill_width, cont_color, cont_width, + 0, "pltr2", cgrid2) + + pl.col0(1) + pl.box("bcnst", 0, 0, "bcnstv", 0, 0) + + pl.lab("distance", "altitude", "Bogon density with exclusion") +end + +-- Example with polar coordinates. + +-- Load colour palettes +pl.spal0("cmap0_black_on_white.pal"); +pl.spal1("cmap1_gray.pal",1); + +-- Reduce colors in cmap 0 so that cmap 1 is useful on a 16-color display +pl.scmap0n(3); + +pl.adv(0) +pl.vpor(.1, .9, .1, .9) +pl.wind(-1, 1, -1, 1) + +pl.psty(0) + +-- Build new coordinate matrices. +for i = 1, nx do + r = (i-1)/(nx-1) + for j = 1, ny do + t = 2*math.pi/(ny-1)*(j-1) + cgrid2["xg"][i][j] = r*math.cos(t) + cgrid2["yg"][i][j] = r*math.sin(t) + z[i][j] = math.exp(-r^2)*math.cos(5*math.pi*r)*math.cos(5*t) + end +end + +-- Need a new shedge to go along with the new data set. +zmin, zmax = f2mnmx(z, nx, ny) + +for i = 1, ns+1 do + shedge[i] = zmin + (zmax-zmin)*(i-1)/ns +end + +-- Now we can shade the interior region. +pl.shades(z, -1, 1, -1, 1, shedge, fill_width, cont_color, cont_width, 0, "pltr2", cgrid2) + +-- Now we can draw the perimeter. (If do before, shade stuff may overlap.) +for i = 1, PERIMETERPTS do + t = 2*math.pi/(PERIMETERPTS-1)*(i-1) + px[i] = math.cos(t) + py[i] = math.sin(t) +end +pl.col0(1) +pl.line(px, py) + +-- And label the plot. +pl.col0(2) +pl.lab( "", "", "Tokamak Bogon Instability" ) + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x17.lua b/nanonote-example-files/files/lua-plplot-examples/x17.lua new file mode 100644 index 0000000..184aa50 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x17.lua @@ -0,0 +1,118 @@ +--[[ $Id: x17.lua 9526 2009-02-13 22:06:13Z smekal $ + + Plots a simple stripchart with four pens. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + + +-------------------------------------------------------------------------- +-- main +-------------------------------------------------------------------------- + +nsteps = 1000 +colline = {} +legline = {} + +-- plplot initialization +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- User sets up plot completely except for window and data +-- Eventually settings in place when strip chart is created will be +-- remembered so that multiple strip charts can be used simultaneously. + +-- Specify some reasonable defaults for ymin and ymax +-- The plot will grow automatically if needed (but not shrink) +ymin = -0.1 +ymax = 0.1 + +-- Specify initial tmin and tmax -- this determines length of window. +-- Also specify maximum jump in t +-- This can accomodate adaptive timesteps +tmin = 0 +tmax = 10 +tjump = 0.3 -- percentage of plot to jump + +-- Axes options same as plbox. +-- Only automatic tick generation and label placement allowed +-- Eventually I'll make this fancier +colbox = 1 +collab = 3 +styline = { 2, 3, 4, 5 } -- line style +colline = { 2, 3, 4, 5 } -- pens color + +legline= { "sum", "sin", "sin*noi", "sin+noi" } -- pens legend + +xlab = 0 -- legend position +ylab = 0.25 + +autoy = 1 -- autoscale y +acc = 1 -- don't scrip, accumulate + +-- Initialize plplot +pl.init() + +pl.adv(0) +pl.vsta() + +id1 = pl.stripc("bcnst", "bcnstv", + tmin, tmax, tjump, ymin, ymax, + xlab, ylab, + autoy, acc, + colbox, collab, + colline, styline, legline, + "t", "", "Strip chart demo") + +autoy = 0 -- autoscale y +acc = 1 -- accumulate + +-- This is to represent a loop over time +-- Let's try a random walk process + +y1 = 0 +y2 = 0 +y3 = 0 +y4 = 0 +dt = 0.1 + +for n = 0, nsteps-1 do + for i = 0, 200000 do end + t = n * dt + noise = pl.randd() - 0.5 + y1 = y1 + noise + y2 = math.sin(t*math.pi/18) + y3 = y2 * noise + y4 = y2 + noise/3 + + -- There is no need for all pens to have the same number of + -- points or beeing equally time spaced. + if math.mod(n, 2)~=0 then pl.stripa(id1, 0, t, y1) end + if math.mod(n, 3)~=0 then pl.stripa(id1, 1, t, y2) end + if math.mod(n, 4)~=0 then pl.stripa(id1, 2, t, y3) end + if math.mod(n, 5)~=0 then pl.stripa(id1, 3, t, y4) end +end + +-- Destroy strip chart and it's memory +pl.stripd(id1) +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x18.lua b/nanonote-example-files/files/lua-plplot-examples/x18.lua new file mode 100644 index 0000000..41524f2 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x18.lua @@ -0,0 +1,145 @@ +--[[ $Id: x18.lua 9526 2009-02-13 22:06:13Z smekal $ + + 3-d line and point plot demo. Adapted from x08c.c. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +function test_poly(k) + draw= { { 1, 1, 1, 1 }, + { 1, 0, 1, 0 }, + { 0, 1, 0, 1 }, + { 1, 1, 0, 0 } } + + x = {} + y = {} + z = {} + + pl.adv(0) + pl.vpor(0, 1, 0, 0.9) + pl.wind(-1, 1, -0.9, 1.1) + pl.col0(1) + pl.w3d(1, 1, 1, -1, 1, -1, 1, -1, 1, alt[k], az[k]) + pl.box3("bnstu", "x axis", 0, 0, + "bnstu", "y axis", 0, 0, + "bcdmnstuv", "z axis", 0, 0) + + pl.col0(2) + + -- x = r sin(phi) cos(theta) + -- y = r sin(phi) sin(theta) + -- z = r cos(phi) + -- r = 1 :=) + + for i=0, 19 do + for j=0, 19 do + x[1] = math.sin( math.pi*j/20.1 ) * math.cos( 2*math.pi*i/20 ) + y[1] = math.sin( math.pi*j/20.1 ) * math.sin( 2*math.pi*i/20 ) + z[1] = math.cos( math.pi*j/20.1 ) + + x[2] = math.sin( math.pi*(j+1)/20.1 ) * math.cos( 2*math.pi*i/20 ) + y[2] = math.sin( math.pi*(j+1)/20.1 ) * math.sin( 2*math.pi*i/20 ) + z[2] = math.cos( math.pi*(j+1)/20.1 ) + + x[3] = math.sin( math.pi*(j+1)/20.1 ) * math.cos( 2*math.pi*(i+1)/20 ) + y[3] = math.sin( math.pi*(j+1)/20.1 ) * math.sin( 2*math.pi*(i+1)/20 ) + z[3] = math.cos( math.pi*(j+1)/20.1 ) + + x[4] = math.sin( math.pi*j/20.1 ) * math.cos( 2*math.pi*(i+1)/20 ) + y[4] = math.sin( math.pi*j/20.1 ) * math.sin( 2*math.pi*(i+1)/20 ) + z[4] = math.cos( math.pi*j/20.1 ) + + x[5] = math.sin( math.pi*j/20.1 ) * math.cos( 2*math.pi*i/20 ) + y[5] = math.sin( math.pi*j/20.1 ) * math.sin( 2*math.pi*i/20 ) + z[5] = math.cos( math.pi*j/20.1 ) + + pl.poly3( x, y, z, draw[k], 1 ) + end + end + + pl.col0(3) + pl.mtex("t", 1, 0.5, 0.5, "unit radius sphere" ) +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Does a series of 3-d plots for a given data set, with different +-- viewing options in each plot. +---------------------------------------------------------------------------- + +NPTS = 1000 +opt = { 1, 0, 1, 0 } +alt = { 20, 35, 50, 65 } +az = { 30, 40, 50, 60 } + + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +for k=1, 4 do + test_poly(k) +end + +x = {} +y = {} +z = {} + +-- From the mind of a sick and twisted physicist... +for i=1, NPTS do + z[i] = -1 + 2*(i-1)/NPTS + + -- Pick one ... + -- r = 1 - (i-1) / NPTS + r = z[i] + + x[i] = r * math.cos( 12*math.pi*(i-1)/NPTS ) + y[i] = r * math.sin( 12*math.pi*(i-1)/NPTS ) +end + +for k=1, 4 do + pl.adv(0) + pl.vpor(0, 1, 0, 0.9) + pl.wind(-1, 1, -0.9, 1.1) + pl.col0(1) + pl.w3d(1, 1, 1, -1, 1, -1, 1, -1, 1, alt[k], az[k]) + pl.box3("bnstu", "x axis", 0, 0, + "bnstu", "y axis", 0, 0, + "bcdmnstuv", "z axis", 0, 0) + + pl.col0(2) + + if opt[k]~=0 then + pl.line3( x, y, z ) + else + pl.poin3( x, y, z, 1 ) + end + + pl.col0(3) + pl.mtex("t", 1.0, 0.5, 0.5, "#frPLplot Example 18 - Alt=" .. alt[k] .. ", Az=" .. az[k]) +end + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x19.lua b/nanonote-example-files/files/lua-plplot-examples/x19.lua new file mode 100644 index 0000000..072e111 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x19.lua @@ -0,0 +1,153 @@ +--[[ $Id: x19.lua 10293 2009-08-19 07:57:43Z smekal $ + + Illustrates backdrop plotting of world, US maps. + Contributed by Wesley Ebisuzaki. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-------------------------------------------------------------------------- +-- mapform19 +-- +-- Defines specific coordinate transformation for example 19. +-- Not to be confused with mapform in src/plmap.c. +-- x[], y[] are the coordinates to be plotted. +-------------------------------------------------------------------------- + +function mapform19(n, x, y) + for i = 1, n do + radius = 90 - y[i] + xp = radius * math.cos(x[i] * math.pi / 180) + yp = radius * math.sin(x[i] * math.pi / 180) + x[i] = xp + y[i] = yp + end + + return x, y +end + +-- "Normalize" longitude values so that they always fall between +-- -180.0 and 180.0 +function normalize_longitude(lon) + if lon>=-180 and lon<=180 then + return lon; + else + times = math.floor((math.abs(lon)+180)/360) + if lon<0 then + return lon+360*times + else + return lon-360*times + end + end +end + +-- A custom axis labeling function for longitudes and latitudes. +function geolocation_labeler(axis, value) + if axis==pl.PL_Y_AXIS then + label_val = value + if label_val>0 then + direction_label = " N" + else + if label_val<0 then + direction_label = " S" + else + direction_label = "Eq" + end + end + else + if axis==pl.PL_X_AXIS then + label_val = normalize_longitude(value); + if label_val>0 then + direction_label = " E" + else + if label_val<0 then + direction_label = " W" + else + direction_label = "" + end + end + end + end + + if axis==pl.PL_Y_AXIS and value==0 then + -- A special case for the equator + label = direction_label + else + label = math.abs(label_val) .. direction_label + end + + return label +end + +-------------------------------------------------------------------------- +-- main +-- +-- Shows two views of the world map. +-------------------------------------------------------------------------- + +-- Parse and process command line arguments + +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Longitude (x) and latitude (y) + +miny = -70 +maxy = 80 + +pl.init() + +-- Cartesian plots +-- Most of world + +minx = 190 +maxx = 190+360 + +-- Setup a custom latitude and longitude-based scaling function. +pl.slabelfunc("geolocation_labeler"); + +pl.col0(1) +pl.env(minx, maxx, miny, maxy, 1, 70) +pl.map(nil, "usaglobe", minx, maxx, miny, maxy) + +-- The Americas + +minx = 190 +maxx = 340 + +pl.col0(1) +pl.env(minx, maxx, miny, maxy, 1, 70) +pl.map(nil, "usaglobe", minx, maxx, miny, maxy) + +-- Clear the labeling function +pl.slabelfunc(nil); + +-- Polar, Northern hemisphere + +minx = 0 +maxx = 360 + +pl.env(-75., 75., -75., 75., 1, -1) +pl.map("mapform19", "globe", minx, maxx, miny, maxy) + +pl.lsty(2) +pl.meridians("mapform19", 10, 10, 0, 360, -10, 80) +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x20.lua b/nanonote-example-files/files/lua-plplot-examples/x20.lua new file mode 100644 index 0000000..9a9043c --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x20.lua @@ -0,0 +1,294 @@ +--[[ $Id: x20.lua 9535 2009-02-17 10:14:04Z smekal $ + + plimage demo +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +XDIM = 260 +YDIM = 220 + +dbg = 0 +nosombrero = 0 +nointeractive = 0 +f_name="" + + +-- Transformation function +function mypltr(x, y) + local x0 = (stretch["xmin"] + stretch["xmax"])*0.5 + local y0 = (stretch["ymin"] + stretch["ymax"])*0.5 + local dy = (stretch["ymax"]-stretch["ymin"])*0.5 + local tx = x0 + (x0-x)*(1 - stretch["stretch"]*math.cos((y-y0)/dy*math.pi*0.5)) + local ty = y + + return tx, ty +end + + +-- read image from file in binary ppm format +function read_img(fname) + -- naive grayscale binary ppm reading. If you know how to, improve it + local fp = io.open(fname, "rb") + if fp==nil then + return 1 + end + + -- version + local ver = fp:read("*line") + + if ver~="P5" then -- I only understand this! + fp:close() + return 1 + end + + while fp:read(1)=="#" do + local com = fp:read("*line") + if com==nil then + fp:close() + return 1 + end + end + fp:seek("cur", -1) + + local w, h, num_col = fp:read("*number", "*number", "*number") + if w==nil or h==nil or num_col==nil then -- width, height, num colors + fp:close() + return 1 + end + + -- read the rest of the line (only EOL) + fp:read("*line") + + local img = fp:read(w*h) + fp:close() + if string.len(img)~=(w*h) then + return 1 + end + + local imf = {} + + for i = 1, w do + imf[i] = {} + for j = 1, h do + imf[i][j] = string.byte(img, (h-j)*w+i) -- flip image up-down + end + end + + return 0, imf, w, h, num_col +end + + +-- save plot +function save_plot(fname) + local cur_strm = pl.gstrm() -- get current stream + local new_strm = pl.mkstrm() -- create a new one + + pl.sdev("psc") -- new device type. Use a known existing driver + pl.sfnam(fname) -- file name + + pl.cpstrm(cur_strm, 0) -- copy old stream parameters to new stream + pl.replot() -- do the save + pl.end1() -- close new device + + pl.sstrm(cur_strm) -- and return to previous one +end + + +-- get selection square interactively +function get_clip(xi, xe, yi, ye) + return 0, xi, xe, yi, ye +end + + +-- set gray colormap +function gray_cmap(num_col) + local r = { 0, 1 } + local g = { 0, 1 } + local b = { 0, 1 } + local pos = { 0, 1 } + + pl.scmap1n(num_col) + pl.scmap1l(1, pos, r, g, b) +end + + +x = {} +y = {} +z = {} +r = {} +img_f = {} +cgrid2 = {} + + +-- Bugs in plimage(): +-- + at high magnifications, the left and right edge are ragged, try +-- ./x20c -dev xwin -wplt 0.3,0.3,0.6,0.6 -ori 0.5 + +-- Bugs in x20c.c: +-- + if the window is resized after a selection is made on "lena", when + --making a new selection the old one will re-appear. + + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +z={} + +-- view image border pixels +if dbg~=0 then + pl.env(1, XDIM, 1, YDIM, 1, 1) -- no plot box + + -- build a one pixel square border, for diagnostics + for i = 1, XDIM do + z[i] = {} + z[i][1] = 1 -- left + z[i][YDIM] = 1 -- right + end + + for i = 1, YDIM do + z[1][i] = 1 -- top + z[XDIM][i] = 1 -- botton + end + + pl.lab("...around a blue square."," ","A red border should appear...") + + pl.image(z, 1, XDIM, 1, YDIM, 0, 0, 1, XDIM, 1, YDIM) +end + +-- sombrero-like demo +if nosombrero==0 then + r = {} + pl.col0(2) -- draw a yellow plot box, useful for diagnostics! :( + pl.env(0, 2*math.pi, 0, 3*math.pi, 1, -1) + + for i = 1, XDIM do + x[i] = (i-1)*2*math.pi/(XDIM-1) + end + for i = 1, YDIM do + y[i] = (i-1)*3*math.pi/(YDIM-1) + end + + for i = 1, XDIM do + r[i] = {} + z[i] = {} + for j=1, YDIM do + r[i][j] = math.sqrt(x[i]^2+y[j]^2)+1e-3 + z[i][j] = math.sin(r[i][j])/r[i][j] + end + end + + pl.lab("No, an amplitude clipped \"sombrero\"", "", "Saturn?") + pl.ptex(2, 2, 3, 4, 0, "Transparent image") + pl.image(z, 0, 2*math.pi, 0, 3*math.pi, 0.05, 1, 0, 2*math.pi, 0, 3*math.pi) + + -- save the plot + if f_name~="" then + save_plot(f_name) + end +end + +-- read Lena image +-- Note we try two different locations to cover the case where this +-- examples is being run from the test_c.sh script +status, img_f, width, height, num_col = read_img("lena.pgm") +if status~=0 then + status, img_f, width, height, num_col = read_img("../lena.pgm") + if status~=0 then + pl.abort("No such file") + pl.plend() + os.exit() + end +end + +-- set gray colormap +gray_cmap(num_col) + +-- display Lena +pl.env(1, width, 1, height, 1, -1) + +if nointeractive==0 then + pl.lab("Set and drag Button 1 to (re)set selection, Button 2 to finish."," ","Lena...") +else + pl.lab(""," ","Lena...") +end + +pl.image(img_f, 1, width, 1, height, 0, 0, 1, width, 1, height) + +-- selection/expansion demo +if nointeractive==0 then + xi = 200 + xe = 330 + yi = 280 + ye = 220 + + status, xi, xe, yi, ye = get_clip(xi, xe, yi, ye) + if status~=0 then -- get selection rectangle + pl.plend() + os.exit() + end + + pl.spause(0) + pl.adv(0) + + -- display selection only + pl.image(img_f, 1, width, 1, height, 0, 0, xi, xe, ye, yi) + + pl.spause(1) + + -- zoom in selection + pl.env(xi, xe, ye, yi, 1, -1) + pl.image(img_f, 1, width, 1, height, 0, 0, xi, xe, ye, yi) +end + +-- Base the dynamic range on the image contents. +img_max, img_min = pl.MinMax2dGrid(img_f) + +-- Draw a saturated version of the original image. Only use the middle 50% +-- of the image's full dynamic range. +pl.col0(2) +pl.env(0, width, 0, height, 1, -1) +pl.lab("", "", "Reduced dynamic range image example") +pl.imagefr(img_f, 0, width, 0, height, 0, 0, img_min + img_max*0.25, img_max - img_max*0.25) + +-- Draw a distorted version of the original image, showing its full dynamic range. +pl.env(0, width, 0, height, 1, -1) +pl.lab("", "", "Distorted image example") + +stretch = {} +stretch["xmin"] = 0 +stretch["xmax"] = width +stretch["ymin"] = 0 +stretch["ymax"] = height +stretch["stretch"] = 0.5 + +-- In C / C++ the following would work, with plimagefr directly calling +-- mypltr. For compatibilty with other language bindings the same effect +-- can be achieved by generating the transformed grid first and then +-- using pltr2. +-- pl.imagefr(img_f, width, height, 0., width, 0., height, 0., 0., img_min, img_max, mypltr, (PLPointer) &stretch) + +cgrid2 = {} +cgrid2["xg"] = {} +cgrid2["yg"] = {} +cgrid2["nx"] = width+1 +cgrid2["ny"] = height+1 + +for i = 1, width+1 do + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + for j = 1, height+1 do + xx, yy = mypltr(i, j) + cgrid2["xg"][i][j] = xx + cgrid2["yg"][i][j] = yy + end +end + +--pl.imagefr(img_f, 0, width, 0, height, 0, 0, img_min, img_max, "pltr2", cgrid2) +pl.imagefr(img_f, 0, width, 0, height, 0, 0, img_min, img_max, "mypltr") + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x21.lua b/nanonote-example-files/files/lua-plplot-examples/x21.lua new file mode 100644 index 0000000..7f4065e --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x21.lua @@ -0,0 +1,256 @@ +--[[ $Id: x21.lua 9533 2009-02-16 22:18:37Z smekal $ + Grid data demo + + Copyright (C) 200 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-- bitwise or operator from http://lua-users.org/wiki/BaseSixtyFour +-- (c) 2006-2008 by Alex Kloss +-- licensed under the terms of the LGPL2 + +-- return single bit (for OR) +function bit(x,b) + return (math.mod(x, 2^b) - math.mod(x,2^(b-1)) > 0) +end + +-- logic OR for number values +function lor(x,y) + result = 0 + for p=1,8 do result = result + (((bit(x,p) or bit(y,p)) == true) and 2^(p-1) or 0) end + return result +end + +-- Options data structure definition. +pts = 500 +xp = 25 +yp = 20 +nl = 16 +knn_order = 20 +threshold = 1.001 +wmin = -1e3 +randn = 0 +rosen = 0 + + +function cmap1_init() + i = { 0, 1 } -- left and right boundary + + h = { 240, 0 } -- blue -> green -> yellow -> red + l = { 0.6, 0.6 } + s = { 0.8, 0.8 } + + pl.scmap1n(256) + pl.scmap1l(0, i, h, l, s) +end + + +function create_grid(px, py) + local x = {} + local y = {} + + for i = 1, px do + x[i] = xm + (xM-xm)*(i-1)/(px-1) + end + + for i = 1, py do + y[i] = ym + (yM-ym)*(i-1)/(py-1) + end + + return x, y +end + + +function create_data(pts) + local x = {} + local y = {} + local z = {} + + for i = 1, pts do + xt = (xM-xm)*pl.randd() + yt = (yM-ym)*pl.randd() + if randn==0 then + x[i] = xt + xm + y[i] = yt + ym + else -- std=1, meaning that many points are outside the plot range + x[i] = math.sqrt(-2*math.log(xt)) * math.cos(2*math.pi*yt) + xm + y[i] = math.sqrt(-2*math.log(xt)) * math.sin(2*math.pi*yt) + ym + end + if rosen==0 then + r = math.sqrt(x[i]^2 + y[i]^2) + z[i] = math.exp(-r^2) * math.cos(2*math.pi*r) + else + z[i] = math.log((1-x[i])^2 + 100*(y[i] - x[i]^2)^2) + end + end + + return x, y, z +end + + +title = { "Cubic Spline Approximation", + "Delaunay Linear Interpolation", + "Natural Neighbors Interpolation", + "KNN Inv. Distance Weighted", + "3NN Linear Interpolation", + "4NN Around Inv. Dist. Weighted" } + + + +xm = -0.2 +ym = -0.2 +xM = 0.6 +yM = 0.6 + +pl.parseopts(arg, pl.PL_PARSE_FULL) + +opt = { 0, 0, wmin, knn_order, threshold, 0 } + +-- Initialize plplot +pl.init() + +-- Initialise random number generator +pl.seed(5489) + +x, y, z = create_data(pts) -- the sampled data +zmin = z[1] +zmax = z[1] +for i=2, pts do + if z[i]>zmax then zmax = z[i] end + if z[i]=1 and jj>=1 and zg[ii][jj]==zg[ii][jj] then + if (math.abs(ii-i) + math.abs(jj-j)) == 1 then + d = 1 + else + d = 1.4142 + end + zg[i][j] = zg[i][j] + zg[ii][jj]/(d^2) + dist = dist + d + end + end + end + end + end + if dist~=0 then + zg[i][j] = zg[i][j]/dist + else + zg[i][j] = zmin + end + end + end + end + end + + lzM, lzm = pl.MinMax2dGrid(zg) + + if lzm~=lzm then lzm=zmin else lzm = math.min(lzm, zmin) end + if lzM~=lzM then lzM=zmax else lzM = math.max(lzM, zmax) end + + -- Increase limits slightly to prevent spurious contours + -- due to rounding errors + lzm = lzm-0.01 + lzM = lzM+0.01 + + pl.col0(1) + + pl.adv(alg) + + if k==1 then + for i = 1, nl do + clev[i] = lzm + (lzM-lzm)/(nl-1)*(i-1) + end + + pl.env0(xm, xM, ym, yM, 2, 0) + pl.col0(15) + pl.lab("X", "Y", title[alg]) + pl.shades(zg, xm, xM, ym, yM, clev, 1, 0, 1, 1) + pl.col0(2) + else + for i = 1, nl do + clev[i] = lzm + (lzM-lzm)/(nl-1)*(i-1) + end + + cmap1_init() + pl.vpor(0, 1, 0, 0.9) + pl.wind(-1.1, 0.75, -0.65, 1.20) + + -- For the comparison to be fair, all plots should have the + -- same z values, but to get the max/min of the data generated + -- by all algorithms would imply two passes. Keep it simple. + -- + -- pl.w3d(1, 1, 1, xm, xM, ym, yM, zmin, zmax, 30, -60) + + + pl.w3d(1, 1, 1, xm, xM, ym, yM, lzm, lzM, 30, -40) + pl.box3("bntu", "X", 0, 0, + "bntu", "Y", 0, 0, + "bcdfntu", "Z", 0.5, 0) + pl.col0(15) + pl.lab("", "", title[alg]) + pl.plot3dc(xg, yg, zg, lor(lor(pl.DRAW_LINEXY, pl.MAG_COLOR), pl.BASE_CONT), clev) + end + end +end + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x22.lua b/nanonote-example-files/files/lua-plplot-examples/x22.lua new file mode 100644 index 0000000..9e64799 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x22.lua @@ -0,0 +1,273 @@ +--[[ $Id: x22.lua 9526 2009-02-13 22:06:13Z smekal $ + + Simple vector plot example + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-- Pairs of points making the line segments used to plot the user defined arrow +arrow_x = { -0.5, 0.5, 0.3, 0.5, 0.3, 0.5 } +arrow_y = { 0, 0, 0.2, 0, -0.2, 0 } +arrow2_x = { -0.5, 0.3, 0.3, 0.5, 0.3, 0.3 } +arrow2_y = { 0, 0, 0.2, 0, -0.2, 0 } + + +-- Vector plot of the circulation about the origin +function circulation() + nx = 20 + ny = 20 + dx = 1 + dy = 1 + + xmin = -nx/2*dx + xmax = nx/2*dx + ymin = -ny/2*dy + ymax = ny/2*dy + + cgrid2 = {} + cgrid2["xg"] = {} + cgrid2["yg"] = {} + cgrid2["nx"] = nx + cgrid2["ny"] = ny + u = {} + v = {} + + -- Create data - circulation around the origin. + for i = 1, nx do + x = (i-1-nx/2+0.5)*dx + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + u[i] = {} + v[i] = {} + for j=1, ny do + y = (j-1-ny/2+0.5)*dy + cgrid2["xg"][i][j] = x + cgrid2["yg"][i][j] = y + u[i][j] = y + v[i][j] = -x + end + end + + -- Plot vectors with default arrows + pl.env(xmin, xmax, ymin, ymax, 0, 0) + pl.lab("(x)", "(y)", "#frPLplot Example 22 - circulation") + pl.col0(2) + pl.vect(u, v, 0, "pltr2", cgrid2 ) + pl.col0(1) +end + + +-- Vector plot of flow through a constricted pipe +function constriction() + nx = 20 + ny = 20 + dx = 1 + dy = 1 + + xmin = -nx/2*dx + xmax = nx/2*dx + ymin = -ny/2*dy + ymax = ny/2*dy + + cgrid2 = {} + cgrid2["xg"] = {} + cgrid2["yg"] = {} + cgrid2["nx"] = nx + cgrid2["ny"] = ny + u = {} + v = {} + + Q = 2 + for i = 1, nx do + x = (i-1-nx/2+0.5)*dx + cgrid2["xg"][i] = {} + cgrid2["yg"][i] = {} + u[i] = {} + v[i] = {} + for j = 1, ny do + y = (j-1-ny/2+0.5)*dy + cgrid2["xg"][i][j] = x + cgrid2["yg"][i][j] = y + b = ymax/4*(3-math.cos(math.pi*x/xmax)) + if math.abs(y)PLplot Example 23 - Greek Letters", + "#<0x10>PLplot Example 23 - Type 1 Symbol Font Glyphs by Unicode (a)", + "#<0x10>PLplot Example 23 - Type 1 Symbol Font Glyphs by Unicode (b)", + "#<0x10>PLplot Example 23 - Type 1 Symbol Font Glyphs by Unicode (c)", + "#<0x10>PLplot Example 23 - Number Forms Unicode Block", + "#<0x10>PLplot Example 23 - Arrows Unicode Block (a)", + "#<0x10>PLplot Example 23 - Arrows Unicode Block (b)", + "#<0x10>PLplot Example 23 - Mathematical Operators Unicode Block (a)", + "#<0x10>PLplot Example 23 - Mathematical Operators Unicode Block (b)", + "#<0x10>PLplot Example 23 - Mathematical Operators Unicode Block (c)", + "#<0x10>PLplot Example 23 - Mathematical Operators Unicode Block (d)" +} + +lo = { + 0, + 0, + 64, + 128, + 8531, + 8592, + 8656, + 8704, + 8768, + 8832, + 8896 +} + +hi = { + 48, + 64, + 128, + 166, + 8580, + 8656, + 8704, + 8768, + 8832, + 8896, + 8960 +} + +nxcells = { + 12, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 +} + +nycells = { + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 +} + +-- non-zero values Must be consistent with nxcells and nycells. +offset = { + 0, + 0, + 64, + 128, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +} + +-- 30 possible FCI values. +FCI_COMBINATIONS = 30 +fci = { + 2147483648, + 2147483649, + 2147483650, + 2147483651, + 2147483652, + 2147483664, + 2147483665, + 2147483666, + 2147483667, + 2147483668, + 2147483680, + 2147483681, + 2147483682, + 2147483683, + 2147483684, + 2147483904, + 2147483905, + 2147483906, + 2147483907, + 2147483908, + 2147483920, + 2147483921, + 2147483922, + 2147483923, + 2147483924, + 2147483936, + 2147483937, + 2147483938, + 2147483939, + 2147483940 +} + +family = { + "sans-serif", + "serif", + "monospace", + "script", + "symbol" +} + +style = { + "upright", + "italic", + "oblique" +} + +weight = { + "medium", + "bold" +} + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +for page=1, 11 do + pl.adv(0) + + -- Set up viewport and window + pl.vpor(0.02, 0.98, 0.02, 0.90) + pl.wind(0, 1, 0, 1) + xmin, xmax, ymin, ymax = pl.gspa() + pl.schr(0, 0.8) + ycharacter_scale = (1-0)/(ymax-ymin) + + -- Factor should be 0.5, but heuristically it turns out to be larger. + chardef, charht = pl.gchr() + yoffset = charht*ycharacter_scale + + -- Draw the grid using plbox + pl.col0(2) + deltax = 1.0/nxcells[page] + deltay = 1.0/nycells[page] + pl.box("bcg", deltax, 0, "bcg", deltay, 0) + pl.col0(15) + length=hi[page]-lo[page] + slice = 1 + + for j=nycells[page]-1, -1, -1 do + y = (0.5+j)*deltay + for i=1, nxcells[page] do + x = (i-0.5)*deltax + if slice<=length then + if page==1 then + cmdString = "#" .. Greek[slice] + elseif (page>=2) and (page<=4) then + cmdString = string.format("##[0x%.4x]", Type1[offset[page]+slice]) + elseif page>4 then + cmdString = string.format("##[0x%.4x]", lo[page]+slice-1) + end + pl.ptex(x, y+yoffset, 1, 0, 0.5, string.sub(cmdString,2)) + pl.ptex(x, y-yoffset, 1, 0, 0.5, cmdString) + end + slice = slice + 1 + end + end + + pl.schr(0, 1) + + -- Page title + pl.mtex("t", 1.5, 0.5, 0.5, title[page]) +end + +-- Demonstrate methods of getting the current fonts +fci_old = pl.gfci() +ifamily, istyle, iweight = pl.gfont() +print(string.format("For example 23 prior to page 12 the FCI is 0x%x", fci_old)) +print(string.format("For example 23 prior to page 12 the font family, style and weight are %s %s %s", + family[ifamily+1], style[istyle+1], weight[iweight+1])) + +for page=12, 16 do + dy = 0.030 + + pl.adv(0) + pl.vpor(0.02, 0.98, 0.02, 0.90) + pl.wind(0, 1, 0, 1) + pl.sfci(0) + + if page==12 then + pl.mtex("t", 1.5, 0.5, 0.5, "#<0x10>PLplot Example 23 - Set Font with plsfci") + elseif page==13 then + pl.mtex("t", 1.5, 0.5, 0.5, "#<0x10>PLplot Example 23 - Set Font with plsfont") + elseif page==14 then + pl.mtex("t", 1.5, 0.5, 0.5, "#<0x10>PLplot Example 23 - Set Font with ##<0x8nnnnnnn> construct") + elseif page==15 then + pl.mtex("t", 1.5, 0.5, 0.5, "#<0x10>PLplot Example 23 - Set Font with ##<0xmn> constructs") + elseif page==16 then + pl.mtex("t", 1.5, 0.5, 0.5, "#<0x10>PLplot Example 23 - Set Font with ## constructs") + end + + pl.schr(0, 0.75) + for i=1, FCI_COMBINATIONS do + family_index = math.mod(i-1, 5)+1 + style_index = math.mod(math.floor((i-1)/5), 3)+1 + weight_index = math.mod(math.floor((i-1)/5/3), 2)+1 + if page==12 then + pl.sfci(fci[i]) + str = string.format("Page 12, %s, %s, %s: The quick brown fox jumps over the lazy dog", + family[family_index], style[style_index], weight[weight_index]) + elseif page==13 then + pl.sfont(family_index-1, style_index-1, weight_index-1) + str = string.format("Page 13, %s, %s, %s: The quick brown fox jumps over the lazy dog", + family[family_index], style[style_index], weight[weight_index]) + elseif page==14 then + str = string.format("Page 14, %s, %s, %s: #<0x%x>The quick brown fox jumps over the lazy dog", + family[family_index], style[style_index], weight[weight_index], fci[i]) + elseif page==15 then + str = string.format("Page 15, %s, %s, %s: #<0x%1x0>#<0x%1x1>#<0x%1x2>The quick brown fox jumps over the lazy dog", + family[family_index], style[style_index], weight[weight_index], + family_index-1, style_index-1, weight_index-1) + elseif page==16 then + str = string.format("Page 16, %s, %s, %s: #<%s/>#<%s/>#<%s/>The quick brown fox jumps over the lazy dog", + family[family_index], style[style_index], weight[weight_index], + family[family_index], style[style_index], weight[weight_index]) + end + pl.ptex(0, 1-(i-0.5)*dy, 1, 0, 0, str) + end + + pl.schr(0, 1) +end + +-- Restore defaults +pl.col0(1) + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x24.lua b/nanonote-example-files/files/lua-plplot-examples/x24.lua new file mode 100644 index 0000000..5b21e7b --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x24.lua @@ -0,0 +1,142 @@ +--[[ $Id: x24.lua 9414 2009-01-29 22:48:54Z airwin $ + + Unicode Pace Flag + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + In Debian, run like this: + + ( TTFDIR=/usr/share/fonts/truetype \ + PLPLOT_FREETYPE_SANS_FONT=$TTFDIR/arphic/bkai00mp.ttf \ + PLPLOT_FREETYPE_SERIF_FONT=$TTFDIR/freefont/FreeSerif.ttf \ + PLPLOT_FREETYPE_MONO_FONT=$TTFDIR/ttf-devanagari-fonts/lohit_hi.ttf \ + PLPLOT_FREETYPE_SCRIPT_FONT=$TTFDIR/unfonts/UnBatang.ttf \ + PLPLOT_FREETYPE_SYMBOL_FONT=$TTFDIR/ttf-bengali-fonts/JamrulNormal.ttf \ + ./x24c -dev png -drvopt smooth=0 -o x24c.png ) + + Packages needed: + + ttf-arphic-bkai00mp + ttf-freefont + ttf-devanagari-fonts + ttf-unfonts + ttf-bengali-fonts +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +red = { 240, 204, 204, 204, 0, 39, 125 } +green = { 240, 0, 125, 204, 204, 80, 0 } +blue = { 240, 0, 0, 0, 0, 204, 125 } + +px = { 0, 0, 1, 1 } +py = { 0, 0.25, 0.25, 0 } + +sx = { + 0.16374, + 0.15844, + 0.15255, + 0.17332, + 0.50436, + 0.51721, + 0.49520, + 0.48713, + 0.83976, + 0.81688, + 0.82231, + 0.82647 +} + +sy = { + 0.125, + 0.375, + 0.625, + 0.875, + 0.125, + 0.375, + 0.625, + 0.875, + 0.125, + 0.375, + 0.625, + 0.875 +} + + +-- Taken from http://www.columbia.edu/~fdc/pace/ + +peace = { + -- Mandarin + "#<0x00>和平", + -- Hindi + "#<0x20>शांति", + -- English + "#<0x10>Peace", + -- Hebrew + "#<0x10>שלום", + -- Russian + "#<0x10>Мир", + -- German + "#<0x10>Friede", + -- Korean + "#<0x30>평화", + -- French + "#<0x10>Paix", + -- Spanish + "#<0x10>Paz", + -- Arabic + "#<0x10>ﺳﻼم", + -- Turkish + "#<0x10>Barış", + -- Kurdish + "#<0x10>Hasîtî", +} + +pl.parseopts(arg, pl.PL_PARSE_FULL) + +pl.init() + +pl.adv(0) +pl.vpor(0, 1, 0, 1) +pl.wind(0, 1, 0, 1) +pl.col0(0) +pl.box("", 1, 0, "", 1, 0) + +pl.scmap0n(7) +pl.scmap0(red, green, blue) + +pl.schr(0, 4) +pl.font(1) + +for i = 1, 4 do + pl.col0(i) + pl.fill(px, py) + + for j = 1, 4 do + py[j] = py[j] + 1/4 + end +end + +pl.col0(0) +for i = 1, 12 do + pl.ptex(sx[i], sy[i], 1, 0, 0.5, peace[i]) +end + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x25.lua b/nanonote-example-files/files/lua-plplot-examples/x25.lua new file mode 100644 index 0000000..d2935a4 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x25.lua @@ -0,0 +1,96 @@ +--[[ $Id: x25.lua 10668 2009-12-02 08:38:49Z airwin $ + + Filling and clipping polygons. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-------------------------------------------------------------------------- +-- main +-- +-- Test program for filling polygons and proper clipping +-------------------------------------------------------------------------- + +xextreme = {} +yextreme ={} +x0 = {} +y0 = {} + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.ssub(3, 3) +pl.init() + +xextreme = { { -120, 120 }, { -120, 120 }, { -120, 120 }, { -80, 80 }, { -220, -120 }, + { -20, 20 }, { -20, 20 }, { -80, 80 }, { 20, 120 } } + +yextreme = { { -120, 120 }, { 20, 120 }, { -20, 120 }, { -20, 120 }, { -120, 120 }, + { -120, 120 }, { -20, 20 }, { -80, 80 }, { -120, 120 } } + +for k = 1, 2 do +for j = 1, 4 do + if j==1 then + -- Polygon 1: a diamond + x0 = { 0, -100, 0, 100 } + y0 = { -100, 0, 100, 0} + end + if j==2 then + -- Polygon 1: a diamond - reverse direction + x0 = { 100, 0, -100, 0 } + y0 = { 0, 100, 0, -100} + end + if j==3 then + -- Polygon 2: a square with punctures + x0 = { -100, -100, 80, -100, -100, -80, 0, 80, 100, 100 } + y0 = { -100, -80, 0, 80, 100, 100, 80, 100, 100, -100} + end + if j==4 then + -- Polygon 2: a square with punctures - reversed direction + x0 = { 100, 100, 80, 0, -80, -100, -100, 80, -100, -100 } + y0 = { -100, 100, 100, 80, 100, 100, 80, 0, -80, -100} + end + + for i = 1, 9 do + pl.adv(0) + pl.vsta() + pl.wind(xextreme[i][1], xextreme[i][2], yextreme[i][1], yextreme[i][2]) + + pl.col0(2) + pl.box("bc", 1, 0, "bcnv", 10, 0) + pl.col0(1) + pl.psty(0) + if k==1 then + pl.fill(x0, y0) + else + pl.gradient(x0, y0, 45.) + end + pl.col0(2) + pl.lsty(1) + pl.line(x0, y0) + end +end +end + +-- Don't forget to call plend() to finish off! +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x26.lua b/nanonote-example-files/files/lua-plplot-examples/x26.lua new file mode 100644 index 0000000..4d8c53b --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x26.lua @@ -0,0 +1,151 @@ +--[[ -*- coding: utf-8 -*- + + $Id: x26.lua 9506 2009-02-11 08:23:29Z smekal $ + + Multi-lingual version of the first page of example 4. + + Copyright (C) 2009 Werner Smekal + + Thanks to the following for providing translated strings for this example: + Valery Pipin (Russian) + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + + +--[[ + This example designed just for devices (e.g., psttfc and the + cairo-related devices) that use the pango and fontconfig libraries. The + best choice of glyph is selected by fontconfig and automatically rendered + by pango in way that is sensitive to complex text layout (CTL) language + issues for each unicode character in this example. Of course, you must + have the appropriate TrueType fonts installed to have access to all the + required glyphs. + + Translation instructions: The strings to be translated are given by + x_label, y_label, alty_label, title_label, and line_label below. The + encoding used must be UTF-8. + + The following strings to be translated involve some scientific/mathematical + jargon which is now discussed further to help translators. + + (1) dB is a decibel unit, see http://en.wikipedia.org/wiki/Decibel . + (2) degrees is an angular measure, see + http://en.wikipedia.org/wiki/Degree_(angle) . + (3) low-pass filter is one that transmits (passes) low frequencies. + (4) pole is in the mathematical sense, see + http://en.wikipedia.org/wiki/Pole_(complex_analysis) . "Single Pole" + means a particular mathematical transformation of the filter function has + a single pole, see + http://ccrma.stanford.edu/~jos/filters/Pole_Zero_Analysis_I.html . + Furthermore, a single-pole filter must have an inverse square decline + (or -20 db/decade). Since the filter plotted here does have that + characteristic, it must by definition be a single-pole filter, see also + http://www-k.ext.ti.com/SRVS/Data/ti/KnowledgeBases/analog/document/faqs/1p.htm + (5) decade represents a factor of 10, see + http://en.wikipedia.org/wiki/Decade_(log_scale) . +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +x_label = { "Frequency", "Частота" } +y_label = { "Amplitude (dB)", "Амплитуда (dB)" } +alty_label = { "Phase shift (degrees)", "Фазовый сдвиг (градусы)" } +title_label = { "Single Pole Low-Pass Filter", "Однополюсный Низко-Частотный Фильтр" } +line_label = { "-20 dB/decade", "-20 dB/десяток" } + + +---------------------------------------------------------------------------- +-- plot1 +-- +-- Log-linear plot. +---------------------------------------------------------------------------- + +function plot1(typ, x_label, y_label, alty_label, title_label, line_label) + freql = {} + ampl = {} + phase = {} + + pl.adv(0) + + -- Set up data for log plot + + f0 = 1 + for i = 1, 101 do + freql[i] = -2 + (i-1)/20 + freq = 10^freql[i] + ampl[i] = 20 * math.log10(1/math.sqrt(1+(freq/f0)^2)) + phase[i] = -180/math.pi*math.atan(freq/f0) + end + + pl.vpor(0.15, 0.85, 0.1, 0.9) + pl.wind(-2, 3, -80, 0) + + -- Try different axis and labelling styles. + pl.col0(1) + if typ==0 then + pl.box("bclnst", 0, 0, "bnstv", 0, 0) + else + pl.box("bcfghlnst", 0, 0, "bcghnstv", 0, 0) + end + + -- Plot ampl vs freq + pl.col0(2) + pl.line(freql, ampl) + pl.col0(1) + pl.ptex(1.6, -30, 1, -20, 0.5, line_label) + + -- Put labels on + pl.col0(1) + pl.mtex("b", 3.2, 0.5, 0.5, x_label) + pl.mtex("t", 2, 0.5, 0.5, title_label) + pl.col0(2) + pl.mtex("l", 5, 0.5, 0.5, y_label) + + -- For the gridless case, put phase vs freq on same plot + if typ==0 then + pl.col0(1) + pl.wind(-2, 3, -100, 0) + pl.box("", 0, 0, "cmstv", 30, 3) + pl.col0(3) + pl.line(freql, phase) + pl.col0(3) + pl.mtex("r", 5, 0.5, 0.5, alty_label) + end +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Illustration of logarithmic axes, and redefinition of window. +---------------------------------------------------------------------------- + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() +pl.font(2) + +-- Make log plots using two different styles. +for i = 1, 2 do + plot1(0, x_label[i], y_label[i], alty_label[i], title_label[i], line_label[i]) +end + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x27.lua b/nanonote-example-files/files/lua-plplot-examples/x27.lua new file mode 100644 index 0000000..b179dbe --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x27.lua @@ -0,0 +1,129 @@ +--[[ $Id: x27.lua 9526 2009-02-13 22:06:13Z smekal $ + + Drawing "spirograph" curves - epitrochoids, cycolids, roulettes + + Copyright (C) 2009 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + + +function cycloid() + -- TODO +end + + +function spiro( params ) + NPNT = 20000 + xcoord = {} + ycoord = {} + + -- Fill the coordinates + windings = params[4] + steps = math.floor(NPNT/windings) + dphi = 8*math.acos(-1)/steps + + xmin = 0 -- This initialisation is safe! + xmax = 0 + ymin = 0 + ymax = 0 + + for i = 1, windings*steps+1 do + phi = (i-1) * dphi + phiw = (params[1]-params[2])/params[2]*phi + xcoord[i] = (params[1]-params[2])*math.cos(phi) + params[3]*math.cos(phiw) + ycoord[i] = (params[1]-params[2])*math.sin(phi) - params[3]*math.sin(phiw) + + if xmin>xcoord[i] then xmin = xcoord[i] end + if xmaxycoord[i] then ymin = ycoord[i] end + if ymax(ymax-ymin) then + scale = xmax - xmin + else + scale = ymax - ymin + end + xmin = -0.65*scale + xmax = 0.65*scale + ymin = -0.65*scale + ymax = 0.65*scale + + pl.wind(xmin, xmax, ymin, ymax) + + pl.col0(1) + pl.line(xcoord, ycoord) +end + + +---------------------------------------------------------------------------- +-- main +-- +-- Generates two kinds of plots: +-- - construction of a cycloid (animated) +-- - series of epitrochoids and hypotrochoids +---------------------------------------------------------------------------- + +-- R, r, p, N +params = { + { 21, 7, 7, 3 }, -- Deltoid + { 21, 7, 10, 3 }, + { 21, -7, 10, 3 }, + { 20, 3, 7, 20 }, + { 20, 3, 10, 20 }, + { 20, -3, 10, 20 }, + { 20, 13, 7, 20 }, + { 20, 13, 20, 20 }, + { 20,-13, 20, 20 } } + +-- plplot initialization + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +-- Illustrate the construction of a cycloid +cycloid() + +-- Loop over the various curves +-- First an overview, then all curves one by one + +pl.ssub(3, 3) -- Three by three window + +for i = 1, 9 do + pl.adv(0) + pl.vpor(0, 1, 0, 1) + spiro(params[i]) +end + +pl.adv(0) +pl.ssub(1, 1) -- One window per curve + +for i = 1, 9 do + pl.adv(0) + pl.vpor(0, 1, 0, 1) + spiro(params[i]) +end + +-- Don't forget to call plend() to finish off! +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x28.lua b/nanonote-example-files/files/lua-plplot-examples/x28.lua new file mode 100644 index 0000000..9197030 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x28.lua @@ -0,0 +1,376 @@ +--[[ $Id: x28.lua 10710 2009-12-08 06:51:27Z airwin $ + + pl.mtex3, plptex3 demo. + + Copyright (C) 2009 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +-- Choose these values to correspond to tick marks. +XPTS = 2 +YPTS = 2 +NREVOLUTION = 16 +NROTATION = 8 +NSHEAR = 8 + +---------------------------------------------------------------------------- +-- main +-- +-- Demonstrates plotting text in 3D. +---------------------------------------------------------------------------- + +xmin=0 +xmax=1 +xmid = 0.5*(xmax + xmin) +xrange = xmax - xmin +ymin=0 +ymax=1 +ymid = 0.5*(ymax + ymin) +yrange = ymax - ymin +zmin=0 +zmax=1 +zmid = 0.5*(zmax + zmin) +zrange = zmax - zmin +ysmin = ymin + 0.1 * yrange +ysmax = ymax - 0.1 * yrange +ysrange = ysmax - ysmin +dysrot = ysrange / ( NROTATION - 1 ) +dysshear = ysrange / ( NSHEAR - 1 ) +zsmin = zmin + 0.1 * zrange +zsmax = zmax - 0.1 * zrange +zsrange = zsmax - zsmin +dzsrot = zsrange / ( NROTATION - 1 ) +dzsshear = zsrange / ( NSHEAR - 1 ) + +pstring = "The future of our civilization depends on software freedom." + +-- Allocate and define the minimal x, y, and z to insure 3D box +x = {} +y = {} +z = {} + +for i = 1, XPTS do + x[i] = xmin + (i-1) * (xmax-xmin)/(XPTS-1) +end + +for j = 1, YPTS do + y[j] = ymin + (j-1) * (ymax-ymin)/(YPTS-1) +end + +for i = 1, XPTS do + z[i] = {} + for j = 1, YPTS do + z[i][j] = 0 + end +end + +-- Parse and process command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +pl.init() + +-- Page 1: Demonstrate inclination and shear capability pattern. +pl.adv(0) +pl.vpor(-0.15, 1.15, -0.05, 1.05) +pl.wind(-1.2, 1.2, -0.8, 1.5) +pl.w3d(1, 1, 1, xmin, xmax, ymin, ymax, zmin, zmax, 20, 45) + +pl.col0(2) +pl.box3("b", "", xmax-xmin, 0, + "b", "", ymax-ymin, 0, + "bcd", "", zmax-zmin, 0) + +-- z = zmin. +pl.schr(0, 1) +for i = 1, NREVOLUTION do + omega = 2*math.pi*(i-1)/NREVOLUTION + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + x_inclination = 0.5*xrange*cos_omega + y_inclination = 0.5*yrange*sin_omega + z_inclination = 0 + x_shear = -0.5*xrange*sin_omega + y_shear = 0.5*yrange*cos_omega + z_shear = 0 + pl.ptex3( xmid, ymid, zmin, x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, 0, " revolution") +end + +-- x = xmax. +pl.schr(0, 1) +for i = 1, NREVOLUTION do + omega = 2.*math.pi*(i-1)/NREVOLUTION + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + x_inclination = 0. + y_inclination = -0.5*yrange*cos_omega + z_inclination = 0.5*zrange*sin_omega + x_shear = 0 + y_shear = 0.5*yrange*sin_omega + z_shear = 0.5*zrange*cos_omega + pl.ptex3(xmax, ymid, zmid, x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, 0, " revolution") +end + +-- y = ymax. +pl.schr(0, 1) +for i = 1, NREVOLUTION do + omega = 2.*math.pi*(i-1)/NREVOLUTION + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + x_inclination = 0.5*xrange*cos_omega + y_inclination = 0. + z_inclination = 0.5*zrange*sin_omega + x_shear = -0.5*xrange*sin_omega + y_shear = 0. + z_shear = 0.5*zrange*cos_omega + pl.ptex3(xmid, ymax, zmid, x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, 0, " revolution") +end + +-- Draw minimal 3D grid to finish defining the 3D box. +pl.mesh(x, y, z, pl.DRAW_LINEXY) + +-- Page 2: Demonstrate rotation of string around its axis. +pl.adv(0) +pl.vpor(-0.15, 1.15, -0.05, 1.05) +pl.wind(-1.2, 1.2, -0.8, 1.5) +pl.w3d(1, 1, 1, xmin, xmax, ymin, ymax, zmin, zmax, 20, 45) + +pl.col0(2) +pl.box3("b", "", xmax-xmin, 0, + "b", "", ymax-ymin, 0, + "bcd", "", zmax-zmin, 0) + +-- y = ymax. +pl.schr(0, 1) +x_inclination = 1 +y_inclination = 0 +z_inclination = 0 +x_shear = 0 +for i = 1, NROTATION do + omega = 2.*math.pi*(i-1)/NROTATION + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + y_shear = 0.5*yrange*sin_omega + z_shear = 0.5*zrange*cos_omega + zs = zsmax - dzsrot * (i-1) + pl.ptex3(xmid, ymax, zs, + x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, + 0.5, "rotation for y = y#dmax#u") +end + +-- x = xmax. +pl.schr(0, 1) +x_inclination = 0 +y_inclination = -1 +z_inclination = 0 +y_shear = 0 +for i = 1, NROTATION do + omega = 2.*math.pi*(i-1)/NROTATION + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + x_shear = 0.5*xrange*sin_omega + z_shear = 0.5*zrange*cos_omega + zs = zsmax - dzsrot * (i-1) + pl.ptex3(xmax, ymid, zs, + x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, + 0.5, "rotation for x = x#dmax#u") +end + +-- z = zmin. +pl.schr(0, 1) +x_inclination = 1 +y_inclination = 0 +z_inclination = 0 +x_shear = 0 +for i = 1, NROTATION do + omega = 2.*math.pi*(i-1)/NROTATION + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + y_shear = 0.5*yrange*cos_omega + z_shear = 0.5*zrange*sin_omega + ys = ysmax - dysrot * (i-1) + pl.ptex3(xmid, ys, zmin, + x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, + 0.5, "rotation for z = z#dmin#u") +end + +-- Draw minimal 3D grid to finish defining the 3D box. +pl.mesh(x, y, z, pl.DRAW_LINEXY) + +-- Page 3: Demonstrate shear of string along its axis. +-- Work around xcairo and pngcairo (but not pscairo) problems for +-- shear vector too close to axis of string. (N.B. no workaround +-- would be domega = 0.) +domega = 0.05 +pl.adv(0) +pl.vpor(-0.15, 1.15, -0.05, 1.05) +pl.wind(-1.2, 1.2, -0.8, 1.5) +pl.w3d(1, 1, 1, xmin, xmax, ymin, ymax, zmin, zmax, 20, 45) + +pl.col0(2) +pl.box3("b", "", xmax-xmin, 0, + "b", "", ymax-ymin, 0, + "bcd", "", zmax-zmin, 0) + +-- y = ymax. +pl.schr(0, 1) +x_inclination = 1 +y_inclination = 0 +z_inclination = 0 +y_shear = 0 +for i = 1, NSHEAR do + omega = domega + 2.*math.pi*(i-1)/NSHEAR + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + x_shear = 0.5*xrange*sin_omega + z_shear = 0.5*zrange*cos_omega + zs = zsmax - dzsshear * (i-1) + pl.ptex3(xmid, ymax, zs, + x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, + 0.5, "shear for y = y#dmax#u") +end + +-- x = xmax. +pl.schr(0, 1) +x_inclination = 0 +y_inclination = -1 +z_inclination = 0 +x_shear = 0 +for i = 1, NSHEAR do + omega = domega + 2.*math.pi*(i-1)/NSHEAR + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + y_shear = -0.5*yrange*sin_omega + z_shear = 0.5*zrange*cos_omega + zs = zsmax - dzsshear * (i-1) + pl.ptex3(xmax, ymid, zs, + x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, + 0.5, "shear for x = x#dmax#u") +end + +-- z = zmin. +pl.schr(0, 1) +x_inclination = 1 +y_inclination = 0 +z_inclination = 0 +z_shear = 0 +for i = 1, NSHEAR do + omega = domega + 2.*math.pi*(i-1)/NSHEAR + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + y_shear = 0.5*yrange*cos_omega + x_shear = 0.5*xrange*sin_omega + ys = ysmax - dysshear * (i-1) + pl.ptex3(xmid, ys, zmin, + x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, + 0.5, "shear for z = z#dmin#u") +end + +-- Draw minimal 3D grid to finish defining the 3D box. +pl.mesh(x, y, z, pl.DRAW_LINEXY) + +-- Page 4: Demonstrate drawing a string on a 3D path. +pl.adv(0) +pl.vpor(-0.15, 1.15, -0.05, 1.05) +pl.wind(-1.2, 1.2, -0.8, 1.5) +pl.w3d(1, 1, 1, xmin, xmax, ymin, ymax, zmin, zmax, 40, -30) + +pl.col0(2) +pl.box3("b", "", xmax-xmin, 0, + "b", "", ymax-ymin, 0, + "bcd", "", zmax-zmin, 0) + +pl.schr(0, 1.2) +-- domega controls the spacing between the various characters of the +-- string and also the maximum value of omega for the given number +-- of characters in *pstring. +domega = 2.*math.pi/string.len(pstring) +omega = 0 + +-- 3D function is a helix of the given radius and pitch +radius = 0.5 +pitch = 1/(2*math.pi) + +for i = 1, string.len(pstring) do + sin_omega = math.sin(omega) + cos_omega = math.cos(omega) + xpos = xmid + radius*sin_omega + ypos = ymid - radius*cos_omega + zpos = zmin + pitch*omega + + -- In general, the inclination is proportional to the derivative of + --the position wrt theta. + x_inclination = radius*cos_omega + y_inclination = radius*sin_omega + z_inclination = pitch + + -- The shear vector should be perpendicular to the 3D line with Z + -- component maximized, but for low pitch a good approximation is + --a constant vector that is parallel to the Z axis. + x_shear = 0 + y_shear = 0 + z_shear = 1 + pl.ptex3(xpos, ypos, zpos, x_inclination, y_inclination, z_inclination, + x_shear, y_shear, z_shear, 0.5, string.sub(pstring, i, i)) + omega = omega + domega +end + +-- Draw minimal 3D grid to finish defining the 3D box. +pl.mesh(x, y, z, pl.DRAW_LINEXY) + +-- Page 5: Demonstrate pl.mtex3 axis labelling capability +pl.adv(0) +pl.vpor(-0.15, 1.15, -0.05, 1.05) +pl.wind(-1.2, 1.2, -0.8, 1.5) +pl.w3d(1, 1, 1, xmin, xmax, ymin, ymax, zmin, zmax, 20, 45) + +pl.col0(2) +pl.box3("b", "", xmax-xmin, 0, + "b", "", ymax-ymin, 0, + "bcd", "", zmax-zmin, 0) + +pl.schr(0, 1) +pl.mtex3("xp", 3, 0.5, 0.5, "Arbitrarily displaced") +pl.mtex3("xp", 4.5, 0.5, 0.5, "primary X-axis label") +pl.mtex3("xs", -2.5, 0.5, 0.5, "Arbitrarily displaced") +pl.mtex3("xs", -1, 0.5, 0.5, "secondary X-axis label") +pl.mtex3("yp", 3, 0.5, 0.5, "Arbitrarily displaced") +pl.mtex3("yp", 4.5, 0.5, 0.5, "primary Y-axis label") +pl.mtex3("ys", -2.5, 0.5, 0.5, "Arbitrarily displaced") +pl.mtex3("ys", -1, 0.5, 0.5, "secondary Y-axis label") +pl.mtex3("zp", 4.5, 0.5, 0.5, "Arbitrarily displaced") +pl.mtex3("zp", 3, 0.5, 0.5, "primary Z-axis label") +pl.mtex3("zs", -2.5, 0.5, 0.5, "Arbitrarily displaced") +pl.mtex3("zs", -1, 0.5, 0.5, "secondary Z-axis label") + +-- Draw minimal 3D grid to finish defining the 3D box. +pl.mesh(x, y, z, pl.DRAW_LINEXY) + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x29.lua b/nanonote-example-files/files/lua-plplot-examples/x29.lua new file mode 100644 index 0000000..1ffa6f9 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x29.lua @@ -0,0 +1,327 @@ +--[[ $Id: x29.lua 10299 2009-08-19 17:54:27Z smekal $ + + Sample plots using date / time formatting for axes + + Copyright (C) 2009 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + + + +-- Plot a model diurnal cycle of temperature +function plot1() + x = {} + y = {} + + xerr1 = {} + xerr2 = {} + yerr1 = {} + yerr2 = {} + -- Data points every 10 minutes for 1 day + npts = 73 + + xmin = 0 + xmax = 60*60*24 -- Number of seconds in a day + ymin = 10 + ymax = 20 + + for i = 1, npts do + x[i] = xmax*((i-1)/npts) + y[i] = 15 - 5*math.cos(2*math.pi*((i-1)/npts)) + -- Set x error bars to +/- 5 minute + xerr1[i] = x[i]-60*5 + xerr2[i] = x[i]+60*5 + -- Set y error bars to +/- 0.1 deg C + yerr1[i] = y[i]-0.1 + yerr2[i] = y[i]+0.1 + end + + pl.adv(0) + + -- Rescale major ticks marks by 0.5 + pl.smaj(0, 0.5) + -- Rescale minor ticks and error bar marks by 0.5 + pl.smin(0, 0.5) + + pl.vsta() + pl.wind(xmin, xmax, ymin, ymax) + + -- Draw a box with ticks spaced every 3 hour in X and 1 degree C in Y. + pl.col0(1) + -- Set time format to be hours:minutes + pl.timefmt("%H:%M") + pl.box("bcnstd", 3*60*60, 3, "bcnstv", 1, 5) + + pl.col0(3) + pl.lab("Time (hours:mins)", "Temperature (degC)", "@frPLplot Example 29 - Daily temperature") + + pl.col0(4) + + pl.line(x, y) + pl.col0(2) + pl.errx(xerr1, xerr2, y) + pl.col0(3) + pl.erry(x, yerr1, yerr2) + + -- Rescale major / minor tick marks back to default + pl.smin(0, 1) + pl.smaj(0, 1) +end + + +-- Plot the number of hours of daylight as a function of day for a year +function plot2() + x = {} + y = {} + + -- Latitude for London + lat = 51.5 + + npts = 365 + + xmin = 0 + xmax = npts*60*60*24 + ymin = 0 + ymax = 24 + + -- Formula for hours of daylight from + -- "A Model Comparison for Daylength as a Function of Latitude and + -- Day of the Year", 1995, Ecological Modelling, 80, pp 87-95. + for j = 1, npts do + x[j] = (j-1)*60*60*24 + p = math.asin(0.39795*math.cos(0.2163108 + 2*math.atan(0.9671396*math.tan(0.00860*(j-1-186))))) + d = 24 - (24/math.pi)* + math.acos( (math.sin(0.8333*math.pi/180) + math.sin(lat*math.pi/180)*math.sin(p)) / + (math.cos(lat*math.pi/180)*math.cos(p)) ) + y[j] = d + end + + pl.col0(1) + -- Set time format to be abbreviated month name followed by day of month + pl.timefmt("%b %d") + pl.prec(1, 1) + pl.env(xmin, xmax, ymin, ymax, 0, 40) + + + pl.col0(3) + pl.lab("Date", "Hours of daylight", "@frPLplot Example 29 - Hours of daylight at 51.5N") + + pl.col0(4) + + pl.line(x, y) + + pl.prec(0, 0) +end + + +function plot3() + x = {} + y = {} + + tstart = 1133395200 + + npts = 62 + + xmin = tstart + xmax = xmin + npts*60*60*24 + ymin = 0 + ymax = 5 + + for i = 1, npts do + x[i] = xmin + (i-1)*60*60*24 + y[i] = 1 + math.sin(2*math.pi*(i-1)/7) + math.exp(math.min(i-1,npts-i+1)/31) + end + pl.adv(0) + + pl.vsta() + pl.wind(xmin, xmax, ymin, ymax) + + pl.col0(1) + -- Set time format to be ISO 8601 standard YYYY-MM-DD. Note that this is + --equivalent to %f for C99 compliant implementations of strftime. + pl.timefmt("%Y-%m-%d") + -- Draw a box with ticks spaced every 14 days in X and 1 hour in Y. + pl.box("bcnstd", 14*24*60*60,14, "bcnstv", 1, 4) + + pl.col0(3) + pl.lab("Date", "Hours of television watched", "@frPLplot Example 29 - Hours of television watched in Dec 2005 / Jan 2006") + + pl.col0(4) + + -- Rescale symbol size (used by plpoin) by 0.5 + pl.ssym(0, 0.5) + pl.poin(x, y, 2) + pl.line(x, y) +end + + +function plot4() + -- TAI-UTC (seconds) as a function of time. + -- Use Besselian epochs as the continuous time interval just to prove + -- this does not introduce any issues. + + x = {} + y = {} + + -- Use the definition given in http://en.wikipedia.org/wiki/Besselian_epoch + -- B = 1900. + (JD -2415020.31352)/365.242198781 + -- ==> (as calculated with aid of "bc -l" command) + -- B = (MJD + 678940.364163900)/365.242198781 + -- ==> + -- MJD = B*365.24219878 - 678940.364163900 + scale = 365.242198781 + offset1 = -678940 + offset2 = -0.3641639 + pl.configtime(scale, offset1, offset2, 0, 0, 0, 0, 0, 0, 0, 0.) + + for kind = 0, 6 do + if kind == 0 then + xmin = pl.ctime(1950, 0, 2, 0, 0, 0) + xmax = pl.ctime(2020, 0, 2, 0, 0, 0) + npts = 70*12 + 1 + ymin = 0 + ymax = 36 + time_format = "%Y%" + if_TAI_time_format = 1 + title_suffix = "from 1950 to 2020" + xtitle = "Year" + xlabel_step = 10 + end + if kind==1 or kind==2 then + xmin = pl.ctime(1961, 7, 1, 0, 0, 1.64757-0.20) + xmax = pl.ctime(1961, 7, 1, 0, 0, 1.64757+0.20) + npts = 1001 + ymin = 1.625 + ymax = 1.725 + time_format = "%S%2%" + title_suffix = "near 1961-08-01 (TAI)" + xlabel_step = 0.05/(scale*86400) + if kind==1 then + if_TAI_time_format = 1 + xtitle = "Seconds (TAI)" + else + if_TAI_time_format = 0 + xtitle = "Seconds (TAI) labelled with corresponding UTC" + end + end + if kind==3 or kind==4 then + xmin = pl.ctime(1963, 10, 1, 0, 0, 2.6972788-0.20) + xmax = pl.ctime(1963, 10, 1, 0, 0, 2.6972788+0.20) + npts = 1001 + ymin = 2.55 + ymax = 2.75 + time_format = "%S%2%" + title_suffix = "near 1963-11-01 (TAI)" + xlabel_step = 0.05/(scale*86400) + if kind==3 then + if_TAI_time_format = 1 + xtitle = "Seconds (TAI)" + else + if_TAI_time_format = 0 + xtitle = "Seconds (TAI) labelled with corresponding UTC" + end + end + if kind==5 or kind==6 then + xmin = pl.ctime(2009, 0, 1, 0, 0, 34-5) + xmax = pl.ctime(2009, 0, 1, 0, 0, 34+5) + npts = 1001 + ymin = 32.5 + ymax = 34.5 + time_format = "%S%2%" + title_suffix = "near 2009-01-01 (TAI)" + xlabel_step = 1/(scale*86400) + if kind==5 then + if_TAI_time_format = 1 + xtitle = "Seconds (TAI)" + else + if_TAI_time_format = 0 + xtitle = "Seconds (TAI) labelled with corresponding UTC" + end + end + + for i = 1, npts do + x[i] = xmin + (i-1)*(xmax-xmin)/(npts-1) + pl.configtime(scale, offset1, offset2, 0, 0, 0, 0, 0, 0, 0, 0) + tai = x[i] + tai_year, tai_month, tai_day, tai_hour, tai_min, tai_sec = pl.btime(tai) + pl.configtime(scale, offset1, offset2, 2, 0, 0, 0, 0, 0, 0, 0) + utc_year, utc_month, utc_day, utc_hour, utc_min, utc_sec = pl.btime(tai) + pl.configtime(scale, offset1, offset2, 0, 0, 0, 0, 0, 0, 0, 0.) + utc = pl.ctime(utc_year, utc_month, utc_day, utc_hour, utc_min, utc_sec) + y[i]=(tai-utc)*scale*86400. + end + + pl.adv(0) + pl.vsta() + pl.wind(xmin, xmax, ymin, ymax) + pl.col0(1) + if if_TAI_time_format ~= 0 then + pl.configtime(scale, offset1, offset2, 0, 0, 0, 0, 0, 0, 0, 0) + else + pl.configtime(scale, offset1, offset2, 2, 0, 0, 0, 0, 0, 0, 0) + end + pl.timefmt(time_format) + pl.box("bcnstd", xlabel_step, 0, "bcnstv", 0., 0) + pl.col0(3) + title = "@frPLplot Example 29 - TAI-UTC " .. title_suffix + pl.lab(xtitle, "TAI-UTC (sec)", title) + + pl.col0(4) + + pl.line(x, y) + end +end + +---------------------------------------------------------------------------- +-- main +-- +-- Draws several plots which demonstrate the use of date / time formats for +-- the axis labels. +-- Time formatting is done using the system strftime routine. See the +-- documentation of this for full details of the available formats. +-- +-- 1) Plotting temperature over a day (using hours / minutes) +-- 2) Plotting +-- +-- Note: Times are stored as seconds since the epoch (usually 1st Jan 1970). +-- +---------------------------------------------------------------------------- + +-- Parse command line arguments +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Initialize plplot +pl.init() + +-- Change the escape character to a '@' instead of the default '#' +pl.sesc('@') + +plot1() + +plot2() + +plot3() + +plot4() + +-- Don't forget to call plend() to finish off! +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x30.lua b/nanonote-example-files/files/lua-plplot-examples/x30.lua new file mode 100644 index 0000000..c46e5d3 --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x30.lua @@ -0,0 +1,137 @@ +--[[ $Id: x30.lua 10668 2009-12-02 08:38:49Z airwin $ + + Alpha color values demonstration. + + Copyright (C) 2008 Werner Smekal + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +red = { 0, 255, 0, 0 } +green = { 0, 0, 255, 0 } +blue = { 0, 0, 0, 255 } +alpha = { 1, 1, 1, 1 } + +px = { 0.1, 0.5, 0.5, 0.1 } +py = { 0.1, 0.1, 0.5, 0.5 } + +pos = { 0, 1 } +rcoord = { 1, 1 } +gcoord = { 0, 0 } +bcoord = { 0, 0 } +acoord = { 0, 1 } +rev = { 0, 0 } + +pl.parseopts (arg, pl.PL_PARSE_FULL); + +pl.init() +pl.scmap0n(4) +pl.scmap0a(red, green, blue, alpha) + +-- Page 1: +-- +-- This is a series of red, green and blue rectangles overlaid +-- on each other with gradually increasing transparency. + +-- Set up the window +pl.adv(0) +pl.vpor(0, 1, 0, 1) +pl.wind(0, 1, 0, 1) +pl.col0(0) +pl.box("", 1, 0, "", 1, 0) + +-- Draw the boxes +for i = 0, 8 do + icol = math.mod(i, 3) + 1 + + -- Get a color, change its transparency and + -- set it as the current color. + r, g, b, a = pl.gcol0a(icol) + pl.scol0a(icol, r, g, b, 1-i/9) + pl.col0(icol) + + -- Draw the rectangle + pl.fill(px, py) + + -- Shift the rectangles coordinates + for j = 1, 4 do + px[j] = px[j] + 0.5/9 + py[j] = py[j] + 0.5/9 + end +end + +-- Page 2: + +-- This is a bunch of boxes colored red, green or blue with a single +-- large (red) box of linearly varying transparency overlaid. The +-- overlaid box is completely transparent at the bottom and completely +-- opaque at the top. + +-- Set up the window +pl.adv(0) +pl.vpor(0.1, 0.9, 0.1, 0.9) +pl.wind(0.0, 1.0, 0.0, 1.0) + +-- Draw the boxes. There are 25 of them drawn on a 5 x 5 grid. +for i = 0, 4 do + -- Set box X position + px[1] = 0.05 + 0.2 * i + px[2] = px[1] + 0.1 + px[3] = px[2] + px[4] = px[1] + + -- We don't want the boxes to be transparent, so since we changed + -- the colors transparencies in the first example we have to change + -- the transparencies back to completely opaque. + icol = math.mod(i, 3) + 1 + r, g, b, a = pl.gcol0a(icol) + pl.scol0a(icol, r, g, b, 1) + pl.col0(icol) + + for j = 0, 4 do + -- Set box y position and draw the box. + py[1] = 0.05 + 0.2 * j + py[2] = py[1] + py[3] = py[1] + 0.1 + py[4] = py[3] + pl.fill(px, py) + end +end + +-- Create the color map with 128 colors and use plscmap1la to initialize +-- the color values with a linearly varying red transparency (or alpha) +pl.scmap1n(128) +pl.scmap1la(1, pos, rcoord, gcoord, bcoord, acoord, rev) + +-- Use that cmap1 to create a transparent red gradient for the whole +-- window. +px[1] = 0. +px[2] = 1. +px[3] = 1. +px[4] = 0. + +py[1] = 0. +py[2] = 0. +py[3] = 1. +py[4] = 1. + +pl.gradient(px, py, 90.) + +pl.plend() diff --git a/nanonote-example-files/files/lua-plplot-examples/x31.lua b/nanonote-example-files/files/lua-plplot-examples/x31.lua new file mode 100644 index 0000000..f0db27c --- /dev/null +++ b/nanonote-example-files/files/lua-plplot-examples/x31.lua @@ -0,0 +1,225 @@ +--[[ $Id: x31.lua 9533 2009-02-16 22:18:37Z smekal $ + + Copyright (C) 2008 Werner Smekal + + set/get tester + + This file is part of PLplot. + + PLplot is free software you can redistribute it and/or modify + it under the terms of the GNU General Library Public License as published + by the Free Software Foundation either version 2 of the License, or + (at your option) any later version. + + PLplot is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with PLplot if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +--]] + + +-- initialise Lua bindings for PLplot examples. +dofile("plplot_examples.lua") + +r1 = { 0, 255 } +g1 = { 255, 0 } +b1 = { 0, 0 } +a1 = { 1, 1 } + +-- Parse and process command line arguments +status = 0 +pl.parseopts(arg, pl.PL_PARSE_FULL) + +-- Test setting / getting familying parameters before plinit +-- Save values set by plparseopts to be restored later. +fam0, num0, bmax0 = pl.gfam() +fam1 = 0 +num1 = 10 +bmax1 = 1000 +pl.sfam(fam1, num1, bmax1) + +-- Retrieve the same values? +fam2, num2, bmax2 = pl.gfam() +print(string.format("family parameters: fam, num, bmax = %d %d %d", fam2, num2, bmax2)) +if fam2~=fam1 or num2~=num1 or bmax2~=bmax1 then + io.stderr:write("plgfam test failed\n") + status = 1 +end +-- Restore values set initially by plparseopts. +pl.sfam(fam0, num0, bmax0) + +-- Test setting / getting page parameters before plinit +-- Save values set by plparseopts to be restored later. +xp0, yp0, xleng0, yleng0, xoff0, yoff0 = pl.gpage() +xp1 = 200. +yp1 = 200. +xleng1 = 400 +yleng1 = 200 +xoff1 = 10 +yoff1 = 20 +pl.spage(xp1, yp1, xleng1, yleng1, xoff1, yoff1) + +-- Retrieve the same values? +xp2, yp2, xleng2, yleng2, xoff2, yoff2 = pl.gpage() +print(string.format("page parameters: xp, yp, xleng, yleng, xoff, yoff = %f %f %d %d %d %d", xp2, yp2, xleng2, yleng2, xoff2, yoff2)) +if xp2~=xp1 or yp2~=yp1 or xleng2~=xleng1 or yleng2~=yleng1 or xoff2~=xoff1 or yoff2~=yoff1 then + io.stderr:write("plgpage test failed\n") + status = 1 +end +-- Restore values set initially by plparseopts. +pl.spage(xp0, yp0, xleng0, yleng0, xoff0, yoff0) + +-- Test setting / getting compression parameter across plinit. +compression1 = 95 +pl.scompression(compression1) + +-- Initialize plplot +pl.init() + +-- Test if device initialization screwed around with the preset +-- compression parameter. +compression2 = pl.gcompression() +print("Output various PLplot parameters") +print("compression parameter = " .. compression2) +if compression2~=compression1 then + io.stderr:write("plgcompression test failed\n") + status = 1 +end + + +-- Exercise plscolor, plscol0, plscmap1, and plscmap1a to make sure +--they work without any obvious error messages. +pl.scolor(1) +pl.scol0(1, 255, 0, 0) +pl.scmap1(r1, g1, b1) +pl.scmap1a(r1, g1, b1, a1) + +level2 = pl.glevel() +print("level parameter = " .. level2) +if level2~=1 then + io.stderr:write("plglevel test failed.\n") + status = 1 +end + +pl.adv(0) +pl.vpor(0.01, 0.99, 0.02, 0.49) +xmin, xmax, ymin, ymax = pl.gvpd() +print(string.format("plvpor: xmin, xmax, ymin, ymax = %f %f %f %f", xmin, xmax, ymin, ymax)) +if xmin~=0.01 or xmax~=0.99 or ymin~=0.02 or ymax~=0.49 then + io.stderr:write("plgvpd test failed\n") + status = 1 +end +xmid = 0.5*(xmin+xmax) +ymid = 0.5*(ymin+ymax) + +pl.wind(0.2, 0.3, 0.4, 0.5) +xmin, xmax, ymin, ymax = pl.gvpw() +print(string.format("plwind: xmin, xmax, ymin, ymax = %f %f %f %f", xmin, xmax, ymin, ymax)) +if xmin~=0.2 or xmax~=0.3 or ymin~=0.4 or ymax~=0.5 then + io.stderr:write("plgvpw test failed\n") + status = 1 +end + +-- Get world coordinates for middle of viewport +wx, wy, win = pl.calc_world(xmid,ymid) +print(string.format("world parameters: wx, wy, win = %f %f %d", wx, wy, win)) +if math.abs(wx-0.5*(xmin+xmax))>1.0e-5 or math.abs(wy-0.5*(ymin+ymax))>1.0e-5 then + io.stderr:write("plcalc_world test failed\n") + status = 1 +end + +-- Retrieve and print the name of the output file (if any). +-- This goes to stderr not stdout since it will vary between tests and +-- we want stdout to be identical for compare test. +fnam = pl.gfnam() +if fnam=="" then + print("No output file name is set") +else + print("Output file name read") +end +io.stderr:write(string.format("Output file name is %s\n",fnam)) + +-- Set and get the number of digits used to display axis labels +-- Note digits is currently ignored in pls[xyz]ax and +-- therefore it does not make sense to test the returned +-- value +pl.sxax(3,0) +digmax, digits = pl.gxax() +print(string.format("x axis parameters: digmax, digits = %d %d", digmax, digits)) +if digmax~=3 then + io.stderr:write("plgxax test failed\n") + status = 1 +end + +pl.syax(4,0) +digmax, digits = pl.gyax() +print(string.format("y axis parameters: digmax, digits = %d %d", digmax, digits)) +if digmax~=4 then + io.stderr:write("plgyax test failed\n") + status = 1 +end + +pl.szax(5,0) +digmax,digits = pl.gzax() +print(string.format("z axis parameters: digmax, digits = %d %d", digmax, digits)) +if digmax~=5 then + io.stderr:write("plgzax test failed\n") + status = 1 +end + +pl.sdidev(0.05, pl.PL_NOTSET, 0.1, 0.2) +mar, aspect, jx, jy = pl.gdidev() +print(string.format("device-space window parameters: mar, aspect, jx, jy = %f %f %f %f" , mar, aspect, jx, jy)) +if mar~=0.05 or jx~=0.1 or jy~=0.2 then + io.stderr:write("plgdidev test failed\n") + status = 1 +end + +pl.sdiori(1.0) +ori = pl.gdiori() +print(string.format("ori parameter = %f", ori)) +if ori~=1.0 then + io.stderr:write("plgdiori test failed\n") + status = 1 +end + +pl.sdiplt(0.1, 0.2, 0.9, 0.8) +xmin, ymin, xmax, ymax = pl.gdiplt() +print(string.format("plot-space window parameters: xmin, ymin, xmax, ymax = %f %f %f %f", xmin, ymin, xmax, ymax)) +if xmin~=0.1 or xmax~=0.9 or ymin~=0.2 or ymax~=0.8 then + io.stderr:write("plgdiplt test failed\n") + status = 1 +end + +pl.sdiplz(0.1, 0.1, 0.9, 0.9) +zxmin, zymin, zxmax, zymax = pl.gdiplt() +print(string.format("zoomed plot-space window parameters: xmin, ymin, xmax, ymax = %f %f %f %f", zxmin, zymin, zxmax, zymax)) +if math.abs(zxmin -(xmin + (xmax-xmin)*0.1)) > 1.0e-5 or + math.abs(zxmax -(xmin+(xmax-xmin)*0.9)) > 1.0e-5 or + math.abs(zymin -(ymin+(ymax-ymin)*0.1)) > 1.0e-5 or + math.abs(zymax -(ymin+(ymax-ymin)*0.9)) > 1.0e-5 then + io.stderr:write("plsdiplz test failed\n") + status = 1 +end + +pl.scolbg(10, 20, 30) +r, g, b = pl.gcolbg() +print(string.format("background colour parameters: r, g, b = %d %d %d", r, g, b)) +if r~=10 or g~=20 or b~=30 then + io.stderr:write("plgcolbg test failed\n") + status = 1 +end + +pl.scolbga(20, 30, 40, 0.5) +r, g, b, a = pl.gcolbga() +print(string.format("background/transparency colour parameters: r, g, b, a = %d %d %d %f", r, g, b, a)) +if r~=20 or g~=30 or b~=40 or a~=0.5 then + io.stderr:write("plgcolbga test failed\n") + status = 1 +end + +pl.plend()