From 6fdec590f0afd1826b78e95b323deb1ffaf28776 Mon Sep 17 00:00:00 2001 From: ricklentz Date: Wed, 7 Oct 2026 05:47:36 -0400 Subject: [PATCH] Fix Quaternion.setMat3 transpose convention and re-apply VariableDatum padding fix Quaternion.setMat3 used Chrenshaw's transposed matrix convention but the code never transposed the input, producing transposed output from getMat3 round-trips. Swap the anti-symmetric matrix element pairs to match getMat3's convention (Vince pg 202). Re-apply VariableDatum.getMarshalledSize() padding fix that was overwritten by a full rebuild from the source generator. Closes #34, closes #36 --- .../nps/moves/dis7/pdus/VariableDatum.java | 2 +- src/edu/nps/moves/legacy/math/Quaternion.java | 26 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src-generated/edu/nps/moves/dis7/pdus/VariableDatum.java b/src-generated/edu/nps/moves/dis7/pdus/VariableDatum.java index 5959b6b726..e82e625aee 100644 --- a/src-generated/edu/nps/moves/dis7/pdus/VariableDatum.java +++ b/src-generated/edu/nps/moves/dis7/pdus/VariableDatum.java @@ -63,7 +63,7 @@ public synchronized int getMarshalledSize() { marshalSize += variableDatumID.getMarshalledSize(); marshalSize += 4; // variableDatumLength marshalSize += variableDatumValue.length; - marshalSize += padding.length; + marshalSize += (8 - marshalSize % 8) % 8; return marshalSize; } diff --git a/src/edu/nps/moves/legacy/math/Quaternion.java b/src/edu/nps/moves/legacy/math/Quaternion.java index 09d825cb37..08f6736f83 100644 --- a/src/edu/nps/moves/legacy/math/Quaternion.java +++ b/src/edu/nps/moves/legacy/math/Quaternion.java @@ -282,7 +282,7 @@ public void getEulers(float h[], float p[], float r[]) { r[0] = hpr[2]; } - public void setMat3(float mat[][]) // Chrenshaw, pg 16 (he transposes m!) + public void setMat3(float mat[][]) // Chrenshaw, pg 16 (corrected for transpose convention) { float tr, s; @@ -292,9 +292,9 @@ public void setMat3(float mat[][]) // Chrenshaw, pg 16 (he transposes m!) q[3] = s * 0.5f; s = 0.5f / s; - q[0] = (mat[1][2] - mat[2][1]) * s; - q[1] = (mat[2][0] - mat[0][2]) * s; - q[2] = (mat[0][1] - mat[1][0]) * s; + q[0] = (mat[2][1] - mat[1][2]) * s; + q[1] = (mat[0][2] - mat[2][0]) * s; + q[2] = (mat[1][0] - mat[0][1]) * s; return; } @@ -304,9 +304,9 @@ public void setMat3(float mat[][]) // Chrenshaw, pg 16 (he transposes m!) q[2] = s * 0.5f; s = 0.5f / s; - q[0] = (mat[2][0] - mat[0][2]) * s; - q[1] = (mat[2][1] + mat[1][2]) * s; - q[3] = (mat[0][1] - mat[1][0]) * s; + q[0] = (mat[0][2] + mat[2][0]) * s; + q[1] = (mat[1][2] + mat[2][1]) * s; + q[3] = (mat[1][0] - mat[0][1]) * s; return; } @@ -316,9 +316,9 @@ public void setMat3(float mat[][]) // Chrenshaw, pg 16 (he transposes m!) q[1] = s * 0.5f; s = 0.5f / s; - q[0] = (mat[1][0] + mat[0][1]) * s; - q[2] = (mat[2][1] + mat[1][2]) * s; - q[3] = (mat[2][0] - mat[0][2]) * s; + q[0] = (mat[0][1] + mat[1][0]) * s; + q[2] = (mat[1][2] + mat[2][1]) * s; + q[3] = (mat[0][2] - mat[2][0]) * s; return; } @@ -328,9 +328,9 @@ public void setMat3(float mat[][]) // Chrenshaw, pg 16 (he transposes m!) q[0] = s * 0.5f; s = 0.5f / s; - q[1] = (mat[1][0] + mat[0][1]) * s; - q[2] = (mat[2][0] - mat[0][2]) * s; - q[3] = (mat[1][2] - mat[2][1]) * s; + q[1] = (mat[0][1] + mat[1][0]) * s; + q[2] = (mat[0][2] + mat[2][0]) * s; + q[3] = (mat[2][1] - mat[1][2]) * s; return; } }