如何在XYZ坐标中在MATLAB中制作一个3D线对象,以便在procrustes分析中使用它



i有一组由坐标x,y和z组成的数据,我绘制了这些数据以创建3D线。我想执行一个procrustes分析,以找到3D线的形状与另一个默认形状之间的相似性。当我尝试使用任何形状分析函数或procrustes函数时,它在我创建的持有它的3D图输入(即" myline''(上给了我无效的句柄错误。如何将坐标的3D图转换为procrustes或其他功能的可用对象?

从下面代码中的坐标创建的3D行。

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

编辑:我想一个简单的方法是,我如何参考使用一个变量创建的行,以便如果我编写了" plot(myline(",其中myline = plot3(gps(:,,,,,(创建的行8(,...(,它将创建相同的行。这样,我可以将一个变量传递给比较函数。(要明确地,我没有绘制线路的问题,只有在坐标和无线方程的引用中对其进行操作(

(

编辑:我试图将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)

我希望这能使我的问题有所清晰。

您几乎回答了自己的问题:"如何将此坐标的3D图转换为可用的对象 ...?"像任何对象一样,您需要对其进行引用以进行操作:

myLine = plot3(GPS(:,8),GPS(:,9),GPS(:,10))

现在您可以在我的线上传递,看看可以用它做什么。

最新更新