Skip to content

Body axes and handedness

The case convention the TerraHawk cases were written with describes the body axes as X starboard, Y aft, Z up. Those three cannot all hold in a right-handed frame: starboard crossed with aft points down, not up. OpenFOAM’s frame is right-handed, so with Y aft and Z up, +X is port.

No picture of a symmetric airframe can show which side is which, but the force coefficients carry the frame’s handedness. A forceCoeffs function object records its axes in its file header, and its pitch axis is the lift direction crossed with the drag direction. In a case at alpha 17 it came out as

pitchAxis : (-0.996 0.087 0.010)

along minus X. OpenFOAM’s CmPitch about that axis is nose-up positive, which by the right-hand rule makes it the starboard axis. So minus X is starboard and plus X is port. The forces agree: the wing’s raw moment had +2.79 N m about +X while CmPitch was -0.188, nose down, which is exactly a positive moment about a port-pointing axis.

Lateral derivatives do not change. Mirroring an aircraft flips sideslip, side force, rolling moment and yawing moment together, so Cn_beta, Cl_beta and CY_beta keep their signs as long as sideslip and the moments are taken in the same frame. A symmetric airframe and its mirror image are the same aircraft.

What does change is the names of the sides. “The left wing drops”, read from the sign of CmRoll, or “wind from starboard”, read from the sign of beta, depend on which side +X is. That is why mcopenfoam reports moments projected on OpenFOAM’s own axes, with pitch nose-up positive, and why job_forces states the frame in its result.

Every figure carries a line such as

screen up = -Y nose screen right = -X = CFD starboard (right-handed reading) viewed from +Z above

computed from the camera’s position and up vector, not written by hand. A title that named the viewing side once said “viewed from port” while the camera sat on minus X; titles no longer name a side, and the marker is the only place that does. The words per axis are configurable, through MCOPENFOAM_AXIS_LABELS or a case’s case.json, for projects that want their own names on the screen.