1

我正在使用 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);

如何将四元数放入原始文件并覆盖旋转矩阵?在此先感谢您的帮助!

4

1 回答 1

2

在您的情况下更推荐使用dlmreadand 。dlmwrite

    M = dlmread(文件名,' ',9,0); % 从第 10 行第 1 列开始
    旋转 = M(:,1:9);
    翻译 = M(:,10:12);
    .
    .
    .
    dlmwrite(四元数,'分隔符',' ','换行','pc');

如果您更喜欢修改原始文件而不是替换它,请使用以下命令

    fileID = fopen(文件名,'r+'); % 有读写权限
    fseek(fileID, pos, 'bof'); % 其中 pos 是要读取的字节的起始位置
    M = fscanf(fileID, repmat('%g',1,12), nlines); % 最多读取 n 行 12 列数字。
    .
    .
    .
    fseek(fileID, pos, 'bof'); % 回到原来的位置
    fprintf(fileID, repmat('%g',1,12), 四元数);

这只是一个建议。上述代码可能无法按预期运行,因此我建议您阅读文档以获取更多信息。干杯。

于 2013-11-10T06:46:16.897 回答