私は、3Dラインを作成するためにプロットする座標x、y、zで構成される一連のデータを持っています。 Procrustes Analysisを実行して、この3D線の形状と別のデフォルト形状の類似点を探したいとします。形状解析関数やProcrustes関数を使用しようとすると、それを保持するために作成した3Dプロット入力( 'myLine')で無効なハンドルエラーが発生します。この3D座標プロットを、Procrustesやその他の機能で使用可能なオブジェクトに変換するにはどうすればよいですか?以下はProLrustes Analysisで使用できるように、xyz座標からMatLabの3D線オブジェクトを作成するにはどうすればよいですか?
3D line created from the coordinates in code below.
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 = plot3(GPS(:、8)、...)によって作成された行がどこにあるのかを 'plot(myLine)'と書くと、同じ行が作成されるような変数を1つ作成しました。このようにして、1つの変数を比較関数に渡すことができます。 (明確な、私は唯一の座標を基準とノーライン方程式とそれを操作し、ラインをグラフに問題を持っていないですする)
編集:言うと一緒に、私は、形状分析にマイラインをパスしようとしていますmyLineが2番目のエントリとどれほど密接に関連しているかを比較する円の式。だから私は、次のコマンドを入力します。これを入力した後
>>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'とそれに別の行を渡しますが、それは質問で言及したハンドルエラーを与えます。 –
あなたの編集に基づいて - あなたの行を元に戻すときは、あなたが探しているプロパティを与える必要があります。たとえば、 "myLine"には、プロットしたいものであるXData、YData、およびZDataがあります。 plot3(myLine.XData、myLine.YData、myLine.ZData)またはplot3(get(myLine、 'XData')、get(myLine、 'YData)のいずれかを使用して、 ')、get(myLine、' ZData '))。あなたがこれについて混乱している場合は、OOPを見てください。 (https://www.mathworks.com/help/matlab/object-oriented-programming.html) –
私は今すぐ完全に置き換えることができます。私は、上記の関数が受け入れるオブジェクトを取得する方法を理解する必要があります。それを線の式に変換する必要がありますか? –