Texによる文書作成37 ~電気回路の作図7
今回はTeXを用いた電気回路図の作成のうちメーター・測定器の表示について紹介したい。
1. メーター
回路図中に、電流計、電圧計、抵抗計を追加することができる。電流計はammeter
, 電圧計はvoltmeter
, 抵抗計はohmmeter
で表記することができる。
\begin{figure} \begin{center} \begin{circuitikz} \draw(0,0) to [ammeter] ++(1,0); \draw(2,0) to [voltmeter] ++(1,0); \draw(4,0) to [ohmmeter] ++(1,0); \end{circuitikz} \caption{メーター} \end{center} \end{figure}
単純な記号ではなく、測定器のイラストを挿入することもできる。汎用メータはsmeter
、電流メータはqiprobe
, 電圧メータはqvprobe
, 電力メータはqpprobe
とする。
\begin{figure} \begin{center} \begin{circuitikz} \draw(0,0) to [smeter] ++(1,0); \draw(2,0) to [qiprobe] ++(1,0); \draw(4,0) to [qvprobe] ++(1,0); \draw(6,0) to [qpprobe] ++(1,0); \end{circuitikz} \caption{メーター(ピクチャー)} \end{center} \end{figure}
メータ以外の測定器としてオシロスコープ、カレントループ(電流測定コイル)を表示でき、それぞれoscope
, iloop
とする。
\begin{figure} \begin{center} \begin{circuitikz} \draw(0,0) to [oscope] ++(1,0); \draw(2,0.5) to [iloop] ++(0,-1); \end{circuitikz} \caption{オシロスコープ・カレントループ} \end{center} \end{figure}
2. オシロスコープのカスタマイズ
オシロスコープのイラストをカスタマイズすることができる。まず波形を変えるには\ctikzset{bipoles/oscope/waveform=}
のwaveform=にramps(デフォルト), sin, square, triangle, lissajous, zero, noneのいずれかを入れる。表示は\draw node[oscopeshape]{}
とするとctikzsetに記述した波形でオシロスコープのイラストが表示される。
\begin{figure} \begin{center} \begin{circuitikz} \ctikzset{bipoles/oscope/waveform=ramps} \draw(0,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=sin} \draw(2,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=square} \draw(4,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=triangle} \draw(6,0) to node[oscopeshape]{} ++(1,0); \end{circuitikz} \caption{オシロスコープ(波形1)} \end{center} \end{figure}
\begin{figure} \begin{center} \begin{circuitikz} \ctikzset{bipoles/oscope/waveform=lissajous} \draw(0,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=zero} \draw(2,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=none} \draw(4,0) to node[oscopeshape]{} ++(1,0); \end{circuitikz} \caption{オシロスコープ(波形2)} \end{center} \end{figure}
次にオシロスコープのサイズは、\ctikzset{bipoles/oscope/width=1.0}
として設定できる。またメータも含めてfill
オプションで色をつけることもできる。
\begin{figure} \begin{center} \begin{circuitikz} \ctikzset{bipoles/oscope/width=1.0} \ctikzset{bipoles/oscope/waveform=ramps} \draw(0,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=sin} \draw(2,0) to node[oscopeshape,fill=yellow]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=square} \draw(4,0) to node[oscopeshape]{} ++(1,0); \ctikzset{bipoles/oscope/waveform=triangle} \draw(6,0) to node[oscopeshape]{} ++(1,0); \end{circuitikz} \caption{オシロスコープ(カスタマイズ)} \end{center} \end{figure}
3. オシロスコープの接続
最後にカレントループとオシロスコープを接続して描画する方法を紹介する。カレントループの右側の接続点(飛び出ているところ)とオシロスコープの入力を接続するために直接座標値を使わず、それぞれのオプションで座標を指定する。
カレントループの名前をIとしてI.i
がループの接続点を示し、オシロスコープのオプションでancor
を指定することで左側または右側に接続することができる。
また、オシロスコープの名前をOとした場合にO.south
はオシロスコープの下側の座標を意味する。以下にオシロスコープとカレントループの接続例を示す。
\begin{figure} \begin{center} \begin{circuitikz}[american] \draw (3,0) to [iloop, name=I] ++(0,-2) node[ground] (GND){}; \draw (I.i) -- ++(0.5,0) node[oscopeshape, anchor=left, name=O]{}; \draw (O.south) -- (O.south |- GND) node[ground]{}; \end{circuitikz} \caption{オシロスコープ接続} \end{center} \end{figure}
4. まとめ
今回はメータの記号・イラストの表示、オシロスコープの表示とカスタマイズについて紹介した。
OpenCVの使い方25 ~ 輪郭抽出2
今回はOpenCVを用いて画像の輪郭を抽出する際の検出手法の違いについて紹介したい。
前回紹介したように輪郭検出方法は次の4種類:cv2.RETR_EXTERNAL,
cv2.RETR_LIST
, cv2.RETR_CCOMP
, cv2.RETR_TREE
があり、前回はcv2.RETR_TREE
を使用した。
今回は他の輪郭検出手法を用いて輪郭抽出したときの結果の違いを調べる。
画像はOpenCVのモノクロロゴをグレーで読み込むところまでは前回と同じ。
ret,thresh = cv2.threshold(gray,127,255,0) contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) cnt_img = np.zeros_like(gray, dtype=np.uint8) cnt_img_tree = cv2.drawContours(cnt_img, contours, -1, 255, 2) contours_ex, hierarchy = cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cnt_img = np.zeros_like(gray, dtype=np.uint8) cnt_img_ex = cv2.drawContours(cnt_img, contours, -1, 255, 2) contours_list, hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) cnt_img = np.zeros_like(gray, dtype=np.uint8) cnt_img_list = cv2.drawContours(cnt_img, contours, -1, 255, 2) contours_comp, hierarchy = cv2.findContours(thresh,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) cnt_img = np.zeros_like(gray, dtype=np.uint8) cnt_img_comp = cv2.drawContours(cnt_img, contours, -1, 255, 2) plt.figure(figsize=(15,25)) plt.subplot(1,4,1) plt.imshow(cnt_img_tree,cmap='gray') plt.title('RETR_TREE') plt.subplot(1,4,2) plt.imshow(cnt_img_ex,cmap='gray') plt.title('RETR_EXTERNAL') plt.subplot(1,4,3) plt.imshow(cnt_img_list,cmap='gray') plt.title('RETR_LIST') plt.subplot(1,4,4) plt.imshow(cnt_img_comp,cmap='gray') plt.title('RETR_CCOMP')
RETR_EXTERNALは外側の輪郭のみを抽出するためO,P,eの内側が輪郭として抽出されない。RETR_EXTERNAL以外はすべて同じ結果になる。
RETR_EXERNALで抽出した輪郭を輪郭リストの番号で示すと以下のようになる。
n=len(contours_ex) plt.figure(figsize=(12,12)) for i in np.arange(n): cnt_img = np.zeros_like(thresh, dtype=np.uint8) cnt_img = cv2.drawContours(cnt_img, contours_ex,i, 255, 2) plt.subplot(3,4,i+1) plt.imshow(cnt_img,cmap='gray') plt.title('Cont Num'+str(i))
cv2.RETR_LIST
, cv2.RETR_CCOMP
, cv2.RETR_TREE
は輪郭抽出については差がなかったが、内側の輪郭の階層構成について差がある。
抽出した輪郭をさらに処理するときに違いを理解しておくことが必要になる。
ブログデザイン備忘録 ~ GA4
今回はGoogleアナリティクス4(GA4)の設定とはてなブログの追加データを設定して表示した結果について紹介したい。
Googleアナリティクスの設定については以下の通り。
基本的にはGoogleアナリティクス側でGから始まる測定IDをコピーして、はてなブログの設定-詳細設定のGoogleアナリティクス4埋め込みに貼り付ける。
なお、従来のGoolgeアナリティクス:ユニバーサルアナリティクスのUAからはじまるIDを非推奨:Google Analytics埋め込みに入れておくと、ユニバーサルアナリティクスGoogleとアナリティクス4を併用することができる。ただしユニバーサルアナリティスクは来年の2023/7/1で終了する。
さらにGoogleアナリティクス4でカスタムディメンジョンを追加することで、はてなブログ用の解析データを取得することができる。 設定方法は以下の通り。
追加したカスタムディメンジョンの閲覧をするには、Googleアナリティクス4のエンゲージメント-イベントを開く。
例えばイベントの"Scroll"をクリックすると、POST_DATE, TRACK_AREA, PERCENT_SCROLLEDが追加のデータとして閲覧できる。
記事が読了されているか、またスクロール率でどの程度まで読まれたかわかる。
他にイベントの"Click"をクリックすると、POST_DATE,LINK_TEXT,LINK_URL,OUTBOUND,TRACK_COMPONENT,LINK_CLASSES, TRACK_AREA,LINK_ID,LINK_DOMAINが表示される。例えばLINK_TEXTでは、貼り付けたリンク先やブログ内の移動の状況がわかる。