Repository: commons-math Updated Branches: refs/heads/master 9036edd6d -> 0f6812858
Removed use of awt transforms. Project: http://git-wip-us.apache.org/repos/asf/commons-math/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-math/commit/0f681285 Tree: http://git-wip-us.apache.org/repos/asf/commons-math/tree/0f681285 Diff: http://git-wip-us.apache.org/repos/asf/commons-math/diff/0f681285 Branch: refs/heads/master Commit: 0f6812858ad6e3b28e4a2843c526ec8cf501b176 Parents: 9036edd Author: Luc Maisonobe <l...@apache.org> Authored: Fri Jul 10 15:19:54 2015 +0200 Committer: Luc Maisonobe <l...@apache.org> Committed: Fri Jul 10 15:33:10 2015 +0200 ---------------------------------------------------------------------- .../euclidean/threed/PolyhedronsSet.java | 19 +++--- .../math4/geometry/euclidean/twod/Line.java | 68 +++++++++++++------- .../math4/geometry/euclidean/twod/LineTest.java | 6 +- 3 files changed, 56 insertions(+), 37 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-math/blob/0f681285/src/main/java/org/apache/commons/math4/geometry/euclidean/threed/PolyhedronsSet.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/geometry/euclidean/threed/PolyhedronsSet.java b/src/main/java/org/apache/commons/math4/geometry/euclidean/threed/PolyhedronsSet.java index 9de30ce..da6ba93 100644 --- a/src/main/java/org/apache/commons/math4/geometry/euclidean/threed/PolyhedronsSet.java +++ b/src/main/java/org/apache/commons/math4/geometry/euclidean/threed/PolyhedronsSet.java @@ -16,7 +16,6 @@ */ package org.apache.commons.math4.geometry.euclidean.threed; -import java.awt.geom.AffineTransform; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -595,13 +594,15 @@ public class PolyhedronsSet extends AbstractRegion<Euclidean3D, Euclidean2D> { final Vector2D tP00 = tPlane.toSubSpace((Point<Euclidean3D>) apply(p00)); final Vector2D tP10 = tPlane.toSubSpace((Point<Euclidean3D>) apply(p10)); final Vector2D tP01 = tPlane.toSubSpace((Point<Euclidean3D>) apply(p01)); - final AffineTransform at = - new AffineTransform(tP10.getX() - tP00.getX(), tP10.getY() - tP00.getY(), - tP01.getX() - tP00.getX(), tP01.getY() - tP00.getY(), - tP00.getX(), tP00.getY()); cachedOriginal = (Plane) original; - cachedTransform = org.apache.commons.math4.geometry.euclidean.twod.Line.getTransform(at); + cachedTransform = + org.apache.commons.math4.geometry.euclidean.twod.Line.getTransform(tP10.getX() - tP00.getX(), + tP10.getY() - tP00.getY(), + tP01.getX() - tP00.getX(), + tP01.getY() - tP00.getY(), + tP00.getX(), + tP00.getY()); } return ((SubLine) sub).applyTransform(cachedTransform); @@ -660,12 +661,12 @@ public class PolyhedronsSet extends AbstractRegion<Euclidean3D, Euclidean2D> { final Plane oPlane = (Plane) original; final Plane tPlane = (Plane) transformed; final Vector2D shift = tPlane.toSubSpace((Point<Euclidean3D>) apply(oPlane.getOrigin())); - final AffineTransform at = - AffineTransform.getTranslateInstance(shift.getX(), shift.getY()); cachedOriginal = (Plane) original; cachedTransform = - org.apache.commons.math4.geometry.euclidean.twod.Line.getTransform(at); + org.apache.commons.math4.geometry.euclidean.twod.Line.getTransform(1, 0, 0, 1, + shift.getX(), + shift.getY()); } http://git-wip-us.apache.org/repos/asf/commons-math/blob/0f681285/src/main/java/org/apache/commons/math4/geometry/euclidean/twod/Line.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/math4/geometry/euclidean/twod/Line.java b/src/main/java/org/apache/commons/math4/geometry/euclidean/twod/Line.java index 3bfae8d..9f7d578 100644 --- a/src/main/java/org/apache/commons/math4/geometry/euclidean/twod/Line.java +++ b/src/main/java/org/apache/commons/math4/geometry/euclidean/twod/Line.java @@ -16,8 +16,6 @@ */ package org.apache.commons.math4.geometry.euclidean.twod; -import java.awt.geom.AffineTransform; - import org.apache.commons.math4.exception.MathIllegalArgumentException; import org.apache.commons.math4.exception.util.LocalizedFormats; import org.apache.commons.math4.geometry.Point; @@ -422,20 +420,27 @@ public class Line implements Hyperplane<Euclidean2D>, Embedding<Euclidean2D, Euc /** Get a {@link org.apache.commons.math4.geometry.partitioning.Transform * Transform} embedding an affine transform. - * @param transform affine transform to embed (must be inversible - * otherwise the {@link - * org.apache.commons.math4.geometry.partitioning.Transform#apply(Hyperplane) - * apply(Hyperplane)} method would work only for some lines, and - * fail for other ones) + * @param cXX transform factor between input abscissa and output abscissa + * @param cYX transform factor between input abscissa and output ordinate + * @param cXY transform factor between input ordinate and output abscissa + * @param cYY transform factor between input ordinate and output ordinate + * @param cX1 transform addendum for output abscissa + * @param cY1 transform addendum for output ordinate * @return a new transform that can be applied to either {@link * Vector2D Vector2D}, {@link Line Line} or {@link * org.apache.commons.math4.geometry.partitioning.SubHyperplane * SubHyperplane} instances * @exception MathIllegalArgumentException if the transform is non invertible + * @since 4.0 */ - public static Transform<Euclidean2D, Euclidean1D> getTransform(final AffineTransform transform) + public static Transform<Euclidean2D, Euclidean1D> getTransform(final double cXX, + final double cYX, + final double cXY, + final double cYY, + final double cX1, + final double cY1) throws MathIllegalArgumentException { - return new LineTransform(transform); + return new LineTransform(cXX, cYX, cXY, cYY, cX1, cY1); } /** Class embedding an affine transform. @@ -448,11 +453,22 @@ public class Line implements Hyperplane<Euclidean2D>, Embedding<Euclidean2D, Euc private static class LineTransform implements Transform<Euclidean2D, Euclidean1D> { // CHECKSTYLE: stop JavadocVariable check + /** Transform factor between input abscissa and output abscissa. */ private final double cXX; - private final double cXY; - private final double cX1; + + /** Transform factor between input abscissa and output ordinate. */ private final double cYX; + + /** Transform factor between input ordinate and output abscissa. */ + private final double cXY; + + /** Transform factor between input ordinate and output ordinate. */ private final double cYY; + + /** Transform addendum for output abscissa. */ + private final double cX1; + + /** Transform addendum for output ordinate. */ private final double cY1; private final double c1Y; @@ -461,21 +477,25 @@ public class Line implements Hyperplane<Euclidean2D>, Embedding<Euclidean2D, Euc // CHECKSTYLE: resume JavadocVariable check /** Build an affine line transform from a n {@code AffineTransform}. - * @param transform transform to use (must be invertible otherwise - * the {@link LineTransform#apply(Hyperplane)} method would work - * only for some lines, and fail for other ones) + * @param cXX transform factor between input abscissa and output abscissa + * @param cYX transform factor between input abscissa and output ordinate + * @param cXY transform factor between input ordinate and output abscissa + * @param cYY transform factor between input ordinate and output ordinate + * @param cX1 transform addendum for output abscissa + * @param cY1 transform addendum for output ordinate * @exception MathIllegalArgumentException if the transform is non invertible + * @since 4.0 */ - public LineTransform(final AffineTransform transform) throws MathIllegalArgumentException { - - final double[] m = new double[6]; - transform.getMatrix(m); - cXX = m[0]; - cXY = m[2]; - cX1 = m[4]; - cYX = m[1]; - cYY = m[3]; - cY1 = m[5]; + public LineTransform(final double cXX, final double cYX, final double cXY, + final double cYY, final double cX1, final double cY1) + throws MathIllegalArgumentException { + + this.cXX = cXX; + this.cYX = cYX; + this.cXY = cXY; + this.cYY = cYY; + this.cX1 = cX1; + this.cY1 = cY1; c1Y = MathArrays.linearCombination(cXY, cY1, -cYY, cX1); c1X = MathArrays.linearCombination(cXX, cY1, -cYX, cX1); http://git-wip-us.apache.org/repos/asf/commons-math/blob/0f681285/src/test/java/org/apache/commons/math4/geometry/euclidean/twod/LineTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/math4/geometry/euclidean/twod/LineTest.java b/src/test/java/org/apache/commons/math4/geometry/euclidean/twod/LineTest.java index f7e3379..a7810e7 100644 --- a/src/test/java/org/apache/commons/math4/geometry/euclidean/twod/LineTest.java +++ b/src/test/java/org/apache/commons/math4/geometry/euclidean/twod/LineTest.java @@ -28,8 +28,6 @@ import org.apache.commons.math4.util.FastMath; import org.junit.Assert; import org.junit.Test; -import java.awt.geom.AffineTransform; - public class LineTest { @Test @@ -112,14 +110,14 @@ public class LineTest { Line l1 = new Line(new Vector2D(1.0 ,1.0), new Vector2D(4.0 ,1.0), 1.0e-10); Transform<Euclidean2D, Euclidean1D> t1 = - Line.getTransform(new AffineTransform(0.0, 0.5, -1.0, 0.0, 1.0, 1.5)); + Line.getTransform(0.0, 0.5, -1.0, 0.0, 1.0, 1.5); Assert.assertEquals(0.5 * FastMath.PI, ((Line) t1.apply(l1)).getAngle(), 1.0e-10); Line l2 = new Line(new Vector2D(0.0, 0.0), new Vector2D(1.0, 1.0), 1.0e-10); Transform<Euclidean2D, Euclidean1D> t2 = - Line.getTransform(new AffineTransform(0.0, 0.5, -1.0, 0.0, 1.0, 1.5)); + Line.getTransform(0.0, 0.5, -1.0, 0.0, 1.0, 1.5); Assert.assertEquals(FastMath.atan2(1.0, -2.0), ((Line) t2.apply(l2)).getAngle(), 1.0e-10);