The Meaning of halfApertureAcrossTrack and halfApertureAlongTrack

Hello, I would like to ask how to understand the half Aperture AlongTrack and half Aperture AcrossTrack here. I would like to know what exactly these two angles correspond to in the actual satellite sensor?

// Defining rectangular field of view
double halfApertureAlongTrack = FastMath.toRadians(20);
double halfApertureAcrossTrack = FastMath.toRadians(20);
FieldOfView fov = new DoubleDihedraFieldOfView(Vector3D.MINUS_I, // From satellite to body center
Vector3D.PLUS_K, halfApertureAcrossTrack, // Across track direction
Vector3D.PLUS_J, halfApertureAlongTrack, // Along track direction
0); // Angular margin

    // Defining attitude provider
    AttitudeProvider attitudeProvider = new LofOffset(inertialFrame, LOFType.LVLH);

    // Defining your propagator and setting up the attitude provider
    Propagator propagator = new KeplerianPropagator(initialOrbit);

This is the source code from the orekit library:
public DoubleDihedraFieldOfView(final Vector3D center,
final Vector3D axis1, final double halfAperture1,
final Vector3D axis2, final double halfAperture2,
final double margin) {
super(createPolygon(center, axis1, halfAperture1, axis2, halfAperture2), margin);

The DoubleDihedraFieldOfView defines a field of view that is a subset of the unit sphere around the satellite defined by two dihedras. A dihedra is a wedge between two planes whose intersection line contains the center of the sphere. Each dihedra is symmetrically with respect to a center direction that it observes. The two dihedra share the same center direction.

So if in the constructor above you say center is Vector3D.PLUS_K, this means the two dihedras will have Vector3D.PLUS_K in the middle of the field of view. Then if you say axis1 is Vector3D.PLUS_I and halfAperture1 is FastMath.toRadians(45.0) this means the first dihedra will be defined by two planes that have the Vector3D.PLUS_I axis as their shared intersection and that are both 10 degrees away from the center. So one of the limit plane will be the bisecting plane between +J and +K and the other will be the bisecting plane between -J and +K. This dihedra will have a total aperture of 90° (since the half aperture is 45°). For the second dihedra, you woul use for example axis2 is Vector3D.PLUS_J and the same FastMath.toRadians(45.0) hafl aperture. Then you would have defined a square field of view (projected on the unit sphere), with +K at the center of the field of view.

So, how could we understand the Vector3D.PLUS_K and Vector3D.PLUS_I and Vector3D…?Besides, I can barely understand the dihedras, what is this?
In addition, I am also not familiar with dihedra, so could you please first introduce dihedra, then explain how satellites and dihedra are connected, and then introduce Vector3D.PLUS_K and Vector3D.PLUS_I and other Vector3D.PLUS content, and then talk about the content of hafl aperture.There is some mathematical knowledge in between, which I have not studied. Could you recommend a paper or book for me to learn?

Vector3D.PLUS_I is a constant representing the canonical vector with 3D coordinates (1, 0, 0). Vector3D.PLUS_J is a constant representing the canonical vector with 3D coordinates (0, 1, 0). Vector3D.PLUS_K is a constant representing the canonical vector with 3D coordinates (0, 0, 1).

A dihedra is the 3D angular sector on the unit sphere between two planes that contain the origin, see dihedral angle. It can be defined by the axis that is the “hinge” of the dihedra, the aperture (or half aperture in Orekit API) and the direction of the center.

Two dihedra set up such that the two axes (the two “hinges”) and the center are all orthogonal to each other define a “rectangular” zone projected on the unit sphere, this is what DoubleDihedraFieldOfView represents.

1 Like

Love the “hinge” analogy @luc, great explanation !