MarkerSizeを座標の値と一致させたい
22 views (last 30 days)
Show older comments
【背景】
現在、円同士をぶつけて軌道を変える反射のアニメーションを作成中です。
演算自体はうまくいったのですが、グラフィックスがうまくいきません。
マーカーサイズの設定が問題のようです。以下に例を示します。
【例題】
半径 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 ファイル上はうまくいってるように見えます。
ほかの方法があれば、教えていただけると幸いです。
0 Comments
Accepted Answer
Atsushi Ueno
on 18 Feb 2022
% 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関数はちょっと用途が異なりますね。
More Answers (0)
See Also
Categories
Find more on グラフィックス パフォーマンス in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!