MarkerSizeを座標の値と一致させたい
26 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hernia Baby
el 17 de Feb. de 2022
Comentada: Hernia Baby
el 18 de Feb. de 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 comentarios
Respuesta aceptada
Atsushi Ueno
el 18 de Feb. de 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関数はちょっと用途が異なりますね。
Más respuestas (0)
Ver también
Categorías
Más información sobre グラフィックス パフォーマンス en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!