Example #1
0
        /**
         * Calculates a transformation matrix onto the ray.
         *
         * @param matrix the {@link TransformMatrix2D} that gets calculated into this ray.
         * @return the transformed ray.
         */
        public Ray2D transform(TransformMatrix2D matrix)
        {
            Point2D  startNew     = matrix.multiply(start);
            Vector2D directionNew = startNew.vec(matrix.multiply(start.add(direction)));

            return(new Ray2D(startNew, directionNew));
        }
Example #2
0
 public void testTransform()
 {
     Assert.AreEqual(((Circle2D)testCircle.transform(TransformMatrix2D.UNITY_MATRIX)).getCenter().getX(), testCircle.getCenter().getX(), 0.000005d);
     Assert.AreEqual(((Circle2D)testCircle.transform(TransformMatrix2D.UNITY_MATRIX)).getCenter().getY(), testCircle.getCenter().getY(), 0.000005d);
     Assert.AreEqual(((Circle2D)testCircle.transform(TransformMatrix2D.UNITY_MATRIX)).getRadius(), testCircle.getRadius(), 0.000005d);
     Assert.AreEqual(((Circle2D)testCircle.transform(TransformMatrix2D.translate(4.0d, 5.0d))).getCenter().getX(), 16.0d, 0.000005d);
     Assert.AreEqual(((Circle2D)testCircle.transform(TransformMatrix2D.translate(4.0d, 5.0d))).getCenter().getY(), 19.0d, 0.000005d);
     Assert.AreEqual(((Ellipse2D)testCircle.transform(TransformMatrix2D.scale(2.0d, 0D))).getHorizontalLength(), 20.0d, 0.000005d);
     Assert.AreEqual(((Ellipse2D)testCircle.transform(TransformMatrix2D.scale(0, 0.5d))).getVerticalLength(), 5.0d, 0.000005d);
 }
Example #3
0
 public void testTransform()
 {
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.UNITY_MATRIX)).getUpperLeft().getX(), testRect.getUpperLeft().getX(), 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.UNITY_MATRIX)).getUpperLeft().getY(), testRect.getUpperLeft().getY(), 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.UNITY_MATRIX)).getLowerRight().getX(), testRect.getLowerRight().getX(), 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.UNITY_MATRIX)).getLowerRight().getY(), testRect.getLowerRight().getY(), 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.translate(3.0d, 5.0d))).getUpperLeft().getX(), 6.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.translate(3.0d, 5.0d))).getUpperLeft().getY(), 13.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.translate(3.0d, 5.0d))).getLowerRight().getX(), 8.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.translate(3.0d, 5.0d))).getLowerRight().getY(), 9.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.scale(2.0d, 4.0d))).getUpperLeft().getX(), 6.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.scale(2.0d, 4.0d))).getUpperLeft().getY(), 32.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.scale(2.0d, 4.0d))).getLowerRight().getX(), 10.0d, 0.000005d);
     Assert.AreEqual(((Rect2D)testRect.transform(TransformMatrix2D.scale(2.0d, 4.0d))).getLowerRight().getY(), 16.0d, 0.000005d);
 }
Example #4
0
        public void testRayCast()
        {
            // static tests
            Assert.AreEqual(double.PositiveInfinity, testEllipse.rayCast(new Ray2D(0.0d, 0.0d, 0.0d, 2.0d)), 0.000005d);
            Assert.AreEqual(2.0d, testEllipse.rayCast(new Ray2D(0.0d, 14.0d, 12.0d, 14.0d)), 0.000005d);

            // serial tests
            Ellipse2D randomEllipse;
            Point2D   randomPointOnEllipse;
            Point2D   randomPoint;
            double    currentXRadius;
            double    currentYRadius;
            double    xvalue;
            double    yvalue;
            double    randomAngle;
            int       sector;
            int       counter = 1000;

            do
            {
                randomEllipse  = new Ellipse2D(new Point2D(Util.generateRandomDoubleBetween(-500.0d, 500.0d), Util.generateRandomDoubleBetween(-500.0d, 500.0d)), Util.generateRandomDoubleBetween(0.0d, 200.0d), Util.generateRandomDoubleBetween(0.0d, 200.0d));
                currentXRadius = randomEllipse.getHorizontalLength();
                currentYRadius = randomEllipse.getVerticalLength();
                xvalue         = Util.generateRandomDoubleBetween(0.0d, currentXRadius);
                yvalue         = (currentYRadius * System.Math.Sqrt(currentXRadius * currentXRadius - xvalue * xvalue)) / currentXRadius;
                sector         = Util.randomNumberBetween(1, 4);
                switch (sector)
                {
                case 2:
                {
                    yvalue      = -yvalue;
                    randomPoint = new Point2D(Util.generateRandomDoubleBetween(randomEllipse.getCenter().getX() + xvalue, 1000.0d), Util.generateRandomDoubleBetween(-1000.0d, randomEllipse.getCenter().getY() + yvalue));
                    break;
                }

                case 3:
                {
                    xvalue      = -xvalue;
                    yvalue      = -yvalue;
                    randomPoint = new Point2D(Util.generateRandomDoubleBetween(-1000.0d, randomEllipse.getCenter().getX() + xvalue), Util.generateRandomDoubleBetween(-1000.0d, randomEllipse.getCenter().getY() + yvalue));
                    break;
                }

                case 4:
                {
                    xvalue      = -xvalue;
                    randomPoint = new Point2D(Util.generateRandomDoubleBetween(-1000.0d, randomEllipse.getCenter().getX() + xvalue), Util.generateRandomDoubleBetween(randomEllipse.getCenter().getY() + yvalue, 1000.0d));
                    break;
                }

                default:
                {
                    randomPoint = new Point2D(Util.generateRandomDoubleBetween(randomEllipse.getCenter().getX() + xvalue, 1000.0d), Util.generateRandomDoubleBetween(randomEllipse.getCenter().getY() + yvalue, 1000.0d));
                    break;
                }
                }
                randomPointOnEllipse = new Point2D(randomEllipse.getCenter().getX() + xvalue, randomEllipse.getCenter().getY() + yvalue);

                randomAngle          = Util.generateRandomDoubleBetween(-System.Math.PI / 2, System.Math.PI / 2);
                randomEllipse        = (Ellipse2D)(randomEllipse.transform(TransformMatrix2D.rotate(randomAngle)));
                randomPoint          = TransformMatrix2D.rotate(randomAngle).multiply(randomPoint);
                randomPointOnEllipse = TransformMatrix2D.rotate(randomAngle).multiply(randomPointOnEllipse);
                // System.Console.Writef("RayCast No. %d: Ellipse at (%.2f,%.2f), radii: (%.2f,%.2f). Rotation angle: %.2f, original angle: %.2f, point on ellipse: (%.2f,%.2f), outside point: (%.2f,%.2f), distance: %.2f.\n", 1000-counter, randomEllipse.getCenter().getX(), randomEllipse.getCenter().getY(), randomEllipse.getHorizontalLength(), randomEllipse.getVerticalLength(), randomEllipse.getAngle(), randomAngle, randomPointOnEllipse.getX(), randomPointOnEllipse.getY(), randomPoint.getX(), randomPoint.getY(), randomPoint.distance(randomPointOnEllipse));

                Assert.AreEqual(randomPoint.distance(randomPointOnEllipse), randomEllipse.rayCast(new Ray2D(randomPoint, randomPoint.vec(randomPointOnEllipse))), 0.000005d);
                counter -= 1;
            } while (counter > 0);
        }