[ 
https://issues.apache.org/jira/browse/GEOMETRY-163?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aryan Ganjoo updated GEOMETRY-163:
----------------------------------
    Affects Version/s: 1.1

> EmbeddingPlane.transform loses orthogonality under shear
> --------------------------------------------------------
>
>                 Key: GEOMETRY-163
>                 URL: https://issues.apache.org/jira/browse/GEOMETRY-163
>             Project: Commons Geometry
>          Issue Type: Bug
>    Affects Versions: 1.1
>         Environment: Java 17, macOS arm64; Commons Geometry 1.1-SNAPSHOT at 
> 08664182d6c8f8a69da67f03c98e4c7bf6aa193b.
>            Reporter: Aryan Ganjoo
>            Priority: Major
>
> 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). I am working on a fix with regression tests and plan to 
> submit a PR. Please coordinate here before starting a parallel fix.
> Report prepared with AI assistance.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to