使用と設計座標表現法¶
3次元ベクトル空間中の点は、デカルト、球極、柱面など、異なる方法で表すことができる。これらは協調におけるデータの方式の基礎である. astropy.coordinates
表示,如し 概要 astropy.coordinates 概念 それがそうです。以下では,これらを単独で用いて異なる表現(内蔵されていない表現を含む)間で変換を行う方法と,簡単なベクトル演算をどのように行うかについて述べる.
内蔵表示クラスには、:
CartesianRepresentation
: Cartesian coordinatesx
,y
, andz
.SphericalRepresentation
:経度で表される球極座標 (lon
)、緯度 (lat
)と、距離があります (distance
)である。緯度は−90度から90度の範囲の値である。UnitSphericalRepresentation
:単位球体上の球極座標は、経度で表される (lon
)と緯度 (lat
)。PhysicsSphericalRepresentation
:球極座標は,傾きで表される (theta
)と方位角 (phi
)と半径r
それがそうです。傾きが0度から180度までSphericalRepresentation
vt.から.theta = 90 deg - lat
それがそうです。CylindricalRepresentation
円柱の極座標は円柱の半径で表されます (rho
)、方位角 (phi
)と高さ (z
)。
インスタンス化と変換¶
製図表現類使用インスタンス化 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