public class PolygonalFieldOfView extends AbstractFieldOfView
视场是在以航天器为中心的单位球上定义的区域。它们可以具有任何形状,可以分为几个非连接的补丁,并且可以具有孔。
Modifier and Type | Class and Description |
---|---|
static class |
PolygonalFieldOfView.DefiningConeType
锥体/多边形相对位置的枚举。
|
Constructor and Description |
---|
PolygonalFieldOfView(org.hipparchus.geometry.spherical.twod.SphericalPolygonsSet zone, double margin)
构建一个新实例。
|
PolygonalFieldOfView(org.hipparchus.geometry.euclidean.threed.Vector3D center, PolygonalFieldOfView.DefiningConeType coneType, org.hipparchus.geometry.euclidean.threed.Vector3D meridian, double radius, int n, double margin)
使用正多边形形状构建视场。
|
Modifier and Type | Method and Description |
---|---|
List<List<GeodeticPoint>> |
getFootprint(Transform fovToBody, OneAxisEllipsoid body, double angularStep)
获取视场在地面上的足迹。
|
org.hipparchus.geometry.spherical.twod.SphericalPolygonsSet |
getZone()
获取内部区域。
|
double |
offsetFromBoundary(org.hipparchus.geometry.euclidean.threed.Vector3D lineOfSight, double angularRadius, VisibilityTrigger trigger)
获取目标体相对于视场边界的偏移量。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
projectToBoundary(org.hipparchus.geometry.euclidean.threed.Vector3D lineOfSight)
找到视线上最接近视场边界的方向。
|
getMargin
public PolygonalFieldOfView(org.hipparchus.geometry.spherical.twod.SphericalPolygonsSet zone, double margin)
zone
- 视场内部,在航天器坐标系中
margin
- 应用于区域的角度边距(如果为正,则将边界附近足够接近的点视为可见;如果为负,则将边界附近足够接近的点视为不可见)
public PolygonalFieldOfView(org.hipparchus.geometry.euclidean.threed.Vector3D center, PolygonalFieldOfView.DefiningConeType coneType, org.hipparchus.geometry.euclidean.threed.Vector3D meridian, double radius, int n, double margin)
center
- 多边形的中心(中心在内部部分)
coneType
- 定义锥体的类型
meridian
- 定义锥体和多边形之间一个接触点的参考子午线的点(即多边形边缘的中点或多边形顶点)
radius
- 定义锥体的角半径
n
- 多边形的边数
margin
- 应用于区域的角度边距(如果为正,则将边界附近足够接近的点视为可见;如果为负,则将边界附近足够接近的点视为不可见)
public org.hipparchus.geometry.spherical.twod.SphericalPolygonsSet getZone()
public double offsetFromBoundary(org.hipparchus.geometry.euclidean.threed.Vector3D lineOfSight, double angularRadius, VisibilityTrigger trigger)
偏移量是目标体与最近边界点之间的有符号角距离,考虑到VisibilityTrigger
和margin
。
由于视场可能具有可能需要长时间计算的复杂形状,当可以证明目标点在视场外时,可以使用更快但近似的计算方法。此近似仅在视场外部约0.01弧度处执行,该位置由目标体半径和视场边界定义的死区增加,并且应设计为仍然在完全准确计算将返回正值的情况下返回正值。当目标点靠近区域时(而且当它在区域内时),将执行完全准确的计算。此设计允许将此偏移量用作可靠检测视场边界穿越的方法(考虑VisibilityTrigger
和margin
),这对应于偏移的符号更改。
lineOfSight
- 从视场支持单位球的中心到航天器坐标系中目标的视线
angularRadius
- 目标体的角半径
trigger
- 球形体的可见性触发器
FieldOfView.offsetFromBoundary(Vector3D, double, VisibilityTrigger)
public org.hipparchus.geometry.euclidean.threed.Vector3D projectToBoundary(org.hipparchus.geometry.euclidean.threed.Vector3D lineOfSight)
lineOfSight
- 从视场支持单位球的中心到航天器坐标系中目标的视线
public List<List<GeodeticPoint>> getFootprint(Transform fovToBody, OneAxisEllipsoid body, double angularStep)
此方法假定视场以某个载体为中心,该载体通常是航天器或地面站天线。足迹边界循环中的点都相对于椭球面的海拔零,它们对应于视场边缘的投影,或者对应于如果视场超过地平线,则为身体边缘上的点。边缘上的点看到载体原点的海拔为零。如果视场非常大,完全包含了身体,所有点将对应于边缘上的点。如果视场背对着身体,边界循环将是一个空列表。足迹循环中的点按三角顺序排序,从载体的视角看。这意味着从一个点到下一个点旅行的人将看到从载体左手边可见的点,而看不到从载体右手边可见的点。
在边缘处截断视场可能会导致复杂视场的奇怪结果。例如,如果视场是一个带孔的环,部分环超过地平线,那么方法仍将返回两个在边缘处截断的循环,一个顺时针和一个逆时针,因此两次“关闭”C形状。这种行为被认为是可以接受的。
如果载体是航天器,则可以从SpacecraftState
计算fovToBody
变换如下:
Transform inertToBody = state.getFrame().getTransformTo(body.getBodyFrame(), state.getDate()); Transform fovToBody = new Transform(state.getDate(), state.toTransform().getInverse(), inertToBody);
如果载体是地面站,使用地心坐标系定位并使用在盘面坐标系和地心坐标系之间的变换管理其指向方向,则可以如下计算fovToBody
变换:
Transform topoToBody = topocentricFrame.getTransformTo(body.getBodyFrame(), date); Transform topoToDish = ... Transform fovToBody = new Transform(date, topoToDish.getInverse(), topoToBody);
这里仅使用原始区域,角度边距在此处被忽略。
fovToBody
- 视场定义的坐标系和身体坐标系之间的变换。
body
- 视场将投影在其上的身体表面
angularStep
- 用于边界循环采样的步长(弧度),请注意,这通常不是单位球上的角度,而是底层视场边界模型使用的相位角
Copyright © 2002-2023 CS GROUP. All rights reserved.