
MarkerSizeを座標の値と一致させたい
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hernia Baby
le 17 Fév 2022
Commenté : Hernia Baby
le 18 Fév 2022
【背景】
現在、円同士をぶつけて軌道を変える反射のアニメーションを作成中です。
演算自体はうまくいったのですが、グラフィックスがうまくいきません。
マーカーサイズの設定が問題のようです。以下に例を示します。
【例題】
半径 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 commentaires
Réponse acceptée
Atsushi Ueno
le 18 Fév 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関数はちょっと用途が異なりますね。
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur グラフィックス パフォーマンス dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!