具有交替亮环和暗环的环形环图案:使用matlab

时间:2015-01-21 11:14:04

标签: matlab

我试图制作一个由环形环组成的图案,其半径与自然数的平方根成比例。此外,我希望最内圈为白色,然后是黑色圆圈,后跟白色等等。

c = [0 0; 0 0];
r = [5.2494 9.0922];
viscircles(c, r)
r1 = [7.4328 10.4988];
viscircles(c, r1)

我已经生成了上面的代码来形成环形环结构,但我也希望填充颜色。我该怎么办?

4 个答案:

答案 0 :(得分:7)

你可以走数学路线并绘制函数ceil(sin(pi*(X.^2 + Y.^2)))

zoomlevel = 50;
for n = 1:zoomlevel
    [X,Y] = ndgrid(linspace(-n,n,500));
    I = ceil(sin(pi*(X.^2 + Y.^2)));
    imshow(mat2gray(I));
    drawnow;
    pause(0.03);
end

当然这只是一个光栅图形而不是矢量图,所以不要放大太多。 ;-)(虽然如果你缩放 out ,混叠文物看起来会很酷。请自行承担风险。) Circles

答案 1 :(得分:4)

我的Matlab版本没有viscircles,所以这里的方法是用交替的颜色绘制每个单独的圆圈。它使用rectangle函数,它允许您定义角的曲率,使矩形/正方形变为椭圆/圆。应首先绘制更大的圆圈,以便它们不会完全覆盖较小的圆圈。

colors = [.9 .9 .9; 0 0 0]; %// light gray and black
N = 16; %// maximum number
hold on
for n = N:-1:1; %// bigger circles first
    s = sqrt(n);
    rectangle('curvature', [1 1], 'position', [-s/2 -s/2 s s], ...
        'edgecolor', 'none', 'facecolor', colors(mod(n-1,2)+1,:));
end
axis square

enter image description here

答案 2 :(得分:3)

您还可以为所有1半径创建值为r的“曲面”,为0创建r1。然后绘制为从顶部看到的表面,或直接使用pcolor

r = [0 5.2494 7.4328 9.0922 10.4988] ;  %// define all your radiuses
bw = mod( 1:numel(r) , 2 ) ;            %// create an alternance of 0 and 1 (same size as "r")
ntt = 50 ;                              %// define how many angular division for the plot
theta = linspace(0,2*pi,ntt) ;          %// create all the angular divisions
[rr,tt]=meshgrid(r,theta) ;             %// generate a grid 

z = repmat( bw , ntt , 1 ) ;            %// replicate our [0 1 0 ...] vector to match the grid

[xx,yy,zz] = pol2cart(tt,rr,z) ;        %// convert everything to cartesian coordinates

pcolor(xx,yy,zz)                        %// plot everything
colormap(gray(2))                       %// make sure we use only 2 colors (black and white)
shading flat ; axis equal               %// refine the view (axis ratio and "spokes" not visible)

您可以在原始r中发送任意数量的半径。 这将呈现:

alternatecircles

这种方法最初比其他解决方案看起来要长一些,但是您可以通过合并某些行来删除许多中间步骤,如果您稍后要重用这些图形,它可能会带来两个好处:

  • 如果获得图形对象(hp=pcolor(xx,yy,zz))的句柄,则只能处理一个图形对象。
  • 如果您需要更改颜色,则无需循环浏览每个圆圈,只需将色彩映射更改为您想要的2种颜色(例如,如果您想要“红色”和“绿色”,只需调用colormap { {1}}你已经完成了。

答案 3 :(得分:2)

viscircles会返回hggroup个对象。这种对象的一个​​属性是它的Children,它是它创建的图形对象的句柄数组。例如,你可以写

h1 = viscircles(c, r)
c1 = h1.Children

这里的孩子应该只是viscircles定义的圆形补丁的句柄。现在,要设置i圆形补丁的颜色,您可以设置句柄FaceColor的{​​{1}}属性。