У меня есть набор данных, состоящий из координат x, y и z, которые я рисую для создания трехмерной линии. Я хочу выполнить анализ Прокруста, чтобы найти сходство между формой этой трехмерной линии и другой формой по умолчанию. Когда я пытаюсь использовать какие-либо функции анализа формы или функции Procrustes, это дает мне недопустимую ошибку дескриптора на вводе 3D-графика, который я создал для его хранения, то есть «myLine». Как я могу преобразовать этот трехмерный график координат в пригодный для использования объект для Прокруста или какой-либо другой функции?
Трехмерная линия, созданная из координат в коде ниже.
myLine = plot3(GPS(:,8),GPS(:,9),GPS(:,10))
Ниже приведена функция анализа формы, с которой я пытаюсь работать.
function [f,g]=ShapeAnalysis(f,g)
% SHAPEANALYSIS(F,G) Plots the parameterised curves before and after
% each stage of translating, scaling and aligning. Outputs are
% parameterised curves ready for Procustes shape analysis.
LW = 'LineWidth'; FS = 'FontSize';
% Plot orignal
subplot(2,2,1)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('Orignal',FS,16)
% Translate mean to 0.
f = f-mean(f); g = g-mean(g);
subplot(2,2,2)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('After translation',FS,16)
% Scale so RMSD is 1.
f = f/norm(f); g = g/norm(g);
subplot(2,2,3)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('After scaling',FS,16)
% Align major axis.
subplot(2,2,4)
% Find argument of major axis.
[~,fxmax]=max(abs(f)); [~,gxmax]=max(abs(g));
rotf=angle(f(fxmax)); rotg=angle(g(gxmax));
% Rotate both so major axis lies on the +ve real axis.
x = chebfun('x',[0,2*pi]);
f = exp(-1i*rotf)*f(mod(x+fxmax,2*pi));
g = exp(-1i*rotg)*g(mod(x+gxmax,2*pi));
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
title('After aligning',FS,16), hold off
end
редактировать: я думаю, проще сказать, как я могу ссылаться на линию, созданную с одной переменной, так что, если я написал «сюжет (myLine)», где myLine = линия, созданная plot3 (GPS (:, 8), ...), он создаст ту же строку. Таким образом, я могу передать одну переменную функции сравнения. (чтобы было ясно, у меня нет проблем с построением графика линии, я только манипулирую ею только со ссылкой на координаты и без уравнения линии)
edit: я пытаюсь передать myLine в анализ формы, а также, скажем, уравнение для круга, чтобы сравнить, насколько близко myLine находится ко второй записи. Итак, я ввожу:
>>myLine = plot3(GPS(:,8),GPS(:,9),GPS(:,10))
>>ShapeAnalysis(myLine,circle(0,0,1))
После ввода этого я получаю следующую ошибку:
Error using plot
Invalid handle.
Error in ShapeAnalysis (line 9)
plot(f,'r',LW,2), hold on, axis equal, plot(g,'k',LW,2)
Надеюсь, это немного прояснит мой вопрос.