Aryan Ganjoo created GEOMETRY-163:
-------------------------------------
Summary: EmbeddingPlane.transform loses orthogonality under shear
Key: GEOMETRY-163
URL: https://issues.apache.org/jira/browse/GEOMETRY-163
Project: Commons Geometry
Issue Type: Bug
Environment: Java 17, macOS arm64; Commons Geometry 1.1-SNAPSHOT at
08664182d6c8f8a69da67f03c98e4c7bf6aa193b.
Reporter: Aryan Ganjoo
Applying a shear with EmbeddingPlane.transform produces a non-orthogonal basis,
so points on the plane no longer round-trip through toSubspace and toSpace.
This transform is finite and invertible (determinant 1).
{code:java}
var precision = Precision.doubleEquivalenceOfEpsilon(1e-10);
var plane = Planes.fromPointAndPlaneVectors(
Vector3D.ZERO, Vector3D.Unit.PLUS_X, Vector3D.Unit.PLUS_Y, precision);
var shear = AffineTransformMatrix3D.of(
1, 1, 0, 0,
0, 1, 0, 0,
0, 0, 1, 0);
var transformed = plane.transform(shear);
var point = Vector3D.of(1, 0, 0);
System.out.println(transformed.getU().dot(transformed.getV()));
System.out.println(transformed.toSpace(transformed.toSubspace(point)));
{code}
The dot product is about 0.7071 and the round-trip point is (1.5, 0.5, 0.0),
rather than (1.0, 0.0, 0.0). Using plane.subspaceTransform(shear).getPlane()
gives an orthogonal basis and the expected round trip.
Reproduced on master at 08664182d6c8f8a69da67f03c98e4c7bf6aa193b
(1.1-SNAPSHOT). Happy to contribute a fix and regression tests.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)