3

while ループでは、2 つのエンティティの位置 (x,y) をプロットする必要があります。つまり、2 つの点を含むプロットを生成するだけです。プロットを特定の最大 x および y 値にスケーリングする必要があります。追加の要件は、ポイントの 1 つで、それぞれが指定された半径を持つ 3 つの同心リングを周囲に配置する必要があるという事実です。さらに、これはすべてループで発生するため、1 つのプロット ウィンドウのみが開き、多数のウィンドウが開かれないことを望んでいます (ループの反復ごとに 1 つ)。

基本的に、ここに私が実装しようとしている(そして失敗している!)疑似コードがあります:

-> Open new plot window, with a given x and y axis
while (running) {
  -> Clear the plot, so figure is nice and clean
  -> Plot the two points
  -> Plot the three circles around point A
}

MATLAB のドキュメンテーションでいくつかの項目を見つけましたが、単一のプロット関数では希望どおりの結果が得られないようです。または、一部のデータのみを使用して誤って複数のプロットを作成する場合があります (つまり、1 つのプロットには点があり、別のプロットには円があります)。 .

4

3 に答える 3

3

while ループで使用できるサンプル コードを次に示します。

x0=1; y0=4; 
x1=2; y1=3;  % the x-y points
r=[1 2 3]; % 3 radii of concentrating rings
ang=0:0.01:2*pi; 
xc=cos(ang)'*r;
yc=sin(ang)'*r;

plot(x0,y0,'.',x1,y1,'.'); % plot the point A
hold on
plot(x1+xc,y1+yc); % plot the 3 circles

% set the limits of the plots (though Matlab does it for you already)
xlim([min([x0 x1])-max(r) max([x0 x1])+max(r)]);
ylim([min([y0 y1])-max(r) max([y0 y1])+max(r)]);

hold off

これをループで非常に簡単に機能させることができます。その方法については、matlab のドキュメントを参照してください。

于 2013-11-04T04:50:16.760 に答える
2

次のようなことを試してください:

r = [0.25 0.125 0.0625];
d = (1:360) / 180 * pi;
xy_circle = [cos(d)' sin(d)'];
xy_circle_1 = r(1) * xy_circle;
xy_circle_2 = r(2) * xy_circle;
xy_circle_3 = r(3) * xy_circle;

h_plot = plot(0, 0, '.k');
hold on
h_circle_1 = plot(xy_circle_1(:, 1), xy_circle_1(:, 2), '-b');
h_circle_2 = plot(xy_circle_2(:, 1), xy_circle_2(:, 2), '-r');
h_circle_3 = plot(xy_circle_3(:, 1), xy_circle_3(:, 2), '-g');
axis equal

for hh = 1:100
  xy = rand(2, 2) / 4 + 0.375;
  xlim = [0 1];
  ylim = [0 1];
  set(h_plot, 'XData', xy(:, 1));
  set(h_plot, 'YData', xy(:, 2));

  set(gca, 'XLim', xlim)
  set(gca, 'YLim', ylim)

  set(h_circle_1, 'XData', xy_circle_1(:, 1) + xy(1, 1));
  set(h_circle_1, 'YData', xy_circle_1(:, 2) + xy(1, 2));
  set(h_circle_2, 'XData', xy_circle_2(:, 1) + xy(1, 1));
  set(h_circle_2, 'YData', xy_circle_2(:, 2) + xy(1, 2));
  set(h_circle_3, 'XData', xy_circle_3(:, 1) + xy(1, 1));
  set(h_circle_3, 'YData', xy_circle_3(:, 2) + xy(1, 2));

  pause(1)
end

必要に応じてパラメータを変更できます。

于 2013-11-04T05:20:22.633 に答える
0

次の機能を使用できます

figure;        %creates a figure
hold on;       %overlays points and circles
clf;           %clear the figure

点と円には、さまざまなサイズの2 種類のマーカー (.と) を使用します。o

plot(x,y, 'b.', 'MarkerSize', 4);
plot(x,y, 'ro', 'MarkerSize', 10);
plot(x,y, 'go', 'MarkerSize', 14);
plot(x,y, 'bo', 'MarkerSize', 18);
于 2013-11-04T10:09:49.533 に答える