如何从xyz坐标在MatLab中生成3D线对象,以便在Procrustes分析中使用?

如何从xyz坐标在MatLab中生成3D线对象,以便在Procrustes分析中使用?,matlab,matrix,graphics,3d,linear-algebra,Matlab,Matrix,Graphics,3d,Linear Algebra,我有一组由坐标x、y和z组成的数据,我绘制这些数据来创建一条3D线。我想执行Procrustes分析,以找到此三维线的形状与另一个默认形状之间的相似性。当我尝试使用任何形状分析函数或Procrustes函数时,它会在我创建的用于保存它的三维打印输入上给我一个无效的句柄错误,即“myLine”。如何将此三维坐标图转换为可用于Procrustes或其他功能的可用对象 myLine=plot3(GPS(:,8),GPS(:,9),GPS(:,10)) 下面是我尝试使用的形状分析函数 function

我有一组由坐标x、y和z组成的数据,我绘制这些数据来创建一条3D线。我想执行Procrustes分析,以找到此三维线的形状与另一个默认形状之间的相似性。当我尝试使用任何形状分析函数或Procrustes函数时,它会在我创建的用于保存它的三维打印输入上给我一个无效的句柄错误,即“myLine”。如何将此三维坐标图转换为可用于Procrustes或其他功能的可用对象

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)

我希望这能澄清我的问题。

你几乎回答了你自己的问题:“我怎样才能将这个三维坐标图转换成一个可用的对象”。”像任何对象一样,你需要一个对它的引用来进行操作:

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

现在您可以绕过myLine,看看您能用它做些什么。

不幸的是,这对我不起作用。当我尝试使用此方法时,它会给我一个无效的句柄错误。这是我的错误吗?我使用我提供的函数并将“myLine”与另一行一起传递给它,但它给出了我在问题中提到的句柄错误。根据您的编辑-当您要回复行时,您必须为它提供您要查找的属性。例如,“myLine”有扩展数据、YData和ZData,这是您想要绘制的。根据您要重新生成时使用的Matlab版本,可以使用以下任一版本:plot3(myLine.XData、myLine.YData、myLine.ZData)或plot3(get(myLine,'XData')、get(myLine,'YData')、get(myLine,'ZData'))。如果您对此感到困惑,请查看OOP。()我现在可以很好地回答,我只需要弄清楚如何获取上面函数将接受的对象。我需要把它转换成一个直线方程吗?这将有助于你发布你得到的错误。此外,如果您在此处发布问题时给出具体(代码)示例,这将有助于回答您的问题。如果您试图将myLine传递到ShapeAnalysis,只需更新它接收的参数并正常传递即可。(不确定这是否是您的问题)。抱歉,已添加编辑。是的,我正在尝试将这条3D线与另一条线一起传递,以便在上面的形状分析功能中进行比较。