MarkerSizeを座標の値と一致させたい

3 次查看(过去 30 天)
Hernia Baby
Hernia Baby 2022-2-17
【背景】
 現在、円同士をぶつけて軌道を変える反射のアニメーションを作成中です。
 演算自体はうまくいったのですが、グラフィックスがうまくいきません。
 マーカーサイズの設定が問題のようです。以下に例を示します。
【例題】
 半径 20 のマーカーを作成したいのですが、うまくいきません。
r = 40/2;
Xl = 100;
Yl = 100;
fig = figure;
ph = plot(0,0,'MarkerSize',2*r,'Marker','o','MarkerFaceColor','k');
grid on
xlim([-1 1].*Xl)
ylim([-1 1].*Yl)
pbaspect([1 1 1]);
 上記のように半径は20になっていません。
 figureのプロパティで 'Units' があるのでそこを設定するのかなと思っていますが、
 いまいちピンとこないため悩んでいます。
【補足】なぜPlotか
 コールバックでアニメーションを作っているからです。
 これは後にマウス等の操作と連携するために行っています。
 Plotは入れ子関数内で ph.XData / ph.YData の更新だけすればいいので楽だと思い選びました。
 現状はアスペクト比を合わせて、ph = axes('Unit', 'pixel')とすることで m ファイル上はうまくいってるように見えます。
 ほかの方法があれば、教えていただけると幸いです。

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-2-18
% MarkerSize — マーカー サイズ 6 (既定値) | 正の値
% マーカー サイズ。ポイント単位の正の値として指定します。1 ポイントは 1/72 インチです。
マーカーはグラフ内で特定の座標を目立たせる事が目的だから、グラフの表示サイズに左右されない画素単位の大きさで設定する仕様なのでしょう。グラフの表示サイズをdot by dotになるよう固定すればマーカのサイズとグラフの表示が一致するはずです。下図はグラフを拡大縮小表示してもマーカーの大きさが変わらない事を検証した結果です。
上記の様な縛りなくグラフ上に任意の円を描くには、円をプロットするのが妥当だと思います。
plot(10+5*cos(0:0.1:2*pi),10+5*sin(0:0.1:2*pi));
MATLABには、line関数はあってもcircle関数は無い様です。上記のようにplot関数1行で速く描けるから不要ですが。rectangle関数の「角丸機能」を使って円を描く裏技も下記に回答されていますね。またImage Processing Toolboxがあればviscircles関数が本質問の目的に最も適した方法ですね。Circle関数はちょっと用途が異なりますね。
  1 个评论
Hernia Baby
Hernia Baby 2022-2-18
んー、やっぱり円を作るのがよさそうですね
自分も 公式のヒント を見てたのですが、circle作るのは計算コストがネックかなと考えてました…viscirclesはグラフと併用できるのかが課題ですかね
---------
MATLAB芸の練習としてブロック崩しのようなものを今回は考えていました
ご提案通り、円を作る入れ子関数を作成して動作させようと思います
ありがとうございました!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 グラフィックス パフォーマンス 的更多信息

产品


版本

R2021b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!