draw_unit_cell プログラム仕様

単位格子を描画するスクリプト。

概要:

結晶学における単位格子を3Dで可視化する機能を提供します。

詳細説明:

任意の格子定数と角度から単位格子の形状を計算し、Matplotlibを使用して描画します。 基本ベクトル(a, b, c)の描画には、パースペクティブを考慮したカスタム3D矢印クラスを使用します。

関連リンク:

draw_unit_cell_usage

class crystal.draw_unit_cell.Arrow3D(xs, ys, zs, *args, **kwargs)

ベースクラス: FancyArrowPatch

概要:

Matplotlibの3Dプロットでカスタムの3D矢印を描画するためのクラス。

詳細説明:

FancyArrowPatch を継承し、3D空間内の座標を2Dスクリーン座標に変換して描画することで、 常に適切なパースペクティブで矢印が表示されるようにします。

do_3d_projection(renderer=None)
概要:

3Dプロジェクションを実行し、矢印の深度を計算します。

詳細説明:

3D座標を2Dスクリーン座標に変換し、Z軸方向の最小値(深度)を返すことで、 3Dビューにおけるオブジェクトの描画順序を適切に管理します。

引数:
param renderer:

Matplotlibのレンダラーオブジェクト(オプション)。

type renderer:

matplotlib.backend_bases.RendererBase

戻り値:
returns:

矢印のZ軸方向の最小値(深度)。

rtype:

numpy.float

draw(renderer)
概要:

矢印をレンダリングします。

詳細説明:

3D座標を2Dスクリーン座標に変換し、変換された座標を使用して矢印を描画します。

引数:
param renderer:

Matplotlibのレンダラーオブジェクト。

type renderer:

matplotlib.backend_bases.RendererBase

戻り値:
returns:

なし

rtype:

None

set(*, agg_filter=<UNSET>, alpha=<UNSET>, animated=<UNSET>, antialiased=<UNSET>, arrowstyle=<UNSET>, capstyle=<UNSET>, clip_box=<UNSET>, clip_on=<UNSET>, clip_path=<UNSET>, color=<UNSET>, connectionstyle=<UNSET>, edgecolor=<UNSET>, edgegapcolor=<UNSET>, facecolor=<UNSET>, fill=<UNSET>, gid=<UNSET>, hatch=<UNSET>, hatch_linewidth=<UNSET>, hatchcolor=<UNSET>, in_layout=<UNSET>, joinstyle=<UNSET>, label=<UNSET>, linestyle=<UNSET>, linewidth=<UNSET>, mouseover=<UNSET>, mutation_aspect=<UNSET>, mutation_scale=<UNSET>, patchA=<UNSET>, patchB=<UNSET>, path_effects=<UNSET>, picker=<UNSET>, positions=<UNSET>, rasterized=<UNSET>, sketch_params=<UNSET>, snap=<UNSET>, transform=<UNSET>, url=<UNSET>, visible=<UNSET>, zorder=<UNSET>)

Set multiple properties at once.

a.set(a=A, b=B, c=C)

is equivalent to

a.set_a(A)
a.set_b(B)
a.set_c(C)

In addition to the full property names, aliases are also supported, e.g. set(lw=2) is equivalent to set(linewidth=2), but it is an error to pass both simultaneously.

The order of the individual setter calls matches the order of parameters in set(). However, most properties do not depend on each other so that order is rarely relevant.

Supported properties are

Properties:

agg_filter: a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array and two offsets from the bottom left corner of the image alpha: float or None animated: bool antialiased or aa: bool or None arrowstyle: [ '-' | '<-' | '->' | '<->' | '<|-' | '-|>' | '<|-|>' | ']-' | '-[' | ']-[' | '|-|' | ']->' | '<-[' | 'simple' | 'fancy' | 'wedge' ] capstyle: .CapStyle or {'butt', 'projecting', 'round'} clip_box: ~matplotlib.transforms.BboxBase or None clip_on: bool clip_path: Patch or (Path, Transform) or None color: :mpltype:`color` connectionstyle: [ 'arc3' | 'angle3' | 'angle' | 'arc' | 'bar' ] edgecolor or ec: :mpltype:`color` or None edgegapcolor: :mpltype:`color` or None facecolor or fc: :mpltype:`color` or None figure: ~matplotlib.figure.Figure or ~matplotlib.figure.SubFigure fill: bool gid: str hatch: {'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'} hatch_linewidth: unknown hatchcolor: :mpltype:`color` or 'edge' or None in_layout: bool joinstyle: .JoinStyle or {'miter', 'round', 'bevel'} label: object linestyle or ls: {'-', '--', '-.', ':', '', ...} or (offset, on-off-seq) linewidth or lw: float or None mouseover: bool mutation_aspect: float mutation_scale: float patchA: .patches.Patch patchB: .patches.Patch path_effects: list of .AbstractPathEffect picker: None or bool or float or callable positions: unknown rasterized: bool sketch_params: (scale: float, length: float, randomness: float) snap: bool or None transform: ~matplotlib.transforms.Transform url: str visible: bool zorder: float

crystal.draw_unit_cell.draw_unit_cell_plot(a, b, c, alpha, beta, gamma, elev=5.9, azim=-67.55, fontsize=24, color='blue')
概要:

指定された格子定数と角度を持つ単位格子を3Dで描画します。

詳細説明:

lattice_vectors 関数を使用して基本格子ベクトルを計算し、それらから単位格子の8つの頂点を生成します。 その後、Matplotlibを用いて単位格子の辺、頂点、および基本格子ベクトルを3D空間に描画します。

引数:
param a:

格子定数aの長さ。

type a:

float

param b:

格子定数bの長さ。

type b:

float

param c:

格子定数cの長さ。

type c:

float

param alpha:

b軸とc軸の間の角度(度数)。

type alpha:

float

param beta:

a軸とc軸の間の角度(度数)。

type beta:

float

param gamma:

a軸とb軸の間の角度(度数)。

type gamma:

float

param elev:

3Dビューの仰角(度数)。デフォルトは5.90。

type elev:

float

param azim:

3Dビューの方位角(度数)。デフォルトは-67.55。

type azim:

float

param fontsize:

ラベルのフォントサイズ。デフォルトは24。

type fontsize:

int

param color:

ベクトルの色。デフォルトは 'blue'。

type color:

str

戻り値:
returns:

なし(グラフを表示し、PNGとして保存します)

rtype:

None

crystal.draw_unit_cell.draw_vector(ax, vec, color, label, fontsize)
概要:

3D空間にベクトルと対応するラベルを描画します。

詳細説明:

Arrow3D クラスを利用して、原点から指定されたベクトルまでの矢印を描画し、 ベクトルの先端にラベルを配置します。

引数:
param ax:

3DプロットのAxesオブジェクト。

type ax:

matplotlib.axes.Axes

param vec:

描画するベクトルの3D座標([x, y, z])。

type vec:

numpy.ndarray

param color:

矢印とラベルの色。

type color:

str

param label:

ベクトルに付けるラベル。

type label:

str

param fontsize:

ラベルのフォントサイズ。

type fontsize:

int

戻り値:
returns:

なし

rtype:

None

crystal.draw_unit_cell.lattice_vectors(a, b, c, alpha, beta, gamma)
概要:

格子定数と角度から基本格子ベクトルを計算します。

詳細説明:

結晶学で用いられる格子定数 (a, b, c) と軸間角 (alpha, beta, gamma) を用いて、 直交座標系における3つの基本格子ベクトル (va, vb, vc) を計算します。

引数:
param a:

格子定数aの長さ。

type a:

float

param b:

格子定数bの長さ。

type b:

float

param c:

格子定数cの長さ。

type c:

float

param alpha:

b軸とc軸の間の角度(度数)。

type alpha:

float

param beta:

a軸とc軸の間の角度(度数)。

type beta:

float

param gamma:

a軸とb軸の間の角度(度数)。

type gamma:

float

戻り値:
returns:

3つの基本格子ベクトル (va, vb, vc)。各ベクトルは [x, y, z] の形式の numpy.ndarray。

rtype:

tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]

crystal.draw_unit_cell.main()
概要:

メインの実行ルーチン。特定の格子定数で単位格子を描画します。

crystal.draw_unit_cell.set_equal_aspect(ax, points)
概要:

3Dプロットのアスペクト比を均等に設定し、描画範囲を調整します。

詳細説明:

描画される点の最大・最小座標に基づいて、X, Y, Z軸の表示範囲を同じにします。

引数:
param ax:

3DプロットのAxesオブジェクト。

type ax:

matplotlib.axes.Axes

param points:

描画される全ての点のNumpy配列。形状は (N, 3)。

type points:

numpy.ndarray

戻り値:
returns:

なし

rtype:

None