使用と設計座標表現法

3次元ベクトル空間中の点は、デカルト、球極、柱面など、異なる方法で表すことができる。これらは協調におけるデータの方式の基礎である. astropy.coordinates 表示,如し 概要 astropy.coordinates 概念 それがそうです。以下では,これらを単独で用いて異なる表現(内蔵されていない表現を含む)間で変換を行う方法と,簡単なベクトル演算をどのように行うかについて述べる.

内蔵表示クラスには、:

注釈

使用と変更について SkyCoord オブジェクト、参照してください 表示法 一節です。

インスタンス化と変換

製図表現類使用インスタンス化 Quantity 対象::

>>> from astropy import units as u
>>> from astropy.coordinates.representation import CartesianRepresentation
>>> car = CartesianRepresentation(3 * u.kpc, 5 * u.kpc, 4 * u.kpc)
>>> car  
<CartesianRepresentation (x, y, z) in kpc
    (3., 5., 4.)>

Array Quantity objects can also be passed to representations. They will have the expected shape, which can be changed using methods with the same names as those for ndarray, such as reshape, ravel, etc.:

>>> x = u.Quantity([[1., 0., 0.], [3., 5., 3.]], u.m)
>>> y = u.Quantity([[0., 2., 0.], [4., 0., -4.]], u.m)
>>> z = u.Quantity([[0., 0., 3.], [0., 12., -12.]], u.m)
>>> car_array = CartesianRepresentation(x, y, z)
>>> car_array  
<CartesianRepresentation (x, y, z) in m
    [[(1.,  0.,   0.), (0.,  2.,   0.), (0.,  0.,   3.)],
     [(3.,  4.,   0.), (5.,  0.,  12.), (3., -4., -12.)]]>
>>> car_array.shape
(2, 3)
>>> car_array.ravel()  
<CartesianRepresentation (x, y, z) in m
    [(1.,  0.,   0.), (0.,  2.,   0.), (0.,  0.,   3.), (3.,  4.,   0.),
     (5.,  0.,  12.), (3., -4., -12.)]>

属性製図表現を他の製図表現に変換する represent_as 方法:

>>> from astropy.coordinates.representation import SphericalRepresentation, CylindricalRepresentation
>>> sph = car.represent_as(SphericalRepresentation)
>>> sph  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (1.03037683, 0.60126422, 7.07106781)>
>>> cyl = car.represent_as(CylindricalRepresentation)
>>> cyl  
<CylindricalRepresentation (rho, phi, z) in (kpc, rad, kpc)
    (5.83095189, 1.03037683, 4.)>

すべての表現は情報を失わずに相互に変換することができるが, UnitSphericalRepresentation それがそうです。このような点を格納するための経度および緯度は、点までの距離は含まれていないが、単位および無次元球体上にあると仮定する:

>>> from astropy.coordinates.representation import UnitSphericalRepresentation
>>> sph_unit = car.represent_as(UnitSphericalRepresentation)
>>> sph_unit  
<UnitSphericalRepresentation (lon, lat) in rad
    (1.03037683, 0.60126422)>

デカルトに変換すると、絶対ズーム情報は削除され、点はまだ単位球体上にあります。

>>> sph_unit = car.represent_as(UnitSphericalRepresentation)
>>> sph_unit.represent_as(CartesianRepresentation)  
<CartesianRepresentation (x, y, z) [dimensionless]
    (0.42426407, 0.70710678, 0.56568542)>

配列値はNumPy配列手法と類似している

配列. Quantity オブジェクトを表現に渡すこともでき,利用可能な方法と同様の方法でこれらの表現をスライス,整形などすることができる. ndarray それがそうです。同様に、On numpy バージョン1.17以降、対応する機能、および形状に影響を与える他の機能、例えば atleast_1d そして rollaxis 期待通りに仕事をします。

例を引く

配列を転送するには、以下の操作を実行してください Quantity 対象から表示法:

>>> import numpy as np
>>> x = np.linspace(0., 5., 6)
>>> y = np.linspace(10., 15., 6)
>>> z = np.linspace(20., 25., 6)
>>> car_array = CartesianRepresentation(x * u.m, y * u.m, z * u.m)
>>> car_array
<CartesianRepresentation (x, y, z) in m
    [(0., 10., 20.), (1., 11., 21.), (2., 12., 22.),
     (3., 13., 23.), (4., 14., 24.), (5., 15., 25.)]>

使用方法と numpy 機能:

.. doctest-requires:: numpy>=1.17
>>> car_array.reshape(3, 2)
<CartesianRepresentation (x, y, z) in m
    [[(0., 10., 20.), (1., 11., 21.)],
     [(2., 12., 22.), (3., 13., 23.)],
     [(4., 14., 24.), (5., 15., 25.)]]>
>>> car_array[2]
<CartesianRepresentation (x, y, z) in m
    (2., 12., 22.)>
>>> car_array[2] = car_array[1]
>>> car_array[:3]
<CartesianRepresentation (x, y, z) in m
    [(0., 10., 20.), (1., 11., 21.), (1., 11., 21.)]>
>>> np.roll(car_array, 1)
<CartesianRepresentation (x, y, z) in m
    [(5., 15., 25.), (0., 10., 20.), (1., 11., 21.), (1., 11., 21.),
     (3., 13., 23.), (4., 14., 24.)]>

また、単位およびサイズ数が互換性がある限り、他の表現クラス設定要素を使用する。

>>> car_array[2] = SphericalRepresentation(0*u.deg, 0*u.deg, 99*u.m)
>>> car_array[:3]  
<CartesianRepresentation (x, y, z) in m
    [(0., 10., 20.), (1., 11., 21.), (99., 0., 0.)]>
>>> car_array[0] = UnitSphericalRepresentation(0*u.deg, 0*u.deg)
Traceback (most recent call last):
...
ValueError: value must be representable as CartesianRepresentation without loss of information.

ベクトル演算.

表現法は,ノルム,乗算量,とり点積と叉積,および表現法の加算,減算,和,平均値,および行列に乗算するなどの基本的なベクトル演算をサポートする.

注釈

行列乗算以外のすべての算術は非デカルト表現法にも適用可能である.ノルム,乗算,除算については,これは非角度成分のみを用い,他の演算では,演算が完了する前に内部で表現をデカルトに変換し,結果を元の表現に変換する.したがって,最適な速度を得るためには,デカルト表現法を用いることが望ましい.

実例.

ベクトル算術演算が表示対象をどのように処理するかを知るためには、以下の例を考える。

>>> car_array = CartesianRepresentation([[1., 0., 0.], [3., 5.,  3.]] * u.m,
...                                     [[0., 2., 0.], [4., 0., -4.]] * u.m,
...                                     [[0., 0., 3.], [0.,12.,-12.]] * u.m)
>>> car_array  
<CartesianRepresentation (x, y, z) in m
    [[(1.,  0.,  0.), (0.,  2.,   0.), (0.,  0.,   3.)],
     [(3.,  4.,  0.), (5.,  0.,  12.), (3., -4., -12.)]]>
>>> car_array.norm()  
<Quantity [[ 1.,  2.,  3.],
           [ 5., 13., 13.]] m>
>>> car_array / car_array.norm()  
<CartesianRepresentation (x, y, z) [dimensionless]
    [[(1.        ,  0.        ,  0.        ),
      (0.        ,  1.        ,  0.        ),
      (0.        ,  0.        ,  1.        )],
     [(0.6       ,  0.8       ,  0.        ),
      (0.38461538,  0.        ,  0.92307692),
      (0.23076923, -0.30769231, -0.92307692)]]>
>>> (car_array[1] - car_array[0]) / (10. * u.s)  
<CartesianRepresentation (x, y, z) in m / s
    [(0.2,  0.4,  0. ), (0.5, -0.2,  1.2), (0.3, -0.4, -1.5)]>
>>> car_array.sum()  
<CartesianRepresentation (x, y, z) in m
    (12.,  2.,  3.)>
>>> car_array.mean(axis=0)  
<CartesianRepresentation (x, y, z) in m
    [(2. ,  2.,  0. ), (2.5,  1.,  6. ), (1.5, -2., -4.5)]>

>>> unit_x = UnitSphericalRepresentation(0.*u.deg, 0.*u.deg)
>>> unit_y = UnitSphericalRepresentation(90.*u.deg, 0.*u.deg)
>>> unit_z = UnitSphericalRepresentation(0.*u.deg, 90.*u.deg)
>>> car_array.dot(unit_x)  
<Quantity [[1., 0., 0.],
           [3., 5., 3.]] m>
>>> car_array.dot(unit_y)  
<Quantity [[ 6.12323400e-17,  2.00000000e+00,  0.00000000e+00],
           [ 4.00000000e+00,  3.06161700e-16, -4.00000000e+00]] m>
>>> car_array.dot(unit_z)  
<Quantity [[ 6.12323400e-17,  0.00000000e+00,  3.00000000e+00],
           [ 1.83697020e-16,  1.20000000e+01, -1.20000000e+01]] m>
>>> car_array.cross(unit_x)  
<CartesianRepresentation (x, y, z) in m
    [[(0.,  0.,  0.), (0.,   0., -2.), (0.,   3.,  0.)],
     [(0.,  0., -4.), (0.,  12.,  0.), (0., -12.,  4.)]]>

>>> from astropy.coordinates.matrix_utilities import rotation_matrix
>>> rotation = rotation_matrix(90 * u.deg, axis='z')
>>> rotation  
array([[ 6.12323400e-17,  1.00000000e+00,  0.00000000e+00],
       [-1.00000000e+00,  6.12323400e-17,  0.00000000e+00],
       [ 0.00000000e+00,  0.00000000e+00,  1.00000000e+00]])
>>> car_array.transform(rotation)  
<CartesianRepresentation (x, y, z) in m
    [[( 6.12323400e-17, -1.00000000e+00,   0.),
      ( 2.00000000e+00,  1.22464680e-16,   0.),
      ( 0.00000000e+00,  0.00000000e+00,   3.)],
     [( 4.00000000e+00, -3.00000000e+00,   0.),
      ( 3.06161700e-16, -5.00000000e+00,  12.),
      (-4.00000000e+00, -3.00000000e+00, -12.)]]>

表現法の微分と導関数

3 D空間内の位置に加えて、座標は、自己および半径方向速度を処理し、これは、微分係数の座標微分(すなわち、限られた実装)を表す方法を必要とする。これを支持するためには,すべての表示に応じたものがある Differential クラス、これらのクラスは、クラスを表すコンポーネントに従ってオフセットまたは微分係数を保持することができる。このようなずれ量を表示法に加えることは、ずれ量が対応する座標の方向に行われることを意味する。(デカルト以外のいずれの表現についても、単位ベクトルは不変ではないので、これは特定の位置に対して定義されているだけである。)

実例.

この映画がどうなっているか見てみましょう Differential 代表作品のジャンルは、以下の事項を考慮してください。

>>> from astropy.coordinates import SphericalRepresentation, SphericalDifferential
>>> sph_coo = SphericalRepresentation(lon=0.*u.deg, lat=0.*u.deg,
...                                   distance=1.*u.kpc)
>>> sph_derivative = SphericalDifferential(d_lon=1.*u.arcsec/u.yr,
...                                        d_lat=0.*u.arcsec/u.yr,
...                                        d_distance=0.*u.km/u.s)
>>> sph_derivative.to_cartesian(base=sph_coo)  
<CartesianRepresentation (x, y, z) in arcsec kpc / (rad yr)
    (0., 1., 0.)>

デカルト座標への変換はご利用いただけますのでご注意ください base そうでなければコードは経度の増加がどの方向に対応するかを知ることができないからである.上の lon=0 これは y 方向です。これから2つの時間で座標を取得します

>>> sph_coo + sph_derivative * [1., 3600*180/np.pi] * u.yr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    [(4.84813681e-06, 0., 1.        ), (7.85398163e-01, 0., 1.41421356)]>

加算は経度そのものではなく、経度を増やす方向であることが示されています:大きな移動に対しては、一弧度に相当して距離も増加しています(結局、源は空の曲線に沿って移動しない可能性が高い!)これは操作手順が重要であることを意味する:

>>> big_offset = SphericalDifferential(1.*u.radian, 0.*u.radian, 0.*u.kpc)
>>> sph_coo + big_offset + big_offset  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (1.57079633, 0., 2.)>
>>> sph_coo + (big_offset + big_offset)  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (1.10714872, 0., 2.23606798)>

通常、自然運動または半径方向速度は1つしかないかもしれませんが、同時に2つはできません。

>>> from astropy.coordinates import UnitSphericalDifferential, RadialDifferential
>>> radvel = RadialDifferential(1000*u.km/u.s)
>>> sph_coo + radvel * 1. * u.Myr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (0., 0., 2.02271217)>
>>> pm = UnitSphericalDifferential(1.*u.mas/u.yr, 0.*u.mas/u.yr)
>>> sph_coo + pm * 1. * u.Myr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (0.0048481, 0., 1.00001175)>
>>> pm + radvel  
<SphericalDifferential (d_lon, d_lat, d_distance) in (mas / yr, mas / yr, km / s)
    (1., 0., 1000.)>
>>> sph_coo + (pm + radvel) * 1. * u.Myr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (0.00239684, 0., 2.02271798)>

なお、上記では、自然運動は経度変化として厳密に定義されている(すなわち、含まれていない cos(latitude) 用語)。この用語が含まれている特別な授業があります

>>> from astropy.coordinates import UnitSphericalCosLatDifferential
>>> sph_lat60 = SphericalRepresentation(lon=0.*u.deg, lat=60.*u.deg,
...                                     distance=1.*u.kpc)
>>> pm = UnitSphericalDifferential(1.*u.mas/u.yr, 0.*u.mas/u.yr)
>>> pm  
<UnitSphericalDifferential (d_lon, d_lat) in mas / yr
    (1., 0.)>
>>> pm_coslat = UnitSphericalCosLatDifferential(1.*u.mas/u.yr, 0.*u.mas/u.yr)
>>> pm_coslat  
<UnitSphericalCosLatDifferential (d_lon_coslat, d_lat) in mas / yr
    (1., 0.)>
>>> sph_lat60 + pm * 1. * u.Myr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (0.0048481, 1.04719246, 1.00000294)>
>>> sph_lat60 + pm_coslat * 1. * u.Myr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (0.00969597, 1.0471772, 1.00001175)>

慎重な検査は、このような変化が予想された通りだということを見せてくれる。持っているシステムと持っていないシステム cos(latitude) 相互変換できます。ご提供いただければ base (申立):

>>> usph_lat60 = sph_lat60.represent_as(UnitSphericalRepresentation)
>>> pm_coslat2 = pm.represent_as(UnitSphericalCosLatDifferential,
...                              base=usph_lat60)
>>> pm_coslat2  
<UnitSphericalCosLatDifferential (d_lon_coslat, d_lat) in mas / yr
    (0.5, 0.)>
>>> sph_lat60 + pm_coslat2 * 1. * u.Myr  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, kpc)
    (0.0048481, 1.04719246, 1.00000294)>

注釈

現在、差分分類は、通常、一次微分係数に用いられるが、これらは、入力された単位を検査してこれを強制的に実行しない。入力二階微分(たとえば,加速度単位付き加速値)は成功するが,微分を再表示することによるどの変換も必ずしも正しいとは限らない.

付着する. Differential 追加するオブジェクト Representation 客体.

警告

この機能のAPIは将来のバージョンで変更される可能性があり、一時的なバージョンとみなされるべきです!

Differential オブジェクトを付加することができます Representation オブジェクトは,関連情報を単一のオブジェクトにカプセル化する1つの方式とする. Differential オブジェクトはどんな内蔵にも渡すことができます Representation 授業を受けます。

例を引く

位置を持つ単一の速度差を格納するには、以下の操作を実行してください。

>>> from astropy.coordinates import representation as r
>>> dif = r.SphericalDifferential(d_lon=1 * u.mas/u.yr,
...                               d_lat=2 * u.mas/u.yr,
...                               d_distance=3 * u.km/u.s)
>>> rep = r.SphericalRepresentation(lon=0.*u.deg, lat=0.*u.deg,
...                                 distance=1.*u.kpc,
...                                 differentials=dif)
>>> rep  
<SphericalRepresentation (lon, lat, distance) in (deg, deg, kpc)
    (0., 0., 1.)
 (has differentials w.r.t.: 's')>
>>> rep.differentials  
{'s': <SphericalDifferential (d_lon, d_lat, d_distance) in (mas / yr, mas / yr, km / s)
     (1., 2., 3.)>}

♪the Differential オブジェクトはPython辞書として格納されています Representation オブジェクトは,その鍵は微分を求める(文字列)単位(SIに変換)に等しい.

この場合、鍵は 's' (二)なぜなら Differential 単位は速度であり,時間の導関数である.個々の違いを Representation 初期値設定項は、必要なキーを自動生成して差分辞書に格納するが、辞書を用いて複数の差分を指定する必要がある:

>>> dif2 = r.SphericalDifferential(d_lon=4 * u.mas/u.yr**2,
...                                d_lat=5 * u.mas/u.yr**2,
...                                d_distance=6 * u.km/u.s**2)
>>> rep = r.SphericalRepresentation(lon=0.*u.deg, lat=0.*u.deg,
...                                 distance=1.*u.kpc,
...                                 differentials={'s': dif, 's2': dif2})
>>> rep.differentials['s']  
<SphericalDifferential (d_lon, d_lat, d_distance) in (mas / yr, mas / yr, km / s)
    (1., 2., 3.)>
>>> rep.differentials['s2']  
<SphericalDifferential (d_lon, d_lat, d_distance) in (mas / yr2, mas / yr2, km / s2)
    (4., 5., 6.)>

Differential オブジェクトは付加することもできます Representation 作成後:

>>> rep = r.CartesianRepresentation(x=1 * u.kpc, y=2 * u.kpc, z=3 * u.kpc)
>>> dif = r.CartesianDifferential(*[1, 2, 3] * u.km/u.s)
>>> rep = rep.with_differentials(dif)
>>> rep  
<CartesianRepresentation (x, y, z) in kpc
    (1., 2., 3.)
 (has differentials w.r.t.: 's')>

これは配列データにも適用できます Differential データと Representation **

>>> xyz = np.arange(12).reshape(3, 4) * u.au
>>> d_xyz = np.arange(12).reshape(3, 4) * u.km/u.s
>>> rep = r.CartesianRepresentation(*xyz)
>>> dif = r.CartesianDifferential(*d_xyz)
>>> rep = rep.with_differentials(dif)
>>> rep  
<CartesianRepresentation (x, y, z) in AU
    [(0., 4.,  8.), (1., 5.,  9.), (2., 6., 10.), (3., 7., 11.)]
 (has differentials w.r.t.: 's')>

まるで1つのように Representation 例は,位置データを新たな表示形式に変換するためには,使用してください .represent_as() **

>>> rep.represent_as(r.SphericalRepresentation)  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, AU)
    [(1.57079633, 1.10714872,  8.94427191),
     (1.37340077, 1.05532979, 10.34408043),
     (1.24904577, 1.00685369, 11.83215957),
     (1.16590454, 0.96522779, 13.37908816)]>

しかし,伝達に必要な表示クラスのみでは, Representation 変化し、差は捨てられた。この2つを再表示します Representation そしてどんなものでも Differential 対象は必ず Differential そして:

>>> rep2 = rep.represent_as(r.SphericalRepresentation, r.SphericalDifferential)
>>> rep2  
<SphericalRepresentation (lon, lat, distance) in (rad, rad, AU)
  [(1.57079633, 1.10714872,  8.94427191),
   (1.37340077, 1.05532979, 10.34408043),
   (1.24904577, 1.00685369, 11.83215957),
   (1.16590454, 0.96522779, 13.37908816)]
 (has differentials w.r.t.: 's')>
>>> rep2.differentials['s']  
<SphericalDifferential (d_lon, d_lat, d_distance) in (km rad / (AU s), km rad / (AU s), km / s)
    [( 6.12323400e-17, 1.11022302e-16,  8.94427191),
     (-2.77555756e-17, 5.55111512e-17, 10.34408043),
     ( 0.00000000e+00, 0.00000000e+00, 11.83215957),
     ( 5.55111512e-17, 0.00000000e+00, 13.37908816)]>

形状変更操作(例えば、再構築)はすべてに伝播される Differential オブジェクトは,それらの宿主と同じ形状を持つことが保証されるからである. Representation 対象::

>>> rep.shape
(4,)
>>> rep.differentials['s'].shape
(4,)
>>> new_rep = rep.reshape(2, 2)
>>> new_rep.shape
(2, 2)
>>> new_rep.differentials['s'].shape
(2, 2)

これはスライスにも適用されます

>>> new_rep = rep[:2]
>>> new_rep.shape
(2,)
>>> new_rep.differentials['s'].shape
(2,)

戻りの表示に対する操作 Quantity オブジェクト(他のオブジェクトとの相対) Representation インスタンス)は依然として有効であるが、例えば、位置情報のみが動作する。

>>> rep.norm()  
<Quantity [ 8.94427191, 10.34408043, 11.83215957, 13.37908816] AU>

差分を含む表現またはオブジェクト対を表す動作の組み合わせまたはスケーリングに関する動作は、現在失敗するが、将来のバージョンでは、いくつかの動作のサポートが追加される可能性がある:

>>> rep + rep
Traceback (most recent call last):
...
TypeError: Operation 'add' is not supported when differentials are attached to a CartesianRepresentation.

もしあなたが1つ持っていたら Representation 添付ファイルに添付する Differential 対象は,検索可能である Representation もしなければ Differential オブジェクト、そしてこれを使用します Differential -任意の算術演算の自由オブジェクト::

>>> 15 * rep.without_differentials()  
<CartesianRepresentation (x, y, z) in AU
    [( 0.,  60., 120.), (15.,  75., 135.), (30.,  90., 150.),
     (45., 105., 165.)]>

ご自分のグラフィックス表現を作成します

自分の表示クラスを作成するためには、クラスを継承しなければなりません BaseRepresentation class. This base has an _ すべてのパラメータコンポーネントをその初期値設定項に入れ、相互にブロードキャストできるかどうかを検証し、コンポーネントを格納する_init___゚`方法。 ``self ‘_’を接頭辞とする名前.さらに、コンポーネントのデフォルト属性は、使用可能なように、そのメタクラスを介して提供される。 <instance>.<component> それがそうです。機械を正常に動作させるためには,以下の項目を定義しなければならない.

  • attr_classes 類属性. (OrderedDict ):

    コンポーネントの名前(およびデフォルト順序)をその鍵で定義し,その値からインスタンスとすべきクラス(そうすべき)を定義する. Quantity サブクラスであっても,それを初期化することができるものであってもよい).

  • from_cartesian クラス方法:

    1つ必要です CartesianRepresentation オブジェクトは,クラスのインスタンスを返す.

  • to_cartesian 方法:

    1つに戻る CartesianRepresentation 物体です。

  • __init__ 方法(オプション):

    必要なのは,グラフィックス表現クラスが提供する基本的な初期化や検査だけでなく,明示的な署名のみであれば,自分の署名を定義することができる. __init__ それがそうです。一般に,提案は基本的に仮定した署名と一致する. __init__(self, comp1, comp2, comp3, copy=True) 使用しています super 初期値を表す設定項を基本的に呼び出すには,以下の操作を実行してください.

一度そうすれば、自動的に呼び出すことができます represent_as 他の表示とあなたの表示クラスを相互に変換するためには、以下の操作を実行してください。製図表現にもご利用いただけます SkyCoord すべてのフレームワーククラスです

表示クラスはまた持つことができる _unit_representation 属性(必要ではないにもかかわらず).この属性は適切な“単位”表現(すなわち,無量綱の表示)を指す.これは正しいかもしれない SphericalRepresentation その中でサブクラスになると仮定する. UnitSphericalRepresentation それがそうです。

最後に、座標系でオフセットを使用したい場合には、他の2つの方法を定義する必要があります(参照 SphericalRepresentation 例えば):

  • unit_vectors 方法:

    1つに戻る dict 1つを使う CartesianRepresentation 各成分方向の単位ベクトル。

  • scale_factors 方法:

    1つに戻る dict 1つを使う Quantity 単位は、適切な物理スケーリング係数を有する各コンポーネントについて、その方向に変更される。

さらにあなたは Differential クラスベース. BaseDifferential それがそうです。このクラスは定義する必要があります

  • base_representation 属性:

    この差異に代表される表示のリンクに戻る.

擬似コードにおいて、これは、クラスが以下のようになることを意味する。

class MyRepresentation(BaseRepresentation):

    attr_classes = OrderedDict([('comp1', ComponentClass1),
                                 ('comp2', ComponentClass2),
                                 ('comp3', ComponentClass3)])

    # __init__ is optional
    def __init__(self, comp1, comp2, comp3, copy=True):
        super().__init__(comp1, comp2, comp3, copy=copy)
        ...

    @classmethod
    def from_cartesian(self, cartesian):
        ...
        return MyRepresentation(...)

    def to_cartesian(self):
        ...
        return CartesianRepresentation(...)

    # if differential motion is needed
    def unit_vectors(self):
        ...
        return {'comp1': CartesianRepresentation(...),
                'comp2': CartesianRepresentation(...),
                'comp3': CartesianRepresentation(...)}

    def scale_factors(self):
        ...
        return {'comp1': ...,
                'comp2': ...,
                'comp3': ...}

class MyDifferential(BaseDifferential):
    base_representation = MyRepresentation