日記

日本語の勉強のためのブログ

【MATLAB】図中の2点を双方向矢印↔で結ぶ他

MATLABで2次元グラフを作成するにあたり、有益だった情報についてまとめる。

<目次>

とりあえずグラフを表示する

以下のコードをコピペするとsin波(0≦x≦2π)が表示される。

x = linspace(0, 2*pi, 1024);
y = sin(x);
plot(x, y)

グラフを点線で描画する

plot関数にグラフのデザインを引数として与えればよい。 具体的には以下のようにする。

x = linspace(0, 2*pi, 1024);
y = sin(x);
plot(x, y, '--')

ここでは引数'--'を与えて点線にしたが、ほかにも様々な線にできる。公式のリファレンスを参考にしてほしい。
https://jp.mathworks.com/help/matlab/ref/plot.html#btzitot_sep_mw_3a76f056-2882-44d7-8e73-c695c0c54ca8

軸目盛りの変更

軸目盛りをT, 2T, 3T, ... (T: 周期)のようにするには以下のコードを追加する。

xticks([0 pi 2*pi 3*pi]);
xticklabels({'0', 'T', '2T', '3T'});

まずxticksを用いて指定位置に目盛りを打つ。 その後xticklabelsで目盛りの文字を変更している。

y軸についてもyticks, yticklabelsを使えば同様に変更できる。

文字サイズを一括変更する

下記サイトからの情報。 https://sciotein.com/2019/11/02/matlab%E3%81%A7%E5%9B%B3%E4%B8%AD%E3%81%AE%E6%96%87%E5%AD%97%E3%82%B5%E3%82%A4%E3%82%BA%E3%82%92%E4%B8%80%E5%BA%A6%E3%81%AB%E5%A4%89%E6%9B%B4%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

以下のコードを追加する。

fontsize = 11; % ここにフォントサイズを入れる
h = gca;
set(h, 'fontsize', fontsize);

これで大部分の文字はサイズを変更できる。ただし一部の文字については変更できない場合があるので注意。自分の場合、text関数で直接図中に書いた文字は変更されなかった。

変更できない箇所については手動で変更するしかない。例えば、text関数にフォントサイズを与えるには以下のように書く。

text(x, y, '文字', 'fontsize', 11); % x, yは表示位置の座標

図中の2点を双方向矢印↔で結ぶ

矢印の書き方について、3つに分けて説明する。

①annotationを使う

双方向矢印自体は以下のようにすると表示できる。annotation関数に引数'doublearrow'を指定することで、双方向矢印を書くことができる。

annotation('doublearrow', x, y) % x, yはFigureを基準に正規化された座標

しかしこれには問題点がある。公式リファレンスにも記載されているが、x, yには「Figureを基準に正規化された座標」を指定する必要があるのだ。

既定では、単位は Figure を基準に正規化されます。Figure の左下隅が (0,0) にマップされ、右上隅が (1,1) にマップされます。単位を変更するには、Units プロパティを使用します。
例: y = [.3 .5]
(公式リファレンス https://jp.mathworks.com/help/matlab/ref/annotation.html#br2_upx-1-x より引用)

グラフ上の座標を使えないため、なかなか面倒である。

②quiverを使う

矢印を書く方法はもう1つある。quiverを用いれば、普段通りグラフ上の座標を指定できる。

quiver(x, y, u, v, 0);
% x, yは開始位置の座標、u, vはそれぞれ矢印のx, y方向成分

% 5つ目の引数は矢印の長さを自動スケーリングするかを表す。
% ここでは0=スケーリングしないを選択した。

少し記法が難しいが、座標(x, y)からx方向にu, y方向にvだけ伸びた矢印を引くという意味である。
例えばquiver(x, y, 1, 1, 0)とすれば、座標(x, y)からx方向に1、y方向に1だけ伸びた矢印、つまり右上に向かう矢印が引かれる。
この関数を使えば、Figureを基準に正規化された座標を使う必要がないため、容易にグラフ上の2点を結ぶことができる。

しかしこの方法にも問題がある。スタイルとして双方向矢印が選択できないのである。①のannotationとは違い、双方向矢印にするための引数がないのが原因である。

③quiverを2回使用する

quiverを用いてゴリ押しで双方向矢印を書く方法を以下に示す。単方向矢印を2つ重ねて書くことで双方向矢印を再現している。
イメージとしてはこんな感じである。

f:id:kalax:20210427154801p:plain
quiverを使った双方向矢印作成のイメージ図

quiver([2 4], [3 3], [2 -2], [0 0], 0);

以上のコードを実行するとこのように表示される。なお表示範囲は0≦x,y≦5とした。

f:id:kalax:20210427154920p:plain
quiverで描画した双方向矢印

比較的簡単に、いい感じの双方向矢印を書くことができた。

(2021/05/16追記)動画のフレーム間差分を取る

校閲していないので後で書き直すかも)
正攻法でやったらうまくいかなかったが(おそらくuint8絡みのエラー?)、imabsdiff関数を用いたらうまくいった。
行列 = imabsdiff(現在のフレーム, 1つ前のフレーム)の形で記述して、フレーム数の分だけfor文で回してやればよい。

2 つのイメージの差の絶対値 - MATLAB imabsdiff - MathWorks 日本

C++でHQ9+のインタプリタを作った

タイトルの通り。

ニコニコ大百科を見ていたら面白いプログラミング言語があると知ったため作ってみた。
https://dic.nicovideo.jp/a/hq9+

堅めの説明はwikipediaを参照。
HQ9+ - Wikipedia

ソースコード

見やすさの観点から、各出力後には改行を入れる設計にした。
ささっと作ったものなので汚い箇所もあるがご愛嬌。

(2021/05/30追記) ソースコードは以下に移動させた。 github.com

Huawei P30 Liteのフォントを好きなものに変更する

一度やってみたかったので。機種はタイトルにもあるがHuawei P30 Lite(EMUI10)。

(注)すべての文字に設定が適用されるわけではない。Webページなど、一部フォントが適用されない場面もあることを念頭に置いてほしい。

フォントを探す

そもそもフォントが無いと始まらない。

ここで注意すべきはライセンスである。PCに標準で搭載されているフォントを流用するのは(一部を除いて)不正コピーに当たるため気をつける必要がある。
私的利用であっても不正コピーはしてはならないので、よさげなフリーフォントgoogleで検索する等して見つけるのが良いだろう。補足にいくつかサイトも載せておいたので参考にしてほしい。

また、以下で説明する方法では拡張子が".ttf"のフォント(TrueTypeフォント)のみが使用可能であることにも注意。OpenTypeフォント(.otf)は使用できない。
※ただし拡張子が".ttc"のフォントについては手順を踏めば使用可能。詳しくは補足で説明する。

ここではふい氏の「ふい字 v2.9」を使用することにする(配布ページはこちら)。

PCなどでフォントをダウンロードした人は、スマートフォンの適当なフォルダにフォントデータを移しておくのを忘れずに。

フォントを適用する

基本的なやり方は以下のサイトの「「Font Manager」アプリで「明朝体」フォントを「適用」する」の部分に載っている。

【MediaPad】システムフォントを明朝体にする方法【EMUI】 | PCエトセトラ

Font Managerの説明を読むとEMUI9, 8, 5, 4のみサポートされているようだが、EMUI10でも問題なく動作した。

できた

f:id:kalax:20210311195419p:plain
ColorNoteでダミーテキストを表示した様子
※ダミーテキストはhttps://lipsum.sugutsukaeru.jpで作成した。

補足

拡張子が.ttcのフォントを.ttfに変換する

こちらを参考にしてほしい。

TTCフォントをTTFに分解する方法。 - Qiita

(そもそもttcファイルとは…?という方はこちら

ふい字をDLしたらlzhファイルだったんだけど

7zipなどをインストールすれば解凍可能。

圧縮・解凍ソフト 7-Zip

フリーフォントはどこにある?

以下にいくつか書いておく。

【全部無料】おすすめの日本語フリーフォント43選【商用利用OK】 | 321web
-> 日本語フリーフォントのまとめ。

Google Fonts
-> google fontにある日本語フォントへのリンク。

概要 | MORISAWA BIZ+ | フォント製品 | 製品/ソリューション | 株式会社モリサワ
-> モリサワのUDフォント。一部が無料で使用できる。

https://nelog.jp/programing-fonts-for-windows
-> コーディング用のフォント。日本語対応。

Atcoderのコードテストがいつまで経っても終わらないときに使える代替サービス

タイトルの通り。
たまに調子が悪いのかコードテスト一回に10分もかかることがあるので、代替サービスを使いたい。

→公式に記載があった。
AP1 - 付録1.コードテストの使い方

以下該当部分の引用。

コードテスト以外のプログラミング環境

コードテスト以外のプログラミング環境を紹介します。コードテストが使いづらいと感じた方はこちらを試してみてください。
全てAtCoderとは無関係なWebサービスであることに注意してください。
Wandbox
(中略)
ideone
jdoodle
repl.it

Youtubeのサイドメニューが表示されない

タイトルの通り。
OSはWindows 10 Pro(バージョン2004)、ブラウザはGoogle Chrome(バージョン88.0.4324.190)。
下に示すように、左側のメニューが表示されない問題が発生していた。

f:id:kalax:20210305173824p:plain
正常なYoutubeのホーム画面

f:id:kalax:20210305174142p:plain
問題のホーム画面(DevToolsによる再現画像)

解決

AdBlockのフィルタによるものだった。
「日本語」フィルタのチェックを外すと、正常なホーム画面が表示されるようになった。

f:id:kalax:20210305175849p:plain
「日本語」フィルタが適用されている状態

補足

AdBlockのオプション画面には、
Chromeの「設定」→「拡張機能」→AdBlockの項の「詳細」→「拡張機能のオプション」
から行くことができる。