私は楕円をマトリックス画像に描画して、シェップ・ローガン・ファントムを構築します.これは楕円面のコレクションです.1つの楕円を描画し、それを変換してマトリックス画像を取得したいだけです.
質問する
6357 次
2 に答える
4
PDE ツールボックスがある場合は、pdeellipを使用できます。それ以外の場合は、次のように記述できます。
% input ellipse parameters
theta_grid = linspace(0,2*pi);
phi = 45*180/pi;
X0=10;
Y0=20;
a=40;
b=15;
% the ellipse in x and y coordinates
ellipse_x_r = X0 + a*cos( theta_grid );
ellipse_y_r = Y0 + b*sin( theta_grid );
%Define a rotation matrix
R = [ cos(phi) sin(phi); -sin(phi) cos(phi) ];
%let's rotate the ellipse to some angle phii
r_ellipse = R * [ellipse_x_r;ellipse_y_r];
plot(r_ellipse(1,:),r_ellipse(2,:),'-x')
xy 座標の代わりに、楕円を配列に「スタンプ」する別のオプションを次に示します。
a=20;
b=9;
phi=45;
[x y] = meshgrid(-50:50,-50:50);
el=((x-X0)/a).^2+((y-Y0)/b).^2<=1;
imagesc(imrotate(el,phi)); colormap(bone)
于 2013-03-29T17:11:09.960 に答える
1
ねえ、与えられた解決策に問題があると思います。回転は、回転が 0 の中心で定義されているため、移動が行われた後に適用され、奇妙な結果が生じます (見てみると、描画された楕円の中心は (10, 20) ではありません)。
正しい答えは次のようになると思います。
theta_grid = linspace(0,2*pi);
phi = 45*180/pi;
X0=10;
Y0=20;
a=40;
b=15;
% the ellipse in x and y coordinates centered at 0
ellipse_x_r = a*cos( theta_grid );
ellipse_y_r = b*sin( theta_grid );
% Define a rotation matrix
R = [ cos(phi) sin(phi); -sin(phi) cos(phi) ];
n = length(ellipse_x_r);
% let's rotate the ellipse to some angle phii and then translate it to (X0, Y0)
r_ellipse = R * [ellipse_x_r; ellipse_y_r] + repmat([X0; Y0], [1, n]);
plot(r_ellipse(1,:),r_ellipse(2,:),'-x')
どこでもこれを行う方法が見つかりませんでしたが、解決策をありがとう。これは私が見つけた最も役立つ投稿でした。
乾杯!
パブロ
編集:へー、SO のコード フォーマッタにバグがあります。コメント内の ' は文字列ではありません =)
于 2013-07-26T01:23:23.033 に答える