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);
propagator.setAttitudeProvider(attitudeProvider);

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.