====================================================================
Lu扩展动态库：

		Lu图形库：Lu2D32.dll
====================================================================
#Lu2D使用说明{
[Lu2D32.dll] Lu2D使用说明

    Lu2D32.dll是一个Lu扩展动态库，主要包含一些绘制2D图形的函数。多线程动态绘制图形是Lu2D的基本特点。

    在Lu2D中的函数是通过二级函数命名空间“lu2d”输出的，所有函数均具有类似“lu2d::Plot(...)”的格式。使用!!!using("lu2d");可简化Lu2D中的函数访问。

    Lu2D32.dll需要MLu32.dll的支持。
}#
--------------------------------------------------------------------
#lu2d::FunTimer{
[Lu2D32.dll] lu2d::FunTimer(bAutoClose)：使用计时器定时执行函数

    bAutoClose：若bAutoClose=lu2d::auto，程序退出时将自动关闭窗口；若bAutoClose=lu2d::hand，程序退出时需手动关闭窗口。可以缺省该参数，相当于bAutoClose=lu2d::auto。
    返回值：0。

    说明：最多设置三个同时运行的计时器，每个计时器定时执行一个对应的全局函数。若全局函数返回false，将销毁对应的计时器，该全局函数也不再执行。

    [例子1] 先编译运行以下代码，然后在计时器窗口中设置运行a、b、c三个函数，点击按钮，观察运行情况，注意运行结果在哪里输出。

!!!:::a() = o{"执行函数a！\r\n"},true;  //必须定义为全局函数，前面的冒号表示只编译，不运行
!!!:::b() = o{"执行函数b！\r\n"},true;
!!!:::c() = o{"执行函数c！\r\n"},true;
lu2d::FunTimer[];                      //启动定时器窗口

    [例子2] 由全局函数自身控制运行次数。

!!!:::a(:static,k) = o{"执行函数a！\r\n"},if[++k>=5,return(false)],true;  //全局函数a只运行5次
!!!:::b() = o{"执行函数b！\r\n"},true;
!!!:::c() = o{"执行函数c！\r\n"},true;
lu2d::FunTimer[];
}#
--------------------------------------------------------------------
#lu2d::Plot{
[Lu2D32.dll] lu2d::Plot(Item1,Attribute1,Value1,Attribute2,Value2,...,Item2,Attribute3,Value3,Attribute4,Value4,... ...)：动态绘制一元函数及数组图形

    Plot的参数有三种类型：

    （1）以I开头的参数为项目，例如Ix表示要设置X轴的绘图范围，Iufun表示要绘制一元函数图形等等；

    （2）以A开头的参数为项目的属性，例如Acolor表示要设置曲线的颜色；

    （3）以V开头的参数为属性的值，例如Vred表示曲线是红色的。

    所有参数的说明见下表：

I 类型的参数及用法 说  明 

lu2d::Iclear 初始化绘图设置。仅在需要时使用该参数。若缺省该参数，将保留以前的设置。如果使用该参数，该参数应放在最前面。 
lu2d::Iauto 程序退出时自动关闭Plot窗口。这是缺省设置。 
lu2d::Ihand 程序退出时手动关闭Plot窗口。 
lu2d::Inoshow 仅进行一些设置，不启动Plot窗口。若缺省该参数，Plot函数将启动Plot窗口。 
lu2d::Ixdynamic : bDynamic 若bDynamic=true，则X轴绘图区间是动态的。若缺省该参数，相当于bDynamic=false。仅用于iarray、oarray类型的图形。 
lu2d::Iydynamic : bDynamic 若bDynamic=true，则Y轴绘图区间是动态的，将自动绘制自变量范围内的函数完整图形。若缺省该参数，相当于bDynamic=true。 
lu2d::Ix : Xmin,Xmax 设置X轴绘图区间。 
lu2d::Iy : Ymin,Ymax 设置Y轴绘图区间。仅仅进行设置，Y轴绘图区间是否固定，取决于Iydynamic参数。 
lu2d::Igarray : hFor,... ...（其他属性设置） 绘制普通数组图形。hFor为三元函数句柄，该函数具有f(x,y,n)的形式：x和y为等长的luData一维数组，n为需要绘制的数组元素个数 （n不能超过数组长度）。 
lu2d::Iiarray : hFor,... ...（其他属性设置） 内部计时器控制绘制数组图形。hFor为四元函数句柄，该函数具有f(x,y,n,t)的形式：x和y为等长的luData一维数组，n为需要绘制的数组元素个数（n不能超过数组长度），t返回当前时间。若f(x,y,n,t)返回false，不再定时执行该函数。 
lu2d::Ioarray : hFor,... ...（其他属性设置） 外部（计时器）控制绘制数组图形。hFor为四元函数句柄，该函数具有f(x,y,n,t)的形式：x和y为等长的luData一维数组，n为需要绘制的数组元素个数 （n不能超过数组长度），t返回当前时间。 
lu2d::Iufun : hFor,... ...（其他属性设置） 可缺省lu2d::Iufun。绘制一元函数图形。hFor为一元函数句柄，该函数具有f(x)的形式。 
lu2d::Iifun : hFor,... ...（其他属性设置） 可缺省lu2d::Iifun。绘制一元隐函数图形。hFor为二元函数句柄，该函数具有f(x,y)的形式。可能需要调整绘图点数Adots为合适的数值，才能得到理想的图形。 
lu2d::Ipfun : hFor,... ...（其他属性设置） 可缺省lu2d::Ipfun。绘制含参变量的函数图形。hFor为三元函数句柄，该函数具有f(u,x,y)的形式，u为参变量，x返回x(u)的值，y返回y(u)的值 。 
lu2d::Itimer : bRun,Ellapse 设置内部计时器。若bRun=true，则启动绘图窗口后立即启动计时器；否则在绘图窗口手动启动计时器。Ellapse为计时间隔（毫秒）。
由于计时器可通过计时器窗口设置，故很少直接使用该函数。 
lu2d::Isetpara : hFor,dx 设置可通过参数修改窗口修改的参数。hFor为一元函数句柄，该函数具有x(dx::x)= x=x+dx,x;的形式：通过增量dx修改模块变量x，并返回x的值。为了便于区分参数，通常使函数x和模块变量x具有相同的名字。 
lu2d::Ititle : "标题" 设置图形标题。 
lu2d::Ilable : "X轴说明","Y轴说明" 设置X轴及Y轴说明。 
lu2d::Igrid : bDraw 是否绘制网格。bDraw非0时绘制。缺省是不绘制。 
lu2d::Iaxisratio : xRatio,yRatio 坐标轴比率。显示坐标轴数字时所乘的系数。缺省是1。 
lu2d::Iaxisnums : num 坐标轴数字个数。缺省是10。 
lu2d::Iaxisdigits : num 坐标轴数字个数。缺省是3。 
lu2d::Iborderpixels : num 边沿像素数目。缺省是30。 
lu2d::Iaxisshape : Vaxisshape 坐标轴形状。有Vaxisnormal、Vaxissquare、Vaxisequal三种形状。默认是Vaxisnormal。
 
A 类型的参数及用法 说  明 

lu2d::Aline 绘制曲线图。这是缺省设置（Iifun除外）。 
lu2d::Adot 绘制散点图。Iifun类型图形的缺省设置。 
lu2d::Acut,bcut 设置是否将绘图区域以外的点绘制到边界上。若bcut非0，不绘制到边界；否则绘制到边界。若缺省该参数，相当于bcut非0。 
lu2d::Adots,n 设置绘图点数。仅用于Iufun、Iifun和Ipfun类型的图形。若缺省该参数，对Iufun和Ipfun图形，默认绘制500个点；对Iifun图形，默认绘制100个点。 
lu2d::Adotsmax,n 设置绘图点数最大数。仅用于Iifun类型的图形。若缺省该参数，默认最多绘制10000个点。 
lu2d::Arange,min,max 设置Iifun和Ipfun类型图形的参数变化范围。Iifun类型函数具有f(x,y)的形式，该参数用于设置y的估计变化范围，允许min==max，若缺省该参数，min和max取Y轴绘图区间（即Iy的设定值）；Ipfun类型函数具有f(u,x,y)的形式，该参数用于设置u的变化范围。 
lu2d::Aprecision,eps 设置Iifun类型隐函数的求解精度。若缺省该参数，默认求解精度为1e-6。 
lu2d::Acolor,Vcolor 设置曲线（点）的颜色。曲线的默认值为黑色；点的默认值为黑色。 
lu2d::Athick,Vthick 设置曲线粗细或点的大小。曲线的默认值为0；点的默认值为5。 
lu2d::Ashape,Vshape 设置曲线（点）的形状。曲线的默认值为实线；点的默认值为实心点。 
lu2d::Alegend,"曲线（点）标记" 设置曲线（点）的标记。将显示为图例。相同的标记仅显示一次，但图例重叠。 

V 类型的参数及用法 说  明 

lu2d::Vsolid 曲线形状为实线。 
lu2d::Vdash 曲线形状为虚线。 
lu2d::Vdashdot 曲线形状为点线。 
lu2d::Vdashdotdot 曲线形状为点划线。 
lu2d::Vnull 曲线形状为无。 
lu2d::Vinsideframe 曲线形状为实线（边框线）。 
lu2d::Vsdot 点形状为实心圆点。 
lu2d::Vcircle 点形状为空心圆。 
lu2d::Vfork 点形状为×。 
lu2d::Vcross 点形状为＋。 
lu2d::Vpozi 点形状为米字。 
lu2d::Vsquare 点形状为矩形。 
lu2d::Vdiamond 点形状为菱形。 
lu2d::Vupt 点形状为上三角。 
lu2d::Vdpt 点形状为下三角。 
lu2d::Vlpt 点形状为左三角。 
lu2d::Vrpt 点形状为右三角。 
lu2d::Vpentagram 点形状为五角星。 
lu2d::Vhexagram 点形状为六角星。 
lu2d::Vred 红色。 
lu2d::Vyellow 黄色。 
lu2d::Vgreen 绿色。 
lu2d::Vblue 蓝色。 
lu2d::Vgray 灰色。 
lu2d::Vblack 黑色。 
lu2d::Vaxisnormal 坐标轴正常显示方式。 
lu2d::Vaxissquare X轴和Y轴的单位长度相同。 
lu2d::Vaxisequal 坐标轴图框呈正方形。 

Plot函数其他用法：

lu2d::Plot[] 启动绘图窗口，程序退出时将自动关闭该窗口。在进行所有设置（使用Inoshow参数）后，才能调用该函数。 

    返回值：0。

    运行错误：1：不可识别的参数类型标识；2：参数不匹配；3：参数不符合要求；4：非法的函数句柄；5：内存错误；6：非法是字符串参数；7：函数的参数个数太多或者太少。

    说明：

    目前Plot函数支持三种函数图形：

    （1）Igarray类型的数组，Iufun、Iifun和Ipfun类型的函数。此类图形仅在通过菜单命令更改设置时更新数据（例如改变了X轴的最小值），内部计时器及外部控制对此毫无影响。

    （2）Iiarray类型的数组。此类图形的更新仅受内部计时器的控制。

    （3）Ioarray类型的数组。此类图形的更新仅受外部（计时器）的控制。

    例子：

    （1）Plot函数的简单用法

f(x)=sin[10*x];     //一元函数
g(x)=x*sin[10*x];   //一元函数
lu2d::Plot[@f, @g]; //绘制函数f和g的图形

    这种用法虽然简单，但需要通过菜单设置图形的属性，例如：X轴的范围、曲线的颜色等等。

    通过菜单只能设置图形的部分属性，以下的例子都是通过脚本设置图形属性的。

    （2）Iclear和Ix选项

!!!using("lu2d");   //使用命名空间lu2d
f(x)=sin[10*x];     //一元函数
g(x)=x*sin[10*x];   //一元函数
Plot[Iclear, Ix : -5.,5., @f, @g]; //绘制函数f和g的图形，Iclear将清除以前的设置（通常 要使用该参数），Ix指出X轴绘图范围

    （3）分步进行设置

!!!using("lu2d");   //使用命名空间lu2d
f(x)=sin[10*x];     //一元函数
g(x)=x*sin[10*x];   //一元函数
Plot[Iclear];       //Iclear将清除以前的设置 ，否则以前的设置会被本次图形绘制产生影响
Plot[Ix : -5.,5.];  //Ix指出X轴绘图范围
Plot[@f, @g];       //绘制函数f和g的图形

    （4）隐函数图形

!!!using("lu2d");
f(x,y)=(x^2+y^2)^3-36*(x^2-y^2)^2;  //二元函数确定了一个隐函数
Plot[Iclear, Ix : -8.,8., Igrid : true];  //Igrid指出是否绘制网格
Plot[@f, Arange,-8.,8., Adots,200]; //Arange指出Y的可能的变化范围 ，通常不能省略该参数；Adot指出绘图点数，绘图点数越多越准确

    友情提示：隐函数绘制时，调整Arange的范围大小有助于获得更准确的图形。

    （5）绘制含参变量的函数

!!!using("lu2d");
f(u,x,y)= x=u*sin[u],y=u*cos[u]^2;  //三元函数确定了一个含参变量的函数，第一个参数u是参变量，x和y的返回值确定了一个点
lu2d::Plot[Iclear, Ix : -9.,9., @f, Arange,-9.,9.]; //Arange指出参变量u的变化范围
}#
--------------------------------------------------------------------
#lu2d::PlotExe{
[Lu2D32.dll] lu2d::PlotExe()：向Plot发送执行函数命令并刷新图形

    说明：该函数用于执行用lu2d::Ioarray注册到Plot的绘图函数，可在任意线程中通过该函数控制Plot中图形的刷新。
}#
--------------------------------------------------------------------
