0

関数を再帰的に呼び出しており、それらすべてを同じプロットに描画する必要があります。ハンドラーを作成してパラメーターとともに渡そうとすると、次のエラーが発生します。

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

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

関数を呼び出す前に、ハンドラーを作成して設定を行いました。

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

これは私の機能です:

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

解決策を知っていますか?呼び出した関数をオブジェクトにプロットするにはどうすればよいですか?

4

2 に答える 2

0

6 行目はclf図をクリアし、グラフィック出力として使用する行を削除します。

その行を削除して、機能するかどうかを確認します。

于 2013-02-25T20:37:06.593 に答える
0

を使ってみてくださいhold allplot既存の行をクリアせずに、Figure 内の新しい行を作成できます。

figure
hold all
triangle(...)

関数内で plot を呼び出すだけです。

plot(x, y)
plot(x, z)
于 2013-02-25T20:37:41.617 に答える