unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)

在使用国外Matlab、labview等国外软件工具进行功能编程时,经常会遇到在目标文件中被公共使用的变量的需求--即全局变量;但每套软件对全局变量的设计规范也有所差异;今天小编给大家讲解在IAuto中绘制动态二三维曲线、或者实时数据仿真脚本编程时如何使用IAuto的全局变量以及高等函数接口,同时也可以用来求解定积分方程、求和方程、统计分析时使用;

IAuto中推荐使用的全局变量IA对象和IAnum对象,编程脚本语言为javascript;

第一部分:全局变量对象IA={};

IAuto中目前内置了全局对象IA={}用于作为全局变量的标识,在调用的时候只需要IA.变量名即可,这里需要注意的是,IA全局变量只能在当前的独立窗口中使用,这个主要是因为IAuto的业务组件(如仿真窗口、二三维曲线绘图窗口)都是相互独立的,为类避免一个业务窗口被其他业务窗口数据污染和影响;

案例一:二三维数学曲线中动态平移的正弦曲线中的全局变量使用

if(x==-10){//每秒刷新一次,从起始点设置 if(IA.st){//设置全局变量相位 IA.st =0.5//全局变量相位自增0.5 }else{ IA.st = 1//如果该全局变量未定义则设置默认为1 } } Math.sin(x IA.st)//执行正弦函数

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(1)

图一

从编程代码区可以看到,这里定义了IA.st这个全局变量,因为IAuto中的执行脚本是单次执行,上图中设置了动态刷新时间为1s,即每隔1s会执行一次绘图,得到输出结果值并将值赋值给纵坐标y;正弦曲线会自定平移,接下来小编将教大家如何利用全局变量让图动起来;

【第一步】:利用javscript语法填写Math.sin(x),同时数据设置中x的取值范围为[-10,10],动态刷新时间设置为1s;

//如下输入框中y=sin(x);其中x的范围由“更多设置”的数据项指定; Math.sin(x)

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(2)

图二

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(3)

现在即使每隔1秒自动重新绘图,这个正弦图也不会移动;

【第二步】:设置全局变量IA.st,这里IA.st作为正弦曲线移动的距离,我们需要每1秒重绘时,正弦函数的相位自动增加一次,这里重点,必须在从x起始点开始重绘时,重新给全局变量赋值;所以我们这里需要的业务流程逻辑为:

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(4)

图三

【第三位】启动右上角的“自动动态刷新”开关按钮,就得到图一动态平移的正弦曲线;

案例二:仿真中全局变量使用

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(5)

x的自增曲线

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(6)

x的三次方自增

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(7)

从上图中的仿真流程可以看到,第一个标签的仿真结果输出到第二个标签;并分别绘制了两个仿真标签的数据曲线图;其中第二个标签直接通过获取x的值后执行Math.pow(x0,3)得到x的三次方的值,未使用全局变量;但第一个标签中使用了IA.x这个全局变量,其代码逻辑和案例一一样;

这里要特别注意,二三维曲线的脚本和仿真的脚本的区别,前者执行结果的是一系列图表数据后一次性绘图完成(连续的,多次的);而仿真节点的脚本执行的是一个点,即一个计算结果值,根据仿真次数叠加结果值添加到每个图表中(离散的,单次的);

第二部分:全局计算对象IAnum;

通过第一部分我们介绍了在IAuto编程脚本中使用全局变量的技巧,这部分介绍的IAnum对象和IA对象一样是也是全局的,但IAnum提供内置的接口直接赋值使用:

IAnum提供包括:定积分计算、级数求和、矩阵计算、统计分析4类接口,

IAnum.calculus.Riemann(function,a,b,分段数) 尼曼积分,返回积分结果值;其中a,b为积分范围,分段数一般在1000以内(设置太小积分结果误差大,设置太大影响性能) IAnum.calculus.adaptiveSimpson(function,a,b,分段值) 辛普森积分,返回积分结果值;其中a,b为积分范围,分段值一般在0.001(设置太小积分结果影响性能,设置太大影响结果) IAnum.sumarr(arr) 对数组元素arr求和,返回值; IAnum.sumfunc(func,N,M) 对表达式func求和,N为下标号,M为上标号,返回值; IAnum.matrix.addition(arr1,arr2) 矩阵相加,返回数组; IAnum.matrix.transpos(arr) 矩阵转置,返回数组; IAnum.statistic.mean(arr) 取数组的平均数,返回数组; IAnum.statistic.median(arr) 取数组的中位数,返回数组; IAnum.statistic.mode(arr) 取数组的众数,返回数组; IAnum.statistic.standardDev(arr) 取数组的标准差,返回数组; IAnum.statistic.standardDev(arr) 取数组的标准差,返回数组; IAnum.statistic.randomSample(lower, upper, n) 随机样本产生器,返回数组;

案例一:计算如下定积分的值

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(8)

节点的编程脚本为:

//这里用了计算尼曼积分的接口IAnum.calculus.Riemann(function,a,b,分段数) //其中function对应如下的x=>{ return Math.sin(x)*Math.cos(x 1) },这是javascript的ES6语法,也 //可以写成function(x){return Math.sin(x)*Math.cos(x 1)}的效果是一样的 IAnum.calculus.Riemann(x=>{ return Math.sin(x)*Math.cos(x 1) },-2,4,500)

如下图我们在节点的动态脚本中点击“执行func”就可以得到定积分的输出值

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(9)

案例二:计算如下级数求和的值

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(10)

节点的编程脚本为:

//这里用了计算函数求和的接口IAnum.sumfunc(func,N,M) //其中function对应如下的n=>{ return n*(n 1) },这是javascript的ES6语法,也 //可以写成function(n){return n*(n 1)}的效果是一样的 IAnum.sumfunc(n=>{ return n*(n 1) },1,10)

如下图我们在节点的动态脚本中点击“执行func”就可以得到求和公式的输出值,其中N,M可以用动态变化的全局变量代替,这样就可以绘制出仿真曲线或曲面图;

unity中函数的调用(IAuto中的全局变量设计和高等数学函数接口)(11)

第三部分:总结

在IAuto中的编程脚本满足javascript规范,需要您有一定的javascript功底,不需要精通,但至少可以编写基本的函数的水平;如果IAnum中内置的接口不满足您的实际生产工作要求,您可以自行用IA.func = function(x){ //代码段 } 的形式自行构建全局函数,在节点计算时使用亦可;当然IA.全局变量或者全局函数也是有使用范围的,仅在当前业务窗口中使用!不同的窗口是无法读取对方的全局变量的

除此之外,IAuto在实时监控、各类复杂流程、架构绘图方面功能也非常强大!您可以自行去探索了解啦!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页