将Lua语法更改为matlab
我有一些Lua代码,我必须将其转换为Matlab语法,我真的不确定如何继续,尤其是在没有任何数据进行练习的情况下,但目前,由于我刚刚将Lua代码粘贴到Matlab中,我只希望Matlab错误消失,希望我有一些有用的东西 对于某些背景,完整代码用于从步态分析过程中记录的标记位置坐标推导运动学数据。已经向我解释过,代码的开头基本上是获取原始数据,然后中间和结尾是转换数据 大部分代码是一些基本的数学,我设法改变了,但开头和结尾超出了我的能力范围 以下是Lua代码的开头:将Lua语法更改为matlab,matlab,syntax,lua,Matlab,Syntax,Lua,我有一些Lua代码,我必须将其转换为Matlab语法,我真的不确定如何继续,尤其是在没有任何数据进行练习的情况下,但目前,由于我刚刚将Lua代码粘贴到Matlab中,我只希望Matlab错误消失,希望我有一些有用的东西 对于某些背景,完整代码用于从步态分析过程中记录的标记位置坐标推导运动学数据。已经向我解释过,代码的开头基本上是获取原始数据,然后中间和结尾是转换数据 大部分代码是一些基本的数学,我设法改变了,但开头和结尾超出了我的能力范围 以下是Lua代码的开头: --Initilis
--Initilisation of variables
ini = ini or 0
allinputs = allinputs or {}
input = input or {}
shapes = shapes or {"Sphere", "Cube", "Cylinder", "Cone"}
colours = colours or {"Red", "Green", "Blue", "White", "Gray", "White", "Cyan"}
outputs.setchannels("gLLMx", "gLLMy", "gLLMz",
"gLMMx", "gLMMy", "gLMMz",
"gAJCx", "gAJCy", "gAJCz")
--Initialisation Code
if ini == 0 then
for i = 1, 38 do
allinputs[i] = "Channel"..i
end
inputs.setchannels(unpack(allinputs))
ini = 1
end
for i = 1, 38 do
input[i] = inputs.get("Channel"..i)
end
这是一个lua代码结尾的例子
if ZdistanceXZ == 0 then
ZrotZ = 90
else
ZrotZ = math.atan(Zdy/ZdistanceXZ) * 180/math.pi
end
很明显,我不希望有人直接翻译,我只是希望能把基本的东西解释给我听。到目前为止,我把所有的“to”都改了,并在最后一部分的每一行末尾加了分号。我只是想知道我是否需要一些东西,比如代码末尾的“then”和“==”,顶部的[I],看看我是否需要更改括号。因为我将Lua代码粘贴到Matlab中,所以我有很多“解析错误”“因此,修复这些将是非常棒的。我将使用这些信息编写一个代码来推导动力学数据变量初始化
% Initialisation Code - comments are written this way in MATLAB
if (ini == 0) % no need to write "then"
for i = 1:38 % 1:38 is a vector [1 2 ... 38]. this way the loop iterates
% over every component
allinputs[i] = [ 'Channel' num2str(i)]
end %end for
end %end if
if (ZdistanceXZ == 0)
ZrotZ = 90;
else
ZrotZ = atand(Zdy/ZdistanceXZ);
end
据我所知,在MATLAB中没有简单的方法来初始化这种方式。但以下代码应该可以完成这项工作:
if ~exist('variableName', 'var')
variableName = content;
end
对于每个变量都应该这样做。(我添加了一个分号以防止MATLAB打印结果值-自动打印功能通常用于调试。)
setChannels()
,get()
如果这是某种专有接口,那么您应该检查它是否有MATLAB。MATLAB还支持中的外部函数
循环和字符串操作
% Initialisation Code - comments are written this way in MATLAB
if (ini == 0) % no need to write "then"
for i = 1:38 % 1:38 is a vector [1 2 ... 38]. this way the loop iterates
% over every component
allinputs[i] = [ 'Channel' num2str(i)]
end %end for
end %end if
if (ZdistanceXZ == 0)
ZrotZ = 90;
else
ZrotZ = atand(Zdy/ZdistanceXZ);
end
请注意,在MATLAB中,字符串位于简单引号之间。要将数字转换为字符串,需要使用num2str()
函数,因为这不是自动完成的。字符串的连接是通过将两个字符串放在一个向量(方括号)中并用空格分隔连接的组件来完成的。结果是字符串向量,即字符串
代码和数学函数结束
% Initialisation Code - comments are written this way in MATLAB
if (ini == 0) % no need to write "then"
for i = 1:38 % 1:38 is a vector [1 2 ... 38]. this way the loop iterates
% over every component
allinputs[i] = [ 'Channel' num2str(i)]
end %end for
end %end if
if (ZdistanceXZ == 0)
ZrotZ = 90;
else
ZrotZ = atand(Zdy/ZdistanceXZ);
end
函数
atand()
自动以度为单位计算反切线(atan()
以弧度为单位计算它)。setChannels()方法的用途是什么?我在Lua官方手册中找不到任何关于它的文档。@Yellows这可能是一个D-flow的东西,但我相信它基本上将每个输入设置为一个通道,所以输入1=通道1。希望这有意义!我不知道“D-flow”是什么,我认为这是某种专有的API-您可能应该检查是否有MATLAB或C/C++支持(因为MATLAB可以运行C/C++DLL)。但是如果您愿意,我可以解释代码的其余部分需要哪些更改wish@Yellows谢谢你回复我,你对D-flow的看法是正确的,这是一个界面,我正在阅读有关这方面的文章,但是我的大学开发了这个标记系统,所以我假设关于它的任何代码都是新颖的,但是要记下有用的信息!不过,如果您能亲自解释任何更改,我们将不胜感激!