我正在使用importdata去除标题并将文件导入我的工作区。
该文件包含旋转矩阵和平移向量。 在我的matlab脚本中,我将旋转矩阵转换为四元数。 在我的输出文件中,我想要四元数加上平移向量,即我想用旋转矩阵中的旧值替换四元数的新值。
但是,我只能将四元数输出到命令窗口,但不知道如何替换值。
这是我的代码:
path = '\filepath';
[head DELIM NHEADERLINES] = importdata([path],' ',9);
Rotation = head.data(:,1:9);
Translation = head.data(:,10:12);
RotationMatrix= zeros([3 3 size(Rotation,1)]);
for i=1:size(Rotation,1)
RotationMatrix(:,:,i) = [Rotation(i,1:3); Rotation(i,4:6); Rotation(i,7:9)];
end
Quaternion = SpinCalc('DCMtoQ',RotationMatrix,0.1,0);
如何将四元数放入原始文件并覆盖旋转矩阵? 在此先感谢您的帮助!
答案 0 :(得分:2)
在您的情况下,建议更多地使用dlmread
和dlmwrite
。
M = dlmread(filename,' ',9,0); % start from row 10, column 1 Rotation = M(:,1:9); Translation = M(:,10:12); . . . dlmwrite(Quaternion,'delimiter',' ','newline','pc');
如果您希望修改原始文件而不是替换它,请使用以下
fileID = fopen(filename,'r+'); % with read and write permission fseek(fileID, pos, 'bof'); % where pos is the starting position of the bytes you want to read M = fscanf(fileID, repmat('%g ',1,12), nlines); % read 12 columns of numbers for at most n lines. . . . fseek(fileID, pos, 'bof'); % go back to the position fprintf(fileID, repmat('%g ',1,12), Quaternion);
这只是一个建议。上述代码可能无法按预期运行,因此我建议您阅读文档以获取更多信息。欢呼声。