public class EllipticalFieldOfView extends SmoothFieldOfView
不失一般性,可以假设通过适当的旋转,椭圆的中心位于Zell轴上,椭圆的主轴沿Xell和Yell轴。椭圆的第一个定义元素是这些规范轴。该类允许通过直接给出Zell轴作为椭圆center
的中心,并给出一个在(+Xell,Zell)半平面上的primaryMeridian
向量来指定它们。允许primaryMeridian
不正交于center
,因为正交性将在内部修正(即primaryMeridian
可能与Xell不同)。
我们可以定义角坐标\((\alpha, \beta)\)为绕+Yell和-Xell轴的二面角,以指定单位球上的点。相应的笛卡尔坐标将是\[\begin{gather*} P_{\alpha,\beta}\left(\begin{gather*} \frac{\sin\alpha\cos\beta}{\sqrt{1-\sin^2\alpha\sin^2\beta}}\\ \frac{\cos\alpha\sin\beta}{\sqrt{1-\sin^2\alpha\sin^2\beta}}\\ \frac{\cos\alpha\cos\beta}{\sqrt{1-\sin^2\alpha\sin^2\beta}} \end{gather*}\right)\end{gather*}\],这表明角度\(\beta=0\)对应于(Xell,Zell)平面,角度\(\alpha=0\)对应于(Yell,Zell)平面。请注意,至少一个角度必须与\(\pm\frac{\pi}{2}\)不同,这意味着上述表达式对于在(Xell,Yell)平面上的点是奇异的。
椭圆的大小由其沿Xell轴的半孔角\(\lambda\)和沿Yell轴的\(\mu\)定义。对于属于椭圆的点,我们总是有\(-\lambda \le \alpha \le +\lambda\)和\(-\mu \le \beta \le +\mu\),在主轴的末端达到相等。在球上定义的椭圆不是一个平面椭圆,因为四个端点\((\alpha=\pm\lambda, \beta=0)\)和\((\alpha=0, \beta=\pm\mu)\)在\(\lambda\neq\mu\)时不共面。
我们将在球上定义的椭圆定义为点\(P\)的轨迹,使得它们到两个焦点\(F_+\)和\(F_-\)的角距离之和是恒定的,所有点都在球上。焦点和两个半孔角\(\lambda\)和\(\mu\)之间的关系是:\[\lambda \ge \mu \Rightarrow F_\pm\left(\begin{gather*} \pm\sin\delta\\ 0\\ \cos\delta \end{gather*}\right) \quad\text{with}\quad \cos\delta = \frac{\cos\lambda}{\cos\mu}\]
和\[\mu \ge \lambda \Rightarrow F_\pm\left(\begin{gather*} 0\\ \pm\sin\delta\\ \cos\delta \end{gather*}\right) \quad\text{with}\quad \cos\delta = \frac{\cos\mu}{\cos\lambda}\]
可以证明,前面的定义等价于首先在平面\(z = z_0\)上绘制一个常规平面椭圆(\(z_0\)是一个任意严格正数,\(z_0=1\)是最简单的选择),其半长轴为\(a=z_0\tan\lambda\),半短轴为\(b=z_0\tan\mu\),然后使用中心投影将其投影到球面上:\[\left\{\begin{align*} \left(\frac{x}{z_0\tan\lambda}\right)^2 + \left(\frac{y}{z_0\tan\mu}\right)^2 &= \left(\frac{z}{z_0}\right)^2\\ x^2 + y^2 + z^2 &= 1 \end{align*}\right.\]
首先通过\(z_0\)简化第一个方程,并使用第二个方程中的\(z^2\)消除它,得到:\[\left\{\begin{align*} \left(\frac{x}{\sin\lambda}\right)^2 + \left(\frac{y}{\sin\mu}\right)^2 &= 1\\ x^2 + y^2 + z^2 &= 1 \end{align*}\right.\],这表明前面的定义也等价于首先在\((x, y)\)平面上定义一个无量纲平面椭圆,然后沿\(z\)进行投影到球面上。
然而需要注意的是,尽管球面上的椭圆可以计算为\(x, y\)平面上椭圆的投影,但一个椭圆的焦点不是另一个椭圆的焦点的投影。平面上的焦点彼此之间比焦点\(F_+\)和\(F_-\)的投影更接近一个因子\(\cos\mu\)。
Constructor and Description |
---|
EllipticalFieldOfView(org.hipparchus.geometry.euclidean.threed.Vector3D center, org.hipparchus.geometry.euclidean.threed.Vector3D primaryMeridian, double halfApertureAlongX, double halfApertureAlongY, double margin)
构建一个新实例。
|
Modifier and Type | Method and Description |
---|---|
protected org.hipparchus.geometry.euclidean.threed.Vector3D |
directionAt(double angle)
获取角度处的边界方向。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getFocus1()
获取航天器坐标系中的第一个焦点。
|
org.hipparchus.geometry.euclidean.threed.Vector3D |
getFocus2()
获取航天器坐标系中的第二个焦点。
|
double |
getHalfApertureAlongX()
获取沿Xell方向传播的FOV半孔角(即
|
double |
getHalfApertureAlongY()
获取沿Yell方向传播的FOV半孔角(即
|
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)
找到视线上最接近视场边界的方向。
|
getCenter, getFootprint, getX, getY, getZ
getMargin
public EllipticalFieldOfView(org.hipparchus.geometry.euclidean.threed.Vector3D center, org.hipparchus.geometry.euclidean.threed.Vector3D primaryMeridian, double halfApertureAlongX, double halfApertureAlongY, double margin)
通过适当的旋转,可以使椭圆形视场定向,使得椭圆的中心位于Zell轴上,其中一个主轴位于(Xell,Zell)平面中,另一个主轴位于(Yell,Zell)平面中。请注意,沿Yell方向传播的椭圆主轴对应于绕-Xell轴旋转,沿Xell方向传播的椭圆主轴对应于绕+Yell轴旋转。这里使用的命名约定是角度以传播轴命名。
center
- 视场中心的方向(即Zell),在航天器坐标系中
primaryMeridian
- 定义(+Xell,Zell)半平面的向量(允许primaryMeridian
不正交于center
,因为正交性将在内部修正)
halfApertureAlongX
- 定义沿Xell方向传播的椭圆半孔角(即对应于绕+Yell旋转)
halfApertureAlongY
- 定义沿Yell方向传播的椭圆半孔角(即对应于绕-Xell旋转)
margin
- 应用于区域的角度边缘(如果为正,则视场将考虑区域外略微的点仍然可见)
public double getHalfApertureAlongX()
public double getHalfApertureAlongY()
public org.hipparchus.geometry.euclidean.threed.Vector3D getFocus1()
public org.hipparchus.geometry.euclidean.threed.Vector3D getFocus2()
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
- 从视场中心支持单位球到航天器坐标系中目标的视线
protected org.hipparchus.geometry.euclidean.threed.Vector3D directionAt(double angle)
directionAt
在类 SmoothFieldOfView
中
angle
- 边界方向的相位角
Copyright © 2002-2023 CS GROUP. All rights reserved.