2016-04-24 12 views
1

Der folgende Code ist von here entnommen.Plot Schwarz-Weiß-Mandelbrot-Set

Ich versuche folgende Änderung des Code unter

zu machen Wenn c nicht Teil des Satzes ist, zeichnet ein weißes Pixel, und wenn es Teil des Satzes, Grundstück ein schwarzes Pixel ist.

Ich erhalte diese Ausgabe: enter image description here

Aber ich will wie dies ein Schwarz-Weiß-mandel Bild zeichnen:

enter image description here

Verwenden Sie den imshow Befehl Ihre plotten Bild

Kann jemand helfen?

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. 

Antwort

1

Der Unterschied zu dem Satz gehören und nicht zur Menge gehört, ist nichts anderes als epsilon < W(ieps) und Sie verwenden bereits, dass in Ihrem Code. Die Farbinformation in der Darstellung stammt aus dem vierten Argument von trisurf (t, Zr, Zi, d,...).

Deshalb schlage ich folgendes vor dem trisurf Befehl zu tun:

d(1 : numel (C)) = 1; 
d(ieps) = 0; 

dieser ersten Sätze alle Elemente 1 und dann diese Elemente auf Null setzt, die Teil des Satzes sind, entsprechend dem Zustand, der war bereits in der letzten Iteration des Konvergenztests berechnet.

Um schwarz und weiß zu plotten, verwenden Sie einfach colormap gray nach der trisurf.

Hoffnung, das hilft.

+0

Ja, es funktioniert Danke können Sie mir sagen, wie kann ich das Bild mit 'imshow' Befehl anstelle von' view (2) 'sehen? – newguy

+0

Wenn ich dies 'imshow (h)' mache, bekomme ich eine 3D-Ansicht zusammen mit einer Fehlermeldung im Befehlsfenster, wenn ich nur an 2D interessiert bin. – newguy

+0

@newguy Warum möchten Sie 'imshow' über die Standardfigur verwenden? Ich denke, dass Sie zuerst die dreidimensionalen Daten in ein zweidimensionales Bild verarbeiten müssen, um 'imshow()' zu verwenden. –