我有这个C结构:
struct position
{
float x, y, z;
};
struct orientation
{
float x, y, z;
};
struct robot
{
position pose;
orientation or;
};
主要是我使用
struct robot data
问题是如何在mex函数中创建该结构? 感谢
编辑1: 我想在.mat文件中实现的目的是:
robot <1x5 struct>
robot(1,1) <1x1 struct>
robot(1,1).position <1x1 struct>
x
y
z
robot(1,1).orientation <1x1 struct> with x,y and z fields
x
y
z
robot(1,2) <1x1 struct>
robot(1,2).position <1x1 struct> with x,y and z fields
x
y
z
robot(1,2).orientation <1x1 struct> with x,y and z fields
x
y
z
.
.
.
robot(1,5) <1x1 struct>
robot(1,5).position <1x1 struct> with x,y and z fields
x
y
z
robot(1,5).orientation <1x1 struct> with x,y and z fields
x
y
z
我能够得到我需要的结构:
double values[5] = {1,2,3,4}; //Just for testing.
const char *field_robot[] = {"pos", "or"};
const char *field_coordinates[] = {"x", "y", "z"};
mxPos = mxCreateStructMatrix(1,1,3, field_coordinates);
mxOr = mxCreateStructMatrix(1,1,3, field_coordinates);
mxRobot = mxCreateStructMatrix(1,1,5, field_robot);
for(i=0; i<5; i++)
{
mxSetFieldByNumber(mxPos, 0, 0, mxCreateDoubleScalar(values[i]));
mxSetFieldByNumber(mxRobot, i, 0, mxPos);
}
我可以在matlab中看到它是我想要的,但在robot.pos.x中我只有4个所有的值。它只保存最后一个值。
答案 0 :(得分:1)
下面的代码来自MATLAB内置示例“phonebook.c”,并显示了如何在MeX文件中创建MATLAB结构数组的示例。您可以使用以下命令在MATLAB中查看整个源文件:
(lldb) p (BOOL)[test[@"test_3"] boolValue]
(BOOL) $1 = NO
您可以在mathworks网站上找到在线文档:
edit([matlabroot '/extern/examples/refbook/phonebook.c']);