16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

量子コンピュータ #2Advent Calendar 2018

Day 11

TikZ超入門 もしもBloch球が描けたなら

Last updated at Posted at 2018-12-10

Introduction

昨今盛り上がりを見せる量子コンピューター。
最初に必ず出てくるのがブロッホ球(Bloch sphere)である。
解説は数あれど、描き方を解説した記事はないのではないか。

もしも、、、もしもBloch球が描けたなら、、、

Requirement

LaTeXについて少し知っておく必要があります。
Donald E. Knuthによって開発された組版システムTeXを拡張したもので、
様々な分野の論文を書くのに使用されます。
インストールや使用方法などは、別サイトをご参考にしてください。

TikZ

LaTeX用の描画パッケージで、高度な描画機能を有しています。

Hands-on

それでは始めましょう。

draw
example.tex
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{
  \draw(0,0)--(1,2);
}
\end{document}

プリアンブルに\usepackage{tikz}を書くことでTikZが使用できるようになります。
\tikz{}の中に具体的な描画命令を書いていきます。
ここでは\drawを使用しました。これを組版(typeset)すると、以下のような出力が得られます。

a.PNG

左下が(0,0)で右上が(1,2)になります。
(0,0)--(1,2);はこれらの座標間に線を引けという命令になっているんですね。
文の最後に;をつけるのを忘れないでください。
例えば代わりに(0,0)rectangle(1,2);とすると、長方形の出力が得られます。
また円を描画するcircleなんてのもあります。

option

LaTeXではお馴染みの書式を用いてオプションを設定することができます。
例えば\draw[->]とすると、矢印が描画されます。

coordinate

この命令を使用すると、座標を設定することができます。
\coordinate(origin)at(0,0);は点(0,0)にoriginという座標を設定します。
一度設定した座標は以降、(label)の形で使用することができます。

A second shot

ここまでの知識を用いて、3次元の座標軸とBloch球を描いてみます。

second_shot.tex
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{
  \coordinate(o)at(0,0);
  \draw(o)circle(2cm);
  \draw[->](o)--(-0.81,-0.79);%x
  \draw[->](o)--(2,0);%y
  \draw[->](o)--(0,2);%z
}
\end{document}

出力は以下のようになります。

Screen Shot 2018-12-07 at 08.19.46.png

だいぶそれらしくなりましたね。

node

node{} を用いることで、描画を行いながら要素を追加していくことができます。
またnode(label)の形でラベルを設定することもできます。

node.tex
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\tikz{
  \coordinate(o)at(0,0);
  \draw[->](o)--(1,1)node(tikz)[right]{TikZ};
  \draw[->](tikz)--(2,0);
}
\end{document}

組版結果
Screen Shot 2018-12-07 at 08.55.05.png

この例ではTikZというノードを追加すると同時に、tikzというラベルを
設定しています。またオプションにrightを設定することで、矢印の右にノードを追加しています。

tikzstyle

同じオプションを何度も使用する場合に、エイリアスを設定することができます。
\tikzstyle{style_name}=[option1,option2]
このように書くと、style_name-> などと同様に使用することができます。

The Final edition

さて、ここまでで最低限の知識は獲得できました。
もうあなたには次のコードを読み解くことができるはずです。

final_edition.tex
\documentclass{standalone}
\usepackage{tikz,braket}
\begin{document}
\tikz{
  \tikzstyle{st}=[lightgray, fill, fill opacity=0.1]
  \coordinate(o)at(0,0);
  \draw(o)circle(2cm);
  \draw[fill](o)circle(1.5pt);%origin
  \draw[st](o)--(56.7:0.4)arc(56.7:90.:0.4)--cycle;%theta angle
  \draw(0.18,0.6)node{$\theta$};
  \draw[st](o)--(-135.7:0.4)arc(-135.7:-33.2:0.4)--cycle;%varphi angle
  \draw(0.14,-0.58)node{$\varphi$};
  \draw[->](o)--(-0.81,-0.79) node[above left]{$x$};%x
  \draw[->](o)--(2,0)node[right]{$y$};%y
  \draw[->](o)--(0,2)node[below right]{$z$}node[above]{$\ket{0}$};%z |0>
  \draw[rotate around={0.:(0.,0.)},dashed](0,0)ellipse(2cm and 0.9cm);%ellipse
  \draw[thick,->](o)--(0.70,1.07)node[above]{$\ket{\psi}$};%state vector
  \draw[densely dotted,->](o)--(0,-2)node[below]{$\ket{1}$};%-z |1>
  \draw[dotted](o)--(0.7,-0.46)--(0.7,1);%triangle
}
\end{document}

いざ、Typeset、、、





Screen Shot 2018-12-07 at 09.05.41.png

!!?

これでいつでも論文がかけますね🍺

Further reading

本記事では導入しませんでしたが、描画位置を変えないedgeというものがあります。
また他にも紹介していない様々な技法があり、それらを駆使すると以下の程度までは記述量を減らすことができるでしょう。

final.tex
\documentclass{standalone}
\usepackage{tikz,braket}
\begin{document}
\tikz{
\tikzset{p/.style={pos=1}}
  \draw[lightgray, fill, fill opacity=0.1]
    (0,0)--(-135.7:0.4)arc(-135.7:-33.2:0.4)--cycle--(56.7:0.4)arc(56.7:90.:0.4)--cycle;
  \draw[rotate around={0.:(0.,0.)},dashed](0,0)ellipse(2cm and 0.9cm);
  \draw[dotted](0,0)--(0.7,-0.46)--(0.7,1);
  \draw (0,0)
    circle(2cm)
    node[circle,fill,scale=.4]{}
    edge[->]node[p,above left]{$x$}(-0.81,-0.79)
    edge[->]node[p,right]{$y$}(right:2)
    edge[->]node[p,below right]{$z$}node[p,above]{$\ket{0}$}(up:2)
    edge[densely dotted,->]node[p,below]{$\ket{1}$}(down:2)
    edge[thick,->]node[p,above]{$\ket{\psi}$}(0.70,1.07)
    (0.14,-0.58)node{$\varphi$}(0.18,0.6)node{$\theta$};
}
\end{document}

Appendix

TikZにはsyntactic sugarと言いますか、むしろ混乱の元な気がするのですが、省略形があることを付言しておきます。

  • \draw\path[draw]の省略形
  • \draw nodeは単に\nodeとできる

Bibliography

how-to-draw-a-bloch-sphere
TikZの概念

16
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?