2013-11-09 1 views
1

Я использую importdata, чтобы снять заголовок и импортировать файл в мое рабочее пространство.Matlab: Как сохранить вывод в файл и перезаписать старые значения при использовании 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); 

Как я могу получить кватернион в исходный файл и перезаписать матрицу вращения? Заранее благодарим за помощь!

ответ

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); 

Это просто предложение. Вышеуказанные коды могут не работать по желанию, поэтому я рекомендую вам ознакомиться с документацией для получения дополнительной информации. Приветствия.