我将椭圆绘制成矩阵图像以构建一个shepp logan体模,它是一个elliopsides的集合,只是我想绘制一个椭圆并将其转换为矩阵图像
答案 0 :(得分: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')
这是另一种选择,而不是x-y坐标,将椭圆“标记”到数组中:
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)
答案 1 :(得分: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的代码格式化程序存在一个错误。 “评论内部不是字符串=)