0

我将椭圆绘制成矩阵图像以构建 shepp logan 幻像,它是椭圆的集合,只是我想绘制一个椭圆并将其转换为矩阵图像

4

2 回答 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

嘿,我认为给出的解决方案有问题。平移完成后将应用旋转,这会导致一些奇怪的结果(如果您看一下,绘制的椭圆的中心不是 (10, 20)),因为旋转的中心定义为 0。

我相信正确的答案是:

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 回答