0
votes

I am calling a functions recursively and I want them all to draw in the same plot. When i try to create a handler and pass it on with the parameters I get the following error:

??? Error using ==> set Invalid handle object.

Error in ==> triangle at 23
set(h, 'xdata', [x1,x3], 'ydata', [y1,y3]);

Before calling my function I've created a handler and set my preferences:

h = plot([0,1],[0,0]);
set(h, 'erasemode', 'none');
triangle(0,0,1,0,10,0,h)

This is my function:

function triangle(x1,y1,x2,y2, deepth , n,h)
%Paints a equilateral triangle for two given Points
if depth > n

    shg
    clf reset

    %vector
    v_12 = [x2-x1;y2-y1];

    %rotate vector
    g_uz = [0.5,-sqrt(3)/2;sqrt(3)/2, 0.5];
    p = g_uz * v_12;
    x3 = p(1) + x1;
    y3 = p(2) + y1;


    axis([-10 10 -10 10]);
    axis off

    drawnow

    set(h, 'xdata', [x1,x3], 'ydata', [y1,y3]);
    drawnow

    set(h, 'xdata', [x2,x3], 'ydata', [y2,y3]);
    drawnow

    v_13 = [x3-x1,y3-y1];
    v_23 = [x3-x2,y3-y2];

    % 1-3 triangle
    triangle(x1+v_13(1)/3,y1 + v_13(1)/3, x1+ 2*v_13(1)/3,y1 + 2*v_13(1)/3, tiefe, n+1 );
end

Do you know any solutions? How can I Plot in an object form a function i called?

2

2 Answers

0
votes

The clf on line 6 clears the figure, removing the line that you want to use as your graphic output.

Remove that line and see if it works.

0
votes

Try using hold all. It lets you plot new lines in the figure without clearing existing lines.

figure
hold all
triangle(...)

Inside your function just call plot.

plot(x, y)
plot(x, z)