つれづれなる備忘録

日々の発見をあるがままに綴る

gnuplotによるグラフ作成24~プロット座標系の変更

 今回はxy直交座標系と異なる極座標、円筒座標、球座標系でプロットする方法について紹介する。

1. 極座標

 前回までにパラメトリックプロットを紹介したが、今回は極座標系で具体的にはr=f(θ)と表せるような関数をプロットする。 極座標系を使用するには以下のようにset polarとすると変数t (θに相当)が設定される。

set polar
>dummy variable is t for curves

例えばカージオイド曲線  r=1+\cos \theta をプロットするには

plot 1+cos(t)

少し書式(レンジ・アスペクト比)を整える必要はあるが、極座標プロットはできている。

"極座標系によるカージオイド曲線のプロット"
極座標系によるカージオイド曲線のプロット

2. 円筒座標系/球座標系

 3次元での円筒座標系を扱うこともできる。まずset mapping cylidricalとすることで3次元空間を円筒座標系として取り扱う。さらに角度パラメータφを扱うためset parametricとしてパラメトリックモードにする。円筒を描画するには

 \begin{eqnarray} x&=&\cos \phi \\ y&=&\sin \phi \\ z&=&z \end{eqnarray}

をプロットする。

set mapping cylidrical
set parametric
set isosamples 40
splot cos(u),sin(u),v

以下のように円筒座標系でプロットすることができる。φはu, zはvに対応している。

"円筒座標系でのプロット"
円筒座標系でのプロット

円筒座標系と同じ要領で球座標系でプロットする。set mapping sphericalとすることで3次元空間を球座標系にして、set parametricとしてパラメトリックモードにする。 球座標系で球を描画するには

 \begin{eqnarray} x&=&\cos \theta \cos \phi \\ y&=&\cos\theta\sin \phi \\ z&=&\sin\theta \end{eqnarray}
set mapping spherical
set parametric
set isosamples 40
splot cos(u)*cos(v),cos(u)*sin(v),sin(u)

以下のように円筒座標系でプロットすることができる。θはu,φはvに対応している。

"球座標系でのプロット"
球座標系でのプロット

xyzのスケールが等しくないため、球がつぶれてみえてしまう。そこでset view equal xyzでxyzのアスペクト比を等しくし、さらにxy面と球の下端が揃うようにset ticslevel 0とする。

set view equal xyz
set ticslevel 0

以下のように球を正しく描画することができる。

"球座標プロットの調整"
球座標プロットの調整

3. まとめ

 今回はgnupotを用いて極座標、円筒座標、球座標系でプロットする方法を紹介した。

TinkercadによるArduinoシミュレーション44 ~ ゼロクロス検出回路2

 前回紹介したゼロクロス検出回路の別の方式として、今回はフォトカプラを用いたゼロクロス検出回路とTinkercadによるシミュレーションについて紹介したい 。

atatat.hatenablog.com

1. フォトカプラ―とは

 フォトカプラ―(オプトカプラ―)は下の図のように発光素子(LED)と受光素子(フォトトランジスタ)で構成され、電気的に絶縁した状態で入力信号を出力側に伝達する素子である。入力側がON(ある程度の電圧がかかっている)のときLEDが発光し受光側のフォトトランジスタは導通状態になり、またOFFのときはLEDは発光しないので受光側のフォトトランジスタは不通状態になる。電気的に絶縁されているため、入力側の電気ノイズの影響が受けにくいことや機械式スイッチよりは耐久性があり、寿命が長いという特徴がある。

wikipedia:フォトカプラより https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Optoisolator_Pinout.svg/1920px-Optoisolator_Pinout.svg.png

2. フォトカプラを用いたゼロクロス検出回路

 Tinkercadではオプトカプラのモデルとして4N35が利用可能で、実際のデータシートはhttps://docs.rs-online.com/25c0/0900766b80dca9c8.pdfなどを参照。フォトカプラはLEDを用いるため接続したアノード・カソード電圧が逆にならないように、あらかじめダイオードなどで整流する必要がある。今回は交流電圧をブリッジダイオードで全波整流したものをフォトカプラのアノード、カソード部に接続している。(下図参照)。入力の交流電圧が全波整流され、順方向電圧以下ではLEDが発光せずフォトトランジスタは不通となり、Vcc電圧がそのまま出力され、LEDが発光している状態ではフォトトランジスタは導通し、Vcc電圧は降下する。

"フォトカプラを用いたゼロクロス検出回路図"
フォトカプラを用いたゼロクロス検出回路図

3. ゼロクロス検出回路のシミュレーション

 以下上の回路図をTinkercad上でモデルにしたものを示す。Vccは直流電源で+4Vを供給する。交流電圧はファンクションジェネレータで発生させて50Hzの正弦波を振幅10V(±5V)を入力する。交流電圧を全波整流されたフォトカプラへの入力波形とフォトカプラの出力波形をオシロスコープでモニタできるようにしている。

"フォトカプラを用いたゼロクロス検出回路モデル"
フォトカプラを用いたゼロクロス検出モデル

ゼロクロス検出回路のシミュレーション実行例を下に示す。出力波形がピークの位置が0クロス(全波整流波形の0V付近)と考えられるが、波形がなまっていて0クロスの位置に不確かさがある。Tinkercadのファンクションジェネレータの設定上正弦波の場合±5Vまでしか印加できない関係で、LEDの一般的な順方向電圧2Vと比較して十分大きくないということが原因の一つと考えらえる。

"ゼロクロス検出回路のシミュレーション実行例"
ゼロクロス検出回路のシミュレーション実行例

4. まとめ

 今回はゼロクロス検出回路の別の方式として、今回はフォトカプラを用いたゼロクロス検出回路とTinkercadによるシミュレーションについて紹介した。

 

Texによる文書作成6 ~ 表の作成

 今回はLaTeX文書の作成方法として文中に表を作成する方法について紹介したい。

1. 表の作成方法

 文中に表を作成するにはtable環境内に\begin{tabular}~\end{tabular}としてセルの中身や罫線を設定していく。 4行4列の表を作成するにはbegin{tabular}{lcrc}などとする。{lcrc}は列数とセルごとに左寄せl,中央寄せc, 右寄せrを設定しており、1列目は左、2列目は中央、3列目は右、4列目は中央寄せに設定している。 セルの中身を記述し、&で列を区切り、\\で改行する。罫線を設定しない一番単純な表のLaTeXコマンドは以下のようになる。

\begin{table}[htb]
\centering
 \caption{スペック比較:罫線なし}
  \begin{tabular}{lcrc}
    機種 & ディスプレイ & 値段 & CPUコア \\
    iphone12 pro & 6.1" & 106,800円 & A14 Bionic \\
    iphone12 & 6.1" & 85,800円 & A14 Bionic \\
    iphone12 mini & 5.4" & 74,800円 & A14 Bionic
  \end{tabular}
\end{table}

なお[htb]は図の挿入と同様に表の挿入位置を指定し、\centeringは表をページ中央に配置、\captionは表のキャプションを指定している。 上のLaTeXコードを実行すると以下の表が得られる。

"罫線なしの表"
罫線なしの表

2. 表の罫線作成方法

 次に表に罫線を入れる方法について紹介する。縦の罫線については\begin{taular}{|l||c|r|c|}とすればよい。1本の罫線は|,2重罫線は||として指定する。 次に横の罫線は改行のコマンド\\の後に\hlineを入れる。2重罫線の場合は\hline \hlineとする。

\begin{table}[htb]
\centering
  \caption{スペック比較:罫線あり}
  \begin{tabular}{|l||c|r|c|}  \hline
    機種 & ディスプレイ & 値段 & CPUコア \\ \hline \hline
    iphone12 pro & 6.1" & 106,800円 & A14 Bionic \\ \hline
    iphone12 & 6.1" & 85,800円 & A14 Bionic \\ \hline
    iphone12 mini & 5.4" & 74,800円 & A14 Bionic \\ \hline
  \end{tabular}
\end{table}

上のLaTeXコードを実行すると以下の表が得られる。

"罫線ありの表"
罫線ありの表

2. セルの垂直結合

 次はセル同士を結合する方法について示す。ここでは罫線を引くか引かないかという形でセルを結合する。まず垂直方向にセルを結合するために罫線を引く場所を制御する。 そのために\hlineの代わりにcline{開始セル番号-終了セル番号}を用いると開始から終了までのセルに罫線が引かれて、それ以外は引かれない。また1セルだけ罫線を引く場合は開始と終了を同じセル番号のすればよい。 以下はCPUコアのA14 Bionicは共通なので4列目は罫線を引かない。(これだけだと各行に\cline{1-3}のみ記載すればよい)またディスプレイの6.1"は共通なので2行目の設定は1列目と3列目だけ罫線を引くために\cline{1-1} \cline{3-3}とする。全体的には以下のようなLaTeXコードになる。

\begin{table}[htb]
\centering
  \caption{スペック比較:セル垂直結合}
  \begin{tabular}{|l||c|r|c|}  \hline
    機種 & ディスプレイ & 値段 & CPUコア \\ \hline \hline
    iphone12 pro & 6.1" & 106,800円  &\\ \cline{1-1} \cline{3-3}
    iphone12 &  & 85,800円 & A14 Bionic \\ \cline{1-3} 
    iphone12 mini & 5.4" & 74,800円 & \\ \hline
  \end{tabular}
\end{table}

"セルの垂直結合"
セルの垂直結合

3. セルの水平結合

 今度はセルを水平方向に結合する方法を示す。水平方向に結合したセルを定義するには\multicolumn{結合数}{書式}{セルの中身}を使用する。書式は例えば|c|のように左・中央・右寄せの指定と罫線|を指定する。 以下の表はバージョンという列を増やして5列4行の表にして、3行目の1列目と2列目だけを水平結合したセルにするLaTeXコードを示す。

\begin{table}[htb]
\centering
  \caption{スペック比較:セル水平垂直結合}
  \begin{tabular}{|l|c|c|r|c|}  \hline
    機種 & バージョン &ディスプレイ & 値段 & CPUコア \\ \hline \hline
    iphone12 & pro & 6.1" & 106,800円  &\\ \cline{1-2} \cline{4-4}
     \multicolumn{2}{|c|}{iphone12} &   & 85,800円 & A14 Bionic \\ \cline{1-4}
    iphone12 & mini & 5.4" & 74,800円 & \\ \hline
  \end{tabular}
\end{table}

"セルの水平結合"
セルの水平結合

4. multirowパッケージの利用

 罫線の設定で垂直にセルを結合すると、ディスプレイ 6.1"が結合数が偶数だとどうしても上寄りか下寄りになってしまい見栄えが悪い。そこでmultirowパッケージを利用してmultirowコマンドを用いてセルを垂直に結合する。ちなみにmulticolumnはデフォルトで使えるコマンドなので特にパッケージの指定は必要ない。multirowコマンドを利用するにはまず、プリアンブル領域で\usepackage{multirow}とする。multirowmulticolumnとほぼ同様の使い勝手でmultirow{結合数}{書式}{セルの中身}という形で使用する。なお書式はコンパイラによる自動設定を利用した方がエラーになることが少なく{*}を指定する。 以下はディスプレイ6.1"のセルに対してmultirowコマンドでセルを垂直結合したLaTeXコードを示す。

\begin{table}[htb]
\centering
  \caption{スペック比較:セル水平垂直結合(multirow)}
  \begin{tabular}{|l|c|c|r|c|}  \hline
    機種 & バージョン &ディスプレイ & 値段 & CPUコア \\ \hline \hline
    iphone12 & pro & \multirow{2}{*}{6.1"} & 106,800円  &\\ \cline{1-2} \cline{4-4}
     \multicolumn{2}{|c|}{iphone12} &   & 85,800円 & A14 Bionic \\ \cline{1-4}
    iphone12 & mini & 5.4" & 74,800円 & \\ \hline
  \end{tabular}
\end{table}

ディスプレイの6.1"が縦方向中央に表示されており、2行の結合でもより自然に表示できている。

"multirowを利用したセル垂直結合"
multirowを利用したセル垂直結合

5. その他表の挿入方法

 上で紹介したようにセル数が少ない場合はよいが、セル数が増えてくるとLaTeXコードで記述しようとするとかなり面倒になる。さらにセルの結合が入ると何列目に罫線を引くとか、multirowやmulticolumnをどこに入れるかなど複雑になってくる。そこで1つの方法としてはエクセルなどで表を作成して、図としてLaTeX文書内に挿入するという手がある。ただしセル内を修正する場合、エクセルの修正→画像ファイルという手順を踏まないといけない。

他の方法としては、(個人的には利用していないが) ExcelからLaTeXコードに変換するツールがある。いろいろなツールがあるが、セル結合まで対応しているものとしてExcel2latexというものもある。

Excel2LaTeXの詳細情報 : Vector ソフトを探す!

6. まとめ

 今回はLaTeX上で表を作成する方法やセル結合の方法について紹介した。