public class Transform extends Object implements TimeShiftable<Transform>, Serializable, StaticTransform
此类表示frames
之间的变换引擎。它用于定义每个参考系及其父参考系之间的关系,并在远离彼此的参考系之间转换时将所有单独的变换汇总为一个操作。
OREKIT中使用的约定是矢量变换。这意味着变换被定义为应用于在旧参考系中表示的矢量的坐标以获得在新参考系中表示的相同矢量。
此类的实例保证是不可变的。
我们希望将PVCoordinates
PVA转换为PVB:
PVA = ({1, 0, 0}, {2, 0, 0}, {3, 0, 0});
PVB = ({0, 0, 0}, {0, 0, 0}, {0, 0, 0});
然后定义要应用的变换如下:
Vector3D translation = new Vector3D(-1, 0, 0);
Vector3D velocity = new Vector3D(-2, 0, 0);
Vector3D acceleration = new Vector3D(-3, 0, 0);
Transform R1toR2 = new Transform(date, translation, velocity, acceleration);
PVB = R1toR2.transformPVCoordinates(PVA);
我们希望将PVCoordinates
PVA转换为PVB:
PVA = ({1, 0, 0}, { 1, 0, 0});
PVB = ({0, 1, 0}, {-2, 1, 0});
然后定义要应用的变换如下:
Rotation rotation = new Rotation(Vector3D.PLUS_K, FastMath.PI / 2);
Vector3D rotationRate = new Vector3D(0, 0, -2);
Transform R1toR2 = new Transform(rotation, rotationRate);
PVB = R1toR2.transformPVCoordinates(PVA);
Constructor and Description |
---|
Transform(AbsoluteDate date, AngularCoordinates angular)
构建旋转变换。
|
Transform(AbsoluteDate date, PVCoordinates cartesian)
构建带有第一个时间导数的平移变换。
|
Transform(AbsoluteDate date, PVCoordinates cartesian, AngularCoordinates angular)
从其原始操作构建变换。
|
Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Rotation rotation)
构建旋转变换。
|
Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Rotation rotation, org.hipparchus.geometry.euclidean.threed.Vector3D rotationRate)
构建旋转变换。
|
Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Rotation rotation, org.hipparchus.geometry.euclidean.threed.Vector3D rotationRate, org.hipparchus.geometry.euclidean.threed.Vector3D rotationAcceleration)
构建旋转变换。
|
Transform(AbsoluteDate date, Transform first, Transform second)
通过组合两个现有变换构建变换。
|
Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D translation)
构建平移变换。
|
Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D translation, org.hipparchus.geometry.euclidean.threed.Vector3D velocity)
构建带有第一个时间导数的平移变换。
|
Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D translation, org.hipparchus.geometry.euclidean.threed.Vector3D velocity, org.hipparchus.geometry.euclidean.threed.Vector3D acceleration)
构建带有第一个和第二个时间导数的平移变换。
|
Modifier and Type | Method and Description |
---|---|
Transform |
freeze()
获取冻结的变换。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getAcceleration()
获取平移的第二个时间导数。
|
AngularCoordinates |
getAngular()
获取基本角部分。
|
PVCoordinates |
getCartesian()
获取基本笛卡尔部分。
|
AbsoluteDate |
getDate()
获取日期。
|
Transform |
getInverse()
获取实例的逆变换。
|
void |
getJacobian(CartesianDerivativesFilter selector, double[][] jacobian)
计算变换的 transformPVCoordinates(PVCoordinates) 方法的雅可比矩阵。
|
org.hipparchus.geometry.euclidean.threed.Rotation |
getRotation()
获取基本旋转部分。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getRotationAcceleration()
获取旋转的第二个时间导数。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getRotationRate()
获取旋转的第一个时间导数。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getTranslation()
获取基本平移部分。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getVelocity()
获取平移的第一个时间导数。
|
static Transform |
interpolate(AbsoluteDate date, CartesianDerivativesFilter cFilter, AngularDerivativesFilter aFilter, Collection<Transform> sample)
从现有变换的样本集插值变换。
|
Transform |
interpolate(AbsoluteDate interpolationDate, Stream<Transform> sample)
从现有变换的样本集插值变换。
|
Transform |
shiftedBy(double dt)
获取时间偏移的实例。
|
StaticTransform |
staticShiftedBy(double dt)
考虑所有速率对变换进行时间偏移,然后仅返回变换的平移和旋转部分。
|
StaticTransform |
toStaticTransform()
从实例创建所谓的静态变换。
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
transformPVCoordinates(FieldPVCoordinates<T> pv)
包括运动效应的 FieldPVCoordinates 变换。
|
PVCoordinates |
transformPVCoordinates(PVCoordinates pva)
包括运动效应的 PVCoordinates 变换。
|
<T extends org.hipparchus.CalculusFieldElement<T>> |
transformPVCoordinates(TimeStampedFieldPVCoordinates<T> pv)
包括运动效应的 TimeStampedFieldPVCoordinates 变换。
|
TimeStampedPVCoordinates |
transformPVCoordinates(TimeStampedPVCoordinates pv)
包括运动效应的 TimeStampedPVCoordinates 变换。
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
compose, compositeRotation, compositeTranslation, getIdentity, of, of, of, transformLine, transformPosition, transformPosition, transformVector, transformVector
durationFrom
public static final Transform IDENTITY
public Transform(AbsoluteDate date, PVCoordinates cartesian, AngularCoordinates angular)
date
- 变换的日期
cartesian
- 目标参考系相对于原始参考系的笛卡尔坐标
angular
- 目标参考系相对于原始参考系的角坐标
public Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D translation)
date
- 变换的日期
translation
- 要应用的平移(即转换后的原点坐标,或旧参考系在新参考系中的原点坐标)
public Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Rotation rotation)
date
- 变换的日期
rotation
- 要应用的旋转(即应用于在旧参考系中表示的矢量的坐标以获得在新参考系中表示的相同矢量的旋转)
public Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D translation, org.hipparchus.geometry.euclidean.threed.Vector3D velocity)
date
- 变换的日期
translation
- 要应用的平移(即转换后的原点坐标,或旧参考系在新参考系中的原点坐标)
velocity
- 平移的速度(即在新参考系中的原始坐标速度)
public Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Vector3D translation, org.hipparchus.geometry.euclidean.threed.Vector3D velocity, org.hipparchus.geometry.euclidean.threed.Vector3D acceleration)
date
- 变换的日期
translation
- 要应用的平移(即转换后的原点坐标,或旧参考系在新参考系中的原点坐标)
velocity
- 平移的速度(即在新参考系中的原始坐标速度)
acceleration
- 平移的加速度(即在新参考系中的原始坐标加速度)
public Transform(AbsoluteDate date, PVCoordinates cartesian)
date
- 变换的日期
cartesian
- 要应用的变换的笛卡尔部分(即转换后的原点坐标,或旧参考系在新参考系中的原点坐标,及其导数)
public Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Rotation rotation, org.hipparchus.geometry.euclidean.threed.Vector3D rotationRate)
date
- 变换的日期
rotation
- 要应用的旋转(即应用于在旧参考系中表示的矢量的坐标以获得在新参考系中表示的相同矢量的旋转)
rotationRate
- 瞬时旋转的轴在新参考系中表示(表示角速率的范数)
public Transform(AbsoluteDate date, org.hipparchus.geometry.euclidean.threed.Rotation rotation, org.hipparchus.geometry.euclidean.threed.Vector3D rotationRate, org.hipparchus.geometry.euclidean.threed.Vector3D rotationAcceleration)
date
- 变换的日期
rotation
- 要应用的旋转(即应用于在旧参考系中表示的矢量的坐标以获得在新参考系中表示的相同矢量的旋转)
rotationRate
- 瞬时旋转的轴
rotationAcceleration
- 瞬时旋转的轴在新参考系中表示(表示角速率的范数)
public Transform(AbsoluteDate date, AngularCoordinates angular)
date
- 变换的日期
angular
- 要应用的旋转的角部分(即应用于在旧参考系中表示的矢量的坐标以获得在新参考系中表示的相同矢量的旋转,及其旋转速率)
public Transform(AbsoluteDate date, Transform first, Transform second)
请注意,两个现有变换的日期被忽略,并且组合变换的日期设置为此构造函数中提供的日期,而不会尝试移动原始变换。这是一种设计选择,允许用户完全控制组合。
date
- 变换的日期
first
- 应用的第一个变换
second
- 应用的第二个变换
public AbsoluteDate getDate()
getDate
在接口 TimeStamped
中指定
public Transform shiftedBy(double dt)
shiftedBy
在接口 TimeShiftable<Transform>
中指定
dt
- 以秒为单位的时间偏移
public StaticTransform staticShiftedBy(double dt)
dt
- 以秒为单位的时间偏移量。
shiftedBy(double)
public StaticTransform toStaticTransform()
StaticTransform
public Transform interpolate(AbsoluteDate interpolationDate, Stream<Transform> sample)
调用此方法等效于调用 interpolate(AbsoluteDate, CartesianDerivativesFilter, AngularDerivativesFilter, Collection)
,其中 cFilter
设置为 CartesianDerivativesFilter.USE_PVA
,aFilter
设置为 AngularDerivativesFilter.USE_RRA
设置为 true。
interpolationDate
- 插值日期
sample
- 应进行插值的样本点
public static Transform interpolate(AbsoluteDate date, CartesianDerivativesFilter cFilter, AngularDerivativesFilter aFilter, Collection<Transform> sample)
请注意,即使可以忽略样本的一阶导数(速度和旋转速率),插值实例始终包括插值导数。可以显式使用此功能来计算这些导数,当从分析公式计算它们过于复杂时:只需从显式公式计算几个样本点,并在这些样本点中将导数设置为零,然后使用插值添加与位置和旋转一致的导数。
由于此插值实现是多项式的,因此应仅在小样本(约10-20个点)中使用,以避免 朗格现象 和数值问题(包括 NaN 出现)。
date
- 插值日期
cFilter
- 用于在插值中使用的样本导数的过滤器
aFilter
- 用于在插值中使用的样本导数的过滤器
sample
- 应进行插值的样本点
public Transform getInverse()
getInverse
在接口 StaticTransform
public Transform freeze()
此方法创建实例的副本,但在时间上被冻结,即速度、加速度和旋转速率被强制为零。
public PVCoordinates transformPVCoordinates(PVCoordinates pva)
PVCoordinates
变换。
pva
- 要转换的位置-速度-加速度三元组。
public TimeStampedPVCoordinates transformPVCoordinates(TimeStampedPVCoordinates pv)
TimeStampedPVCoordinates
变换。
为了允许用户更灵活,此方法不检查变换 date
和时间戳位置-速度 date
之间的一致性。返回值将始终具有与输入参数相同的 date
,而不管实例 date
是什么。
pv
- 要转换的时间戳位置-速度。
public <T extends org.hipparchus.CalculusFieldElement<T>> FieldPVCoordinates<T> transformPVCoordinates(FieldPVCoordinates<T> pv)
FieldPVCoordinates
变换。
T
- 字段元素的类型
pv
- 要转换的位置-速度。
public <T extends org.hipparchus.CalculusFieldElement<T>> TimeStampedFieldPVCoordinates<T> transformPVCoordinates(TimeStampedFieldPVCoordinates<T> pv)
TimeStampedFieldPVCoordinates
变换。
为了允许用户更灵活,此方法不检查变换 date
和时间戳位置-速度 date
之间的一致性。返回值将始终具有与输入参数相同的 date
,而不管实例 date
是什么。
T
- 字段元素的类型
pv
- 要转换的时间戳位置-速度。
public void getJacobian(CartesianDerivativesFilter selector, double[][] jacobian)
transformPVCoordinates(PVCoordinates)
方法的雅可比矩阵。
元素 jacobian[i][j]
是转换后的 PVCoordinates
的笛卡尔坐标 i 相对于输入 PVCoordinates
的笛卡尔坐标 j 在方法 transformPVCoordinates(PVCoordinates)
中的导数。
这个定义意味着如果我们定义位置-速度坐标
PV₁ = transform.transformPVCoordinates(PV₀), 那么
它们的微分 dPV₁ 和 dPV₀ 将遵守以下关系,其中 J 是此方法计算的矩阵:
dPV₁ = J × dPV₀
selector
- 指定必须填充的左上角大小的选择器(3x3 仅用于位置,6x6 用于位置和速度,9x9 用于位置、速度和加速度)
jacobian
- 占位矩阵,其左上角将填充雅可比矩阵,矩阵的其余部分保持不变
public PVCoordinates getCartesian()
一个变换可以唯一表示为一个基本平移后跟一个基本旋转。此方法返回此唯一基本平移及其导数。
getTranslation()
, getVelocity()
public org.hipparchus.geometry.euclidean.threed.Vector3D getTranslation()
一个变换可以唯一表示为一个基本平移后跟一个基本旋转。此方法返回此唯一基本平移。
getTranslation
在接口 StaticTransform
getCartesian()
, getVelocity()
, getAcceleration()
public org.hipparchus.geometry.euclidean.threed.Vector3D getVelocity()
getCartesian()
, getTranslation()
, getAcceleration()
public org.hipparchus.geometry.euclidean.threed.Vector3D getAcceleration()
getCartesian()
, getTranslation()
, getVelocity()
public AngularCoordinates getAngular()
一个变换可以唯一表示为一个基本平移后跟一个基本旋转。此方法返回带有其导数的唯一基本旋转。
getRotation()
, getRotationRate()
, getRotationAcceleration()
public org.hipparchus.geometry.euclidean.threed.Rotation getRotation()
一个变换可以唯一表示为一个基本平移后跟一个基本旋转。此方法返回唯一的基本旋转。
getRotation
在接口 StaticTransform
getAngular()
, getRotationRate()
, getRotationAcceleration()
public org.hipparchus.geometry.euclidean.threed.Vector3D getRotationRate()
范数表示角速率。
getAngular()
, getRotation()
, getRotationAcceleration()
public org.hipparchus.geometry.euclidean.threed.Vector3D getRotationAcceleration()
getAngular()
, getRotation()
, getRotationRate()
Copyright © 2002-2023 CS GROUP. All rights reserved.