2016-04-22 91 views
1

以下代码取自here如何绘制黑白图片mandelbrot图

我试图让下列更改下面的代码

如果c不是集的一部分,绘制白色 像素,如果它是一组的一部分,情节黑色像素。

使用imshow命令绘制图像

% Parameters: 
% Input, integer M, the number of pixels in the X direction. 
% Input, integer N, the number of pixels in the Y direction. 
% Input, integer COUNT_MAX, the number of iterations. While 10 or 
% 20 is a reasonable value, increasing COUNT_MAX gives a sharper image. 
% 
    m=601; 
    n=401; 
    count_max = 200; 

    %Change the range of x's and y's here 
    x_max = 1; 
    x_min = - 2; 
    y_max = 1; 
    y_min = - 1; 

% Create an array of complex sample points in [x_min,x_max] + [y_min,y_max]*i. 
% 
    I = (1 : m); 
    J = (1 : n); 
    X = ((I - 1) * x_max + (m - I) * x_min)/(m - 1); 
    Y = ((J - 1) * y_max + (n - J) * y_min)/(n - 1); 
    [ Zr, Zi ] = meshgrid (X, Y); 
    C = complex (Zr, Zi); 
% 
% Carry out the iteration. 
% 
    epsilon = 0.001; 

    Z = C; 
    ieps = 1 : numel (C); 

    %Iterate through 1 to maximum no. of iterations 
    for i = 1 : count_max 
    Z(ieps) = Z(ieps) .* Z(ieps) + C(ieps); 
    W(ieps) = exp (- abs (Z(ieps))); 
    ieps = ieps (find (epsilon < W(ieps))); 
    end 
% 
% Display the data. 
% 
    d = log (abs (Z)); 
    t = delaunay (Zr, Zi); 
% 
% To see individual pixels, use 'flat' color. 
% 
h = trisurf (t, Zr, Zi, d, 'FaceColor', 'flat', 'EdgeColor', 'flat'); 
% 
% h = trisurf (t, Zr, Zi, d, 'FaceColor', 'interp', 'EdgeColor', 'interp'); 

    view (2) 
    axis equal 
    axis on 
    title_string = sprintf ('Mandelbrot set, %d x %d pixels, %d iterations', ... 
    m, n, count_max); 
    title (title_string) 
    xlabel ('Real Axis'); 
    ylabel ('Imaginary Axis'); 
% Terminate. 

对于第一点,我不知道该怎么做。

为了完成第二点: 当我更换

view(2)imshow(2)我没有得到的图像只是标题,标签

如果我改变:

view(2)imshow()我得到一个3D图。

回答

1

nargin只是报告传递给函数的输入参数的数量。您可以使用一系列if语句来检查用户通过哪些输入(如果有的话),并为他们未通过的设置设置默认值。

它看起来像是你把它做成一个脚本而不是一个函数,并且硬编码值为m,ncount_max在顶部。在这种情况下,nargin语句并不重要。不过,我会将其改回为一个函数。

function mandelbrot (m, n, count_max) 
    %// If no input were provided use m = 101 
    if (nargin == 0) 
     m = 101; 
    end 

    %// If the second input wasn't provided, set it equal to m 
    if (nargin <= 1) 
     n = m; 
    end 

    %// If the third input wasn't provided, set count_max = 20 
    if (nargin <= 2) 
     count_max = 20; 
    end 

    %// Other stuff here 
end 

然后你就可以用你想

mandelbrot(601, 401, 200) 
+0

的参数调用它喔我知道了,谢谢对我的理解解释现在用'nargin'的你能帮我与前两个要求是什么? – newguy

+0

@newguy它解决你最后一个问题。你为什么试图用任何东西来替换“view(2)”? 'imshow'与'view(2)' – Suever

+0

无关'因为我必须使用imshow命令作为要求 – newguy