/* * $Id$ * This file is a part of the Arakhne Foundation Classes, http://www.arakhne.org/afc * * Copyright (c) 2000-2012 Stephane GALLAND. * Copyright (c) 2005-10, Multiagent Team, Laboratoire Systemes et Transports, * Universite de Technologie de Belfort-Montbeliard. * Copyright (c) 2013-2016 The original authors, and other authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.arakhne.afc.math.geometry.d2.afp; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; import org.junit.Test; import org.arakhne.afc.math.geometry.PathElementType; import org.arakhne.afc.math.geometry.PathWindingRule; import org.arakhne.afc.math.geometry.d2.Point2D; import org.arakhne.afc.math.geometry.d2.Shape2D; import org.arakhne.afc.math.geometry.d2.Transform2D; import org.arakhne.afc.math.geometry.d2.Vector2D; import org.arakhne.afc.math.geometry.d2.ai.PathIterator2ai; @SuppressWarnings("all") public abstract class AbstractEllipse2afpTest<T extends Ellipse2afp<?, T, ?, ?, ?, B>, B extends Rectangle2afp<?, ?, ?, ?, ?, B>> extends AbstractShape2afpTest<T, B> { @Override protected final T createShape() { return (T) createEllipse(5, 8, 5, 10); } @Test @Override public void testClone() { T clone = this.shape.clone(); assertNotNull(clone); assertNotSame(this.shape, clone); assertEquals(this.shape.getClass(), clone.getClass()); assertEpsilonEquals(5, clone.getMinX()); assertEpsilonEquals(8, clone.getMinY()); assertEpsilonEquals(10, clone.getMaxX()); assertEpsilonEquals(18, clone.getMaxY()); } @Test @Override public void equalsObject() { assertFalse(this.shape.equals(null)); assertFalse(this.shape.equals(new Object())); assertFalse(this.shape.equals(createEllipse(0, 0, 5, 10))); assertFalse(this.shape.equals(createEllipse(5, 8, 6, 10))); assertFalse(this.shape.equals(createSegment(5, 8, 6, 10))); assertTrue(this.shape.equals(this.shape)); assertTrue(this.shape.equals(createEllipse(5, 8, 5, 10))); } @Test @Override public void equalsObject_withPathIterator() { assertFalse(this.shape.equals(createEllipse(0, 0, 5, 10).getPathIterator())); assertFalse(this.shape.equals(createEllipse(5, 8, 6, 10).getPathIterator())); assertFalse(this.shape.equals(createSegment(5, 8, 6, 10).getPathIterator())); assertTrue(this.shape.equals(this.shape.getPathIterator())); assertTrue(this.shape.equals(createEllipse(5, 8, 5, 10).getPathIterator())); } @Test @Override public void equalsToPathIterator() { assertFalse(this.shape.equalsToPathIterator((PathIterator2ai) null)); assertFalse(this.shape.equalsToPathIterator(createEllipse(0, 0, 5, 10).getPathIterator())); assertFalse(this.shape.equalsToPathIterator(createEllipse(5, 8, 6, 10).getPathIterator())); assertFalse(this.shape.equalsToPathIterator(createSegment(5, 8, 6, 10).getPathIterator())); assertTrue(this.shape.equalsToPathIterator(this.shape.getPathIterator())); assertTrue(this.shape.equalsToPathIterator(createEllipse(5, 8, 5, 10).getPathIterator())); } @Test @Override public void equalsToShape() { assertFalse(this.shape.equalsToShape(null)); assertFalse(this.shape.equalsToShape((T) createEllipse(0, 0, 5, 10))); assertFalse(this.shape.equalsToShape((T) createEllipse(5, 8, 6, 10))); assertTrue(this.shape.equalsToShape(this.shape)); assertTrue(this.shape.equalsToShape((T) createEllipse(5, 8, 5, 10))); } @Override public void isEmpty() { assertFalse(this.shape.isEmpty()); this.shape.clear(); assertTrue(this.shape.isEmpty()); } @Override public void clear() { this.shape.clear(); assertEpsilonEquals(0, this.shape.getMinX()); assertEpsilonEquals(0, this.shape.getMinY()); assertEpsilonEquals(0, this.shape.getMaxX()); assertEpsilonEquals(0, this.shape.getMaxY()); } @Override public void containsDoubleDouble() { assertFalse(this.shape.contains(0,0)); assertFalse(this.shape.contains(11,10)); assertFalse(this.shape.contains(11,50)); assertTrue(this.shape.contains(9,12)); assertTrue(this.shape.contains(9,11)); assertTrue(this.shape.contains(8,12)); assertFalse(this.shape.contains(3,7)); assertFalse(this.shape.contains(10,12)); assertFalse(this.shape.contains(10,11)); assertTrue(this.shape.contains(9,10)); assertFalse(this.shape.contains(9.5,9.5)); } @Override public void containsPoint2D() { assertFalse(this.shape.contains(createPoint(0,0))); assertFalse(this.shape.contains(createPoint(11,10))); assertFalse(this.shape.contains(createPoint(11,50))); assertTrue(this.shape.contains(createPoint(9,12))); assertTrue(this.shape.contains(createPoint(9,11))); assertTrue(this.shape.contains(createPoint(8,12))); assertFalse(this.shape.contains(createPoint(3,7))); assertFalse(this.shape.contains(createPoint(10,12))); assertFalse(this.shape.contains(createPoint(10,11))); assertTrue(this.shape.contains(createPoint(9,10))); assertFalse(this.shape.contains(createPoint(9.5,9.5))); } @Override public void getClosestPointTo() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = this.shape.getClosestPointTo(createPoint(0, 0)); assertFpPointEquals(6.58303, 8.34848, result); // Lower / Upper result = this.shape.getClosestPointTo(createPoint(0, 24)); assertFpPointEquals(6.39777, 17.4878, result); // Upper / Lower result = this.shape.getClosestPointTo(createPoint(24, 0)); assertFpPointEquals(9.08189, 9.12824, result); // Upper / Upper result = this.shape.getClosestPointTo(createPoint(24, 24)); assertFpPointEquals(9.2587, 16.55357, result); // On x axis (positive) result = this.shape.getClosestPointTo(createPoint(18, 13)); assertFpPointEquals(10, 13, result); // On x axis (negative) result = this.shape.getClosestPointTo(createPoint(0, 13)); assertFpPointEquals(5, 13, result); // On y axis (positive) result = this.shape.getClosestPointTo(createPoint(7.5, 24)); assertFpPointEquals(7.5, 18, result); // On y axis (negative) result = this.shape.getClosestPointTo(createPoint(7.5, 0)); assertFpPointEquals(7.5, 8, result); // Inside result = this.shape.getClosestPointTo(createPoint(6, 11)); assertFpPointEquals(6, 11, result); // result = this.shape.getClosestPointTo(createPoint(10, 10)); assertFpPointEquals(9.55546, 10.15389, result); } @Override public void getFarthestPointTo() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = this.shape.getFarthestPointTo(createPoint(0, 0)); assertFpPointEquals(8.05329, 17.92645, result); // Lower / Upper result = this.shape.getFarthestPointTo(createPoint(0, 24)); assertFpPointEquals(8.12711, 8.08913, result); // Upper / Lower result = this.shape.getFarthestPointTo(createPoint(24, 0)); assertFpPointEquals(6.31519, 17.75919, result); // Upper / Upper result = this.shape.getFarthestPointTo(createPoint(24, 24)); assertFpPointEquals(6.16141, 8.28223, result); // On x axis (positive) result = this.shape.getFarthestPointTo(createPoint(18, 13)); assertFpPointEquals(5, 13, result); // On x axis (negative) result = this.shape.getFarthestPointTo(createPoint(0, 13)); assertFpPointEquals(10, 13, result); // On y axis (positive) result = this.shape.getFarthestPointTo(createPoint(7.5, 24)); assertFpPointEquals(7.5, 8, result); // On y axis (negative) result = this.shape.getFarthestPointTo(createPoint(7.5, 0)); assertFpPointEquals(7.5, 18, result); // Inside result = this.shape.getFarthestPointTo(createPoint(6, 11)); assertFpPointEquals(7.82555, 17.97659, result); } @Override public void getDistance() { // Values computed with GeoGebra tool // Lower / Lower assertEpsilonEquals(10.63171, this.shape.getDistance(createPoint(0, 0))); // Lower / Upper assertEpsilonEquals(9.12909, this.shape.getDistance(createPoint(0, 24))); // Upper / Lower assertEpsilonEquals(17.48928, this.shape.getDistance(createPoint(24, 0))); // Upper / Upper assertEpsilonEquals(16.5153, this.shape.getDistance(createPoint(24, 24))); // On x axis (positive) assertEpsilonEquals(8, this.shape.getDistance(createPoint(18, 13))); // On x axis (negative) assertEpsilonEquals(5, this.shape.getDistance(createPoint(0, 13))); // On y axis (positive) assertEpsilonEquals(6, this.shape.getDistance(createPoint(7.5, 24))); // On y axis (negative) assertEpsilonEquals(8, this.shape.getDistance(createPoint(7.5, 0))); // Inside assertEpsilonEquals(0, this.shape.getDistance(createPoint(6, 11))); } @Override public void getDistanceSquared() { // Values computed with GeoGebra tool // Lower / Lower assertEpsilonEquals(113.03335, this.shape.getDistanceSquared(createPoint(0, 0))); // Lower / Upper assertEpsilonEquals(83.34011, this.shape.getDistanceSquared(createPoint(0, 24))); // Upper / Lower assertEpsilonEquals(305.87484, this.shape.getDistanceSquared(createPoint(24, 0))); // Upper / Upper assertEpsilonEquals(272.75517, this.shape.getDistanceSquared(createPoint(24, 24))); // On x axis (positive) assertEpsilonEquals(64, this.shape.getDistanceSquared(createPoint(18, 13))); // On x axis (negative) assertEpsilonEquals(25, this.shape.getDistanceSquared(createPoint(0, 13))); // On y axis (positive) assertEpsilonEquals(36, this.shape.getDistanceSquared(createPoint(7.5, 24))); // On y axis (negative) assertEpsilonEquals(64, this.shape.getDistanceSquared(createPoint(7.5, 0))); // Inside assertEpsilonEquals(0, this.shape.getDistanceSquared(createPoint(6, 11))); } @Override public void getDistanceL1() { // Values computed with GeoGebra tool // Lower / Lower assertEpsilonEquals(14.93151, this.shape.getDistanceL1(createPoint(0, 0))); // Lower / Upper assertEpsilonEquals(12.90997, this.shape.getDistanceL1(createPoint(0, 24))); // Upper / Lower assertEpsilonEquals(24.04635, this.shape.getDistanceL1(createPoint(24, 0))); // Upper / Upper assertEpsilonEquals(22.18773, this.shape.getDistanceL1(createPoint(24, 24))); // On x axis (positive) assertEpsilonEquals(8, this.shape.getDistanceL1(createPoint(18, 13))); // On x axis (negative) assertEpsilonEquals(5, this.shape.getDistanceL1(createPoint(0, 13))); // On y axis (positive) assertEpsilonEquals(6, this.shape.getDistanceL1(createPoint(7.5, 24))); // On y axis (negative) assertEpsilonEquals(8, this.shape.getDistanceL1(createPoint(7.5, 0))); // Inside assertEpsilonEquals(0, this.shape.getDistanceL1(createPoint(6, 11))); } @Override public void getDistanceLinf() { // Values computed with GeoGebra tool // Lower / Lower assertEpsilonEquals(8.34848, this.shape.getDistanceLinf(createPoint(0, 0))); // Lower / Upper assertEpsilonEquals(6.5122, this.shape.getDistanceLinf(createPoint(0, 24))); // Upper / Lower assertEpsilonEquals(14.91811, this.shape.getDistanceLinf(createPoint(24, 0))); // Upper / Upper assertEpsilonEquals(14.7413, this.shape.getDistanceLinf(createPoint(24, 24))); // On x axis (positive) assertEpsilonEquals(8, this.shape.getDistanceLinf(createPoint(18, 13))); // On x axis (negative) assertEpsilonEquals(5, this.shape.getDistanceLinf(createPoint(0, 13))); // On y axis (positive) assertEpsilonEquals(6, this.shape.getDistanceLinf(createPoint(7.5, 24))); // On y axis (negative) assertEpsilonEquals(8, this.shape.getDistanceLinf(createPoint(7.5, 0))); // Inside assertEpsilonEquals(0, this.shape.getDistanceLinf(createPoint(6, 11))); } @Override public void setIT() { this.shape.set((T) createEllipse(17, 20, 7, 45)); assertEpsilonEquals(17, this.shape.getMinX()); assertEpsilonEquals(20, this.shape.getMinY()); assertEpsilonEquals(24, this.shape.getMaxX()); assertEpsilonEquals(65, this.shape.getMaxY()); } @Override public void getPathIterator() { PathIterator2afp pi = this.shape.getPathIterator(); assertElement(pi, PathElementType.MOVE_TO, 10, 13); assertElement(pi, PathElementType.CURVE_TO, 10, 15.76142374915397, 8.880711874576983, 18, 7.5, 18); assertElement(pi, PathElementType.CURVE_TO, 6.119288125423017, 18, 5, 15.76142374915397, 5, 13); assertElement(pi, PathElementType.CURVE_TO, 5, 10.23857625084603, 6.119288125423017, 8, 7.5, 8); assertElement(pi, PathElementType.CURVE_TO, 8.880711874576983, 8, 10, 10.23857625084603, 10, 13); assertElement(pi, PathElementType.CLOSE, 10, 13); assertNoElement(pi); } @Override public void getPathIteratorTransform2D() { PathIterator2afp pi = this.shape.getPathIterator(null); assertElement(pi, PathElementType.MOVE_TO, 10, 13); assertElement(pi, PathElementType.CURVE_TO, 10, 15.76142374915397, 8.880711874576983, 18, 7.5, 18); assertElement(pi, PathElementType.CURVE_TO, 6.119288125423017, 18, 5, 15.76142374915397, 5, 13); assertElement(pi, PathElementType.CURVE_TO, 5, 10.23857625084603, 6.119288125423017, 8, 7.5, 8); assertElement(pi, PathElementType.CURVE_TO, 8.880711874576983, 8, 10, 10.23857625084603, 10, 13); assertElement(pi, PathElementType.CLOSE, 10, 13); assertNoElement(pi); Transform2D tr; tr = new Transform2D(); pi = this.shape.getPathIterator(tr); assertElement(pi, PathElementType.MOVE_TO, 10, 13); assertElement(pi, PathElementType.CURVE_TO, 10, 15.76142374915397, 8.880711874576983, 18, 7.5, 18); assertElement(pi, PathElementType.CURVE_TO, 6.119288125423017, 18, 5, 15.76142374915397, 5, 13); assertElement(pi, PathElementType.CURVE_TO, 5, 10.23857625084603, 6.119288125423017, 8, 7.5, 8); assertElement(pi, PathElementType.CURVE_TO, 8.880711874576983, 8, 10, 10.23857625084603, 10, 13); assertElement(pi, PathElementType.CLOSE, 10, 13); assertNoElement(pi); tr = new Transform2D(); tr.makeTranslationMatrix(10, -10); pi = this.shape.getPathIterator(tr); assertElement(pi, PathElementType.MOVE_TO, 20, 3); assertElement(pi, PathElementType.CURVE_TO, 20, 5.76142374915397, 18.880711874576983, 8, 17.5, 8); assertElement(pi, PathElementType.CURVE_TO, 16.119288125423017, 8, 15, 5.76142374915397, 15, 3); assertElement(pi, PathElementType.CURVE_TO, 15, 0.23857625084603, 16.119288125423017, -2, 17.5, -2); assertElement(pi, PathElementType.CURVE_TO, 18.880711874576983, -2, 20, 0.23857625084603, 20, 3); assertElement(pi, PathElementType.CLOSE, 20, 3); assertNoElement(pi); } @Override public void createTransformedShape() { Transform2D tr; Shape2afp newShape; newShape = this.shape.createTransformedShape(null); assertNotNull(newShape); assertNotSame(this.shape, newShape); assertEquals(this.shape, newShape); tr = new Transform2D(); newShape = this.shape.createTransformedShape(tr); assertNotNull(newShape); assertNotSame(this.shape, newShape); assertEquals(this.shape, newShape); tr = new Transform2D(); tr.makeTranslationMatrix(10, -10); newShape = this.shape.createTransformedShape(tr); assertNotNull(newShape); assertNotSame(this.shape, newShape); assertTrue(newShape instanceof Path2afp); PathIterator2afp pi = this.shape.getPathIterator(tr); assertElement(pi, PathElementType.MOVE_TO, 20, 3); assertElement(pi, PathElementType.CURVE_TO, 20, 5.76142374915397, 18.880711874576983, 8, 17.5, 8); assertElement(pi, PathElementType.CURVE_TO, 16.119288125423017, 8, 15, 5.76142374915397, 15, 3); assertElement(pi, PathElementType.CURVE_TO, 15, 0.23857625084603, 16.119288125423017, -2, 17.5, -2); assertElement(pi, PathElementType.CURVE_TO, 18.880711874576983, -2, 20, 0.23857625084603, 20, 3); assertElement(pi, PathElementType.CLOSE, 20, 3); assertNoElement(pi); } @Override public void translateDoubleDouble() { this.shape.translate(123.456, -789.123); assertEpsilonEquals(128.456, this.shape.getMinX()); assertEpsilonEquals(-781.123, this.shape.getMinY()); assertEpsilonEquals(133.456, this.shape.getMaxX()); assertEpsilonEquals(-771.123, this.shape.getMaxY()); } @Override public void translateVector2D() { this.shape.translate(createVector(123.456, -789.123)); assertEpsilonEquals(128.456, this.shape.getMinX()); assertEpsilonEquals(-781.123, this.shape.getMinY()); assertEpsilonEquals(133.456, this.shape.getMaxX()); assertEpsilonEquals(-771.123, this.shape.getMaxY()); } @Override public void toBoundingBox() { B box = this.shape.toBoundingBox(); assertEpsilonEquals(5, box.getMinX()); assertEpsilonEquals(8, box.getMinY()); assertEpsilonEquals(10, box.getMaxX()); assertEpsilonEquals(18, box.getMaxY()); } @Override public void toBoundingBoxB() { B box = createRectangle(0, 0, 0, 0); this.shape.toBoundingBox(box); assertEpsilonEquals(5, box.getMinX()); assertEpsilonEquals(8, box.getMinY()); assertEpsilonEquals(10, box.getMaxX()); assertEpsilonEquals(18, box.getMaxY()); } @Override public void containsRectangle2afp() { assertFalse(this.shape.contains(createRectangle(0, 0, 1, 1))); assertFalse(this.shape.contains(createRectangle(4, 6, 100, 100))); assertFalse(this.shape.contains(createRectangle(4, 6, 4, 6))); assertFalse(this.shape.contains(createRectangle(5, 8, 2.5, 5))); assertTrue(this.shape.contains(createRectangle(6, 10, 2, 6))); } @Override public void containsShape2D() { assertFalse(this.shape.contains(createCircle(0, 0, 1))); assertFalse(this.shape.contains(createCircle(4, 6, 100))); assertFalse(this.shape.contains(createCircle(4, 6, 4))); assertFalse(this.shape.contains(createCircle(5, 8, 2.5))); assertFalse(this.shape.contains(createCircle(6, 10, 2))); assertTrue(this.shape.contains(createCircle(7.4, 11, 2))); } @Override public void intersectsRectangle2afp() { assertFalse(this.shape.intersects(createRectangle(0, 0, 1, 1))); assertTrue(this.shape.intersects(createRectangle(4, 6, 100, 100))); assertTrue(this.shape.intersects(createRectangle(4, 6, 4, 6))); assertTrue(this.shape.intersects(createRectangle(5, 8, 2.5, 5))); assertTrue(this.shape.intersects(createRectangle(6, 10, 2, 6))); assertFalse(this.shape.intersects(createRectangle(5, 8, .1, .1))); } @Override public void intersectsCircle2afp() { assertFalse(this.shape.intersects(createCircle(0, 0, 1))); assertTrue(this.shape.intersects(createCircle(7.5, 7, 2))); assertFalse(this.shape.intersects(createCircle(3, 8, 2))); assertFalse(this.shape.intersects(createCircle(4, 8, 2))); } @Override public void intersectsEllipse2afp() { assertFalse(this.shape.intersects(createEllipse(0, 0, 1, 2))); assertFalse(this.shape.intersects(createEllipse(100, 0, 1, 2))); assertFalse(this.shape.intersects(createEllipse(100, 100, 1, 2))); assertFalse(this.shape.intersects(createEllipse(0, 100, 1, 2))); assertFalse(this.shape.intersects(createEllipse(0, 8, 5, 10))); assertTrue(this.shape.intersects(createEllipse(0.1, 8, 5, 10))); assertTrue(this.shape.intersects(createEllipse(8, 10, .5, .2))); assertFalse(this.shape.intersects(createEllipse(2, 6, 4, 2))); assertTrue(this.shape.intersects(createEllipse(2.5, 3, 5, 10))); assertFalse(this.shape.intersects(createEllipse(1, -1, 5, 10))); } @Override public void intersectsSegment2afp() { assertFalse(this.shape.intersects(createSegment(5, -4, -1, -5))); assertFalse(this.shape.intersects(createSegment(5, -4, 7, 6))); assertFalse(this.shape.intersects(createSegment(5, -4, 14, 13))); assertFalse(this.shape.intersects(createSegment(5, -4, 11, 13))); assertTrue(this.shape.intersects(createSegment(5, -4, 11, 18))); assertFalse(this.shape.intersects(createSegment(0, 8, 50, 8))); assertFalse(this.shape.intersects(createSegment(5, 0, 5, 50))); assertTrue(this.shape.intersects(createSegment(5, -4, 6, 12))); } @Override public void intersectsTriangle2afp() { Triangle2afp triangle = createTriangle(5, 8, -10, 1, -1, -2); assertFalse(createEllipse(5, 8, 2, 1).intersects(triangle)); assertTrue(createEllipse(-10, 1, 2, 1).intersects(triangle)); assertTrue(createEllipse(-1, -2, 2, 1).intersects(triangle)); assertFalse(createEllipse(1, 0, 2, 1).intersects(triangle)); assertFalse(createEllipse(0.9, 0, 2, 1).intersects(triangle)); assertFalse(createEllipse(0.8, 0, 2, 1).intersects(triangle)); assertFalse(createEllipse(0.7, 0, 2, 1).intersects(triangle)); assertFalse(createEllipse(0.6, 0, 2, 1).intersects(triangle)); assertTrue(createEllipse(0.5, 0, 2, 1).intersects(triangle)); assertFalse(createEllipse(-1.12464, -2.86312, 2, 1).intersects(triangle)); } @Override public void intersectsPath2afp() { Path2afp p; p = createPath(); p.moveTo(-20, -20); p.lineTo(-20, 20); p.lineTo(20, 20); p.lineTo(20, -20); assertFalse(this.shape.intersects(p)); p.closePath(); assertTrue(this.shape.intersects(p)); p = createPath(); p.moveTo(-20, -20); p.lineTo(5, 8); p.lineTo(-20, 20); assertFalse(this.shape.intersects(p)); p.closePath(); assertFalse(this.shape.intersects(p)); p = createPath(); p.moveTo(-20, -20); p.lineTo(20, 20); p.lineTo(-20, 20); assertTrue(this.shape.intersects(p)); p.closePath(); assertTrue(this.shape.intersects(p)); p = createPath(); p.moveTo(-20, -20); p.lineTo(-20, 20); p.lineTo(20, -20); assertFalse(this.shape.intersects(p)); p.closePath(); assertFalse(this.shape.intersects(p)); p = createPath(); p.moveTo(-20, 20); p.lineTo(10, 8); p.lineTo(20, 8); assertTrue(this.shape.intersects(p)); p.closePath(); assertTrue(this.shape.intersects(p)); p = createPath(); p.moveTo(-20, 20); p.lineTo(20, 18); p.lineTo(10, 8); assertFalse(this.shape.intersects(p)); p.closePath(); assertTrue(this.shape.intersects(p)); } @Override public void intersectsPathIterator2afp() { Path2afp<?, ?, ?, ?, ?, B> p; p = createPath(); p.moveTo(-20, -20); p.lineTo(-20, 20); p.lineTo(20, 20); p.lineTo(20, -20); assertFalse(this.shape.intersects(p.getPathIterator())); p.closePath(); assertTrue(this.shape.intersects(p.getPathIterator())); p = createPath(); p.moveTo(-20, -20); p.lineTo(5, 8); p.lineTo(-20, 20); assertFalse(this.shape.intersects(p.getPathIterator())); p.closePath(); assertFalse(this.shape.intersects(p.getPathIterator())); p = createPath(); p.moveTo(-20, -20); p.lineTo(20, 20); p.lineTo(-20, 20); assertTrue(this.shape.intersects(p.getPathIterator())); p.closePath(); assertTrue(this.shape.intersects(p.getPathIterator())); p = createPath(); p.moveTo(-20, -20); p.lineTo(-20, 20); p.lineTo(20, -20); assertFalse(this.shape.intersects(p.getPathIterator())); p.closePath(); assertFalse(this.shape.intersects(p.getPathIterator())); p = createPath(); p.moveTo(-20, 20); p.lineTo(10, 8); p.lineTo(20, 8); assertTrue(this.shape.intersects(p.getPathIterator())); p.closePath(); assertTrue(this.shape.intersects(p.getPathIterator())); p = createPath(); p.moveTo(-20, 20); p.lineTo(20, 18); p.lineTo(10, 8); assertFalse(this.shape.intersects(p.getPathIterator())); p.closePath(); assertTrue(this.shape.intersects(p.getPathIterator())); } @Override public void intersectsOrientedRectangle2afp() { OrientedRectangle2afp rectangle = createOrientedRectangle( 6, 9, 0.894427190999916, -0.447213595499958, 13.999990000000002, 12.999989999999997); assertFalse(createEllipse(0, -5, 2, 1).intersects(rectangle)); assertFalse(createEllipse(0, -4.5, 2, 1).intersects(rectangle)); assertTrue(createEllipse(0, -4, 2, 1).intersects(rectangle)); assertTrue(createEllipse(4, 4, 2, 1).intersects(rectangle)); assertFalse(createEllipse(20, -2, 2, 1).intersects(rectangle)); assertTrue(createEllipse(-15, -10, 50, 50).intersects(rectangle)); } @Test @Override public void intersectsParallelogram2afp() { Parallelogram2afp para = createParallelogram( 6, 9, 2.425356250363330e-01, 9.701425001453320e-01, 9.219544457292887, -7.071067811865475e-01, 7.071067811865475e-01, 1.264911064067352e+01); assertFalse(createEllipse(0, 0, 2, 1).intersects(para)); assertFalse(createEllipse(0, 1, 2, 1).intersects(para)); assertTrue(createEllipse(0, 2, 2, 1).intersects(para)); assertTrue(createEllipse(0, 3, 2, 1).intersects(para)); assertTrue(createEllipse(0, 4, 2, 1).intersects(para)); assertTrue(createEllipse(1, 3, 2, 1).intersects(para)); assertTrue(createEllipse(5, 5, 2, 1).intersects(para)); assertFalse(createEllipse(0.1, 1, 2, 1).intersects(para)); assertFalse(createEllipse(0.2, 1, 2, 1).intersects(para)); assertTrue(createEllipse(0.3, 1, 2, 1).intersects(para)); assertTrue(createEllipse(0.4, 1, 2, 1).intersects(para)); assertFalse(createEllipse(-7, 7.5, 2, 1).intersects(para)); } @Override public void intersectsRoundRectangle2afp() { assertFalse(this.shape.intersects(createRoundRectangle(0, 0, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(0, 20, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(20, 20, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(20, 0, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(0, 12, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(20, 12, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(6, 0, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(6, 20, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(6, 10, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(4, 12, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(9, 12, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(6, 7, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(6, 17, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(4, 7, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(4, 17, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(9, 7, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(9, 17, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(3, 6, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(3.1, 6.1, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(3.2, 6.2, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(3.2, 6.3, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(4.3, 6.4, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(4.3, 6.5, 2, 2, .1, .2))); assertFalse(this.shape.intersects(createRoundRectangle(4.3, 6.6, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(4.3, 6.7, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(4.3, 6.8, 2, 2, .1, .2))); assertTrue(this.shape.intersects(createRoundRectangle(4.3, 6.9, 2, 2, .1, .2))); } @Test public void staticFindsClosestPointShallowEllipsePoint_horizontalAxisGreater() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(0, 0, 5, 8, 10, 5, result); assertFpPointEquals(6, 9, result); // Lower / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(0, 24, 5, 8, 10, 5, result); assertFpPointEquals(6.33945, 12.20297, result); // Upper / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(24, 0, 5, 8, 10, 5, result); assertFpPointEquals(14.48365, 9.39355, result); // Upper / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(24, 24, 5, 8, 10, 5, result); assertFpPointEquals(14.24203, 11.82337, result); // On x axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(18, 10.5, 5, 8, 10, 5, result); assertFpPointEquals(15, 10.5, result); // On x axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(0, 10.5, 5, 8, 10, 5, result); assertFpPointEquals(5, 10.5, result); // On y axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(10, 24, 5, 8, 10, 5, result); assertFpPointEquals(10, 13, result); // On y axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(10, 0, 5, 8, 10, 5, result); assertFpPointEquals(10, 8, result); // Inside result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(6, 11, 5, 8, 10, 5, result); assertFpPointEquals(5.42383, 11.50731, result); } @Test public void staticFindsClosestPointShallowEllipsePoint_verticalAxisGreater() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(0, 0, 5, 8, 5, 10, result); assertFpPointEquals(6.58303, 8.34848, result); // Lower / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(0, 24, 5, 8, 5, 10, result); assertFpPointEquals(6.39777, 17.4878, result); // Upper / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(24, 0, 5, 8, 5, 10, result); assertFpPointEquals(9.08189, 9.12824, result); // Upper / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(24, 24, 5, 8, 5, 10, result); assertFpPointEquals(9.2587, 16.55357, result); // On x axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(18, 13, 5, 8, 5, 10, result); assertFpPointEquals(10, 13, result); // On x axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(0, 13, 5, 8, 5, 10, result); assertFpPointEquals(5, 13, result); // On y axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(7.5, 24, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 18, result); // On y axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(7.5, 0, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 8, result); // Inside result = createPoint(0, 0); Ellipse2afp.findsClosestPointShallowEllipsePoint(6, 11, 5, 8, 5, 10, result); assertFpPointEquals(5.25055, 10.81828, result); } @Test public void staticFindsClosestPointSolidEllipsePoint_horizontalAxisGreater() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(0, 0, 5, 8, 10, 5, result); assertFpPointEquals(6, 9, result); // Lower / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(0, 24, 5, 8, 10, 5, result); assertFpPointEquals(6.33945, 12.20297, result); // Upper / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(24, 0, 5, 8, 10, 5, result); assertFpPointEquals(14.48365, 9.39355, result); // Upper / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(24, 24, 5, 8, 10, 5, result); assertFpPointEquals(14.24203, 11.82337, result); // On x axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(18, 10.5, 5, 8, 10, 5, result); assertFpPointEquals(15, 10.5, result); // On x axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(0, 10.5, 5, 8, 10, 5, result); assertFpPointEquals(5, 10.5, result); // On y axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(10, 24, 5, 8, 10, 5, result); assertFpPointEquals(10, 13, result); // On y axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(10, 0, 5, 8, 10, 5, result); assertFpPointEquals(10, 8, result); // Inside result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(6, 11, 5, 8, 10, 5, result); assertFpPointEquals(6, 11, result); // result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(9.897519745562938, 7.003543789189412, 2, 1, 10, 8, result); assertFpPointEquals(9.897519745562938, 7.003543789189412, result); } @Test public void staticFindsClosestPointSolidEllipsePoint_verticalAxisGreater() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(0, 0, 5, 8, 5, 10, result); assertFpPointEquals(6.58303, 8.34848, result); // Lower / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(0, 24, 5, 8, 5, 10, result); assertFpPointEquals(6.39777, 17.4878, result); // Upper / Lower result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(24, 0, 5, 8, 5, 10, result); assertFpPointEquals(9.08189, 9.12824, result); // Upper / Upper result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(24, 24, 5, 8, 5, 10, result); assertFpPointEquals(9.2587, 16.55357, result); // On x axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(18, 13, 5, 8, 5, 10, result); assertFpPointEquals(10, 13, result); // On x axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(0, 13, 5, 8, 5, 10, result); assertFpPointEquals(5, 13, result); // On y axis (positive) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(7.5, 24, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 18, result); // On y axis (negative) result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(7.5, 0, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 8, result); result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(7.5, 7, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 8, result); // Inside result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(6, 11, 5, 8, 5, 10, result); assertFpPointEquals(6, 11, result); // Outside / touching the bounding box of the ellipse result = createPoint(0, 0); Ellipse2afp.findsClosestPointSolidEllipsePoint(3, 8, 5, 8, 5, 10, result); assertFpPointEquals(5.75656, 9.41648, result); } @Test public void staticComputeFarthestPointToShallowEllipse_verticalAxisGreater() { // Values computed with GeoGebra tool Point2D result; // Lower / Lower result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(0, 0, 5, 8, 5, 10, result); assertFpPointEquals(8.05329, 17.92645, result); // Lower / Upper result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(0, 24, 5, 8, 5, 10, result); assertFpPointEquals(8.12711, 8.08913, result); // Upper / Lower result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(24, 0, 5, 8, 5, 10, result); assertFpPointEquals(6.31519, 17.75919, result); // Upper / Upper result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(24, 24, 5, 8, 5, 10, result); assertFpPointEquals(6.16141, 8.28223, result); // On x axis (positive) result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(18, 13, 5, 8, 5, 10, result); assertFpPointEquals(5, 13, result); // On x axis (negative) result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(0, 13, 5, 8, 5, 10, result); assertFpPointEquals(10, 13, result); // On y axis (positive) result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(7.5, 24, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 8, result); // On y axis (negative) result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(7.5, 0, 5, 8, 5, 10, result); assertFpPointEquals(7.5, 18, result); // Inside result = createPoint(0, 0); Ellipse2afp.findsFarthestPointShallowEllipsePoint(6, 11, 5, 8, 5, 10, result); assertFpPointEquals(7.82555, 17.97659, result); } @Test public void staticContainsEllipsePoint() { assertTrue(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 1, 0.5)); assertTrue(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 1.5, 0.7)); assertTrue(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 0.3, 0.3)); assertTrue(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 2, 0.5)); assertTrue(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 1, 1)); assertFalse(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 0, 0)); assertFalse(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 0, 1)); assertFalse(Ellipse2afp.containsEllipsePoint(0, 0, 2, 1, 1, 10)); } @Test public void staticContainsEllipseRectangle() { assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, 0, 0, 1, 1)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, -5, -5, -4, -4)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, .5, .5, 5.5, 5.5)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, .5, .5, 5.5, 1.1)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, -5, -5, 0, 0)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, -9, -9, -5, -5)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, -5, -9, -1, -5)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, 5, -5, 11, 0)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, -5, -5, -5, -5)); assertFalse(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, -5, -5, -4.9, -4.9)); assertTrue(Ellipse2afp.containsEllipseRectangle(0, 0, 1, 1, .25, .25, .75, .75)); } @Test public void staticIntersectsEllipseEllipse() { assertTrue(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, 0, 0, 1, 1)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 6, 6)); assertTrue(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 6.1, 6.1)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, .5, .5, 4.5, 4.5)); assertTrue(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, .5, .5, 4.5, .5)); assertTrue(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 10, 10)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 1, 1)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 9, 1)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, 5, -5, 1, 10)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 5, 5)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(0, 0, 1, 1, -5, -5, 5.1, 5.1)); assertFalse(Ellipse2afp.intersectsEllipseEllipse(5, 8, 5, 10, 1, -1, 5, 10)); } @Test public void staticIntersectsEllipseLine() { assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, 0, 0, 1, 1)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, 1, 1)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, .5, .5, 5, 5)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, .5, .5, 5, .6)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, 5, 5)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, -4, -4)); assertFalse(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, 4, -4)); assertFalse(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, 5, -5, 6, 5)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, .0, .0)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, .1, .1)); assertTrue(Ellipse2afp.intersectsEllipseLine(0, 0, 1, 1, -5, -5, .4, .3)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.7773438, -3.0272121, 6.7890625, -3.1188917)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.7890625, -3.1188917, 6.8007812, -3.2118688)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8007812, -3.2118688, 6.8125, -3.3061523)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8125, -3.3061523, 6.8242188, -3.401752)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8242188, -3.401752, 6.8359375, -3.4986773)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8359375, -3.4986773, 6.8476562, -3.5969372)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8476562, -3.5969372, 6.859375, -3.6965408)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.859375, -3.6965408, 6.8710938, -3.7974977)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8710938, -3.7974977, 6.8828125, -3.8998175)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8828125, -3.8998175, 6.8945312, -4.003509)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.8945312, -4.003509, 6.90625, -4.1085815)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.90625, -4.1085815, 6.9179688, -4.2150445)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.9179688, -4.2150445, 6.9296875, -4.3229074)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.9296875, -4.3229074, 6.9414062, -4.4321795)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.9414062, -4.4321795, 6.953125, -4.5428696)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.953125, -4.5428696, 6.9648438, -4.6549873)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.9648438, -4.6549873, 6.9765625, -4.7685423)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.9765625, -4.7685423, 6.9882812, -4.8835435)); assertTrue(Ellipse2afp.intersectsEllipseLine( 6, -5, 1, 2, 6.9882812, -4.8835435, 7, -5)); assertTrue(Ellipse2afp.intersectsEllipseLine( 0, 0, 1, 2, .5, -1, .5, 2)); assertTrue(Ellipse2afp.intersectsEllipseLine( 0, 0, 1, 2, .5, -1, .5, -.5)); } @Test public void staticIntersectsEllipseRectangle() { assertTrue(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, 0, 0, 1, 1)); assertTrue(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, -5, -5, 1, 1)); assertTrue(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, .5, .5, 5, 5)); assertTrue(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, .5, .5, 5, .6)); assertTrue(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, -5, -5, 5, 5)); assertFalse(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, -5, -5, -4, -4)); assertFalse(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, -5, -5, 4, -4)); assertFalse(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, 5, -5, 6, 5)); assertFalse(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, -5, -5, .0, .0)); assertFalse(Ellipse2afp.intersectsEllipseRectangle(0, 0, 1, 1, -5, -5, .1, .1)); assertTrue(Ellipse2afp.intersectsEllipseRectangle(5, 8, .2, .4, 5, 8, 5.05, 8.1)); } @Test public void staticIntersectsEllipseSegment_noIntersectionAtTouching() { assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, 0, 0, 1, 1, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, 1, 1, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, .5, .5, 5, 5, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, .5, .5, 5, .6, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, 5, 5, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, -4, -4, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, 4, -4, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, 5, -5, 6, 5, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, .0, .0, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, .1, .1, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, .4, .3, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.7773438, -3.0272121, 6.7890625, -3.1188917, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.7890625, -3.1188917, 6.8007812, -3.2118688, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8007812, -3.2118688, 6.8125, -3.3061523, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8125, -3.3061523, 6.8242188, -3.401752, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8242188, -3.401752, 6.8359375, -3.4986773, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8359375, -3.4986773, 6.8476562, -3.5969372, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8476562, -3.5969372, 6.859375, -3.6965408, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.859375, -3.6965408, 6.8710938, -3.7974977, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8710938, -3.7974977, 6.8828125, -3.8998175, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8828125, -3.8998175, 6.8945312, -4.003509, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8945312, -4.003509, 6.90625, -4.1085815, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.90625, -4.1085815, 6.9179688, -4.2150445, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9179688, -4.2150445, 6.9296875, -4.3229074, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9296875, -4.3229074, 6.9414062, -4.4321795, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9414062, -4.4321795, 6.953125, -4.5428696, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.953125, -4.5428696, 6.9648438, -4.6549873, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9648438, -4.6549873, 6.9765625, -4.7685423, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9765625, -4.7685423, 6.9882812, -4.8835435, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9882812, -4.8835435, 7, -5, false)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 0, 0, 1, 2, .5, -1, .5, 2, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 0, 0, 1, 2, .5, -1, .5, -.5, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(5, 8, 5, 10, 0, 8, 50, 8, false)); assertFalse(Ellipse2afp.intersectsEllipseSegment(5, 8, 5, 10, 5, 0, 5, 50, false)); } @Test public void staticIntersectsEllipseSegment_intersectionAtTouching() { assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, 0, 0, 1, 1, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, 1, 1, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, .5, .5, 5, 5, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, .5, .5, 5, .6, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, 5, 5, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, -4, -4, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, 4, -4, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, 5, -5, 6, 5, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, .0, .0, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, .1, .1, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(0, 0, 1, 1, -5, -5, .4, .3, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.7773438, -3.0272121, 6.7890625, -3.1188917, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.7890625, -3.1188917, 6.8007812, -3.2118688, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8007812, -3.2118688, 6.8125, -3.3061523, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8125, -3.3061523, 6.8242188, -3.401752, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8242188, -3.401752, 6.8359375, -3.4986773, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8359375, -3.4986773, 6.8476562, -3.5969372, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8476562, -3.5969372, 6.859375, -3.6965408, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.859375, -3.6965408, 6.8710938, -3.7974977, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8710938, -3.7974977, 6.8828125, -3.8998175, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8828125, -3.8998175, 6.8945312, -4.003509, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.8945312, -4.003509, 6.90625, -4.1085815, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.90625, -4.1085815, 6.9179688, -4.2150445, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9179688, -4.2150445, 6.9296875, -4.3229074, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9296875, -4.3229074, 6.9414062, -4.4321795, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9414062, -4.4321795, 6.953125, -4.5428696, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.953125, -4.5428696, 6.9648438, -4.6549873, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9648438, -4.6549873, 6.9765625, -4.7685423, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9765625, -4.7685423, 6.9882812, -4.8835435, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 6, -5, 1, 2, 6.9882812, -4.8835435, 7, -5, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment( 0, 0, 1, 2, .5, -1, .5, 2, true)); assertFalse(Ellipse2afp.intersectsEllipseSegment( 0, 0, 1, 2, .5, -1, .5, -.5, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(5, 8, 5, 10, 0, 8, 50, 8, true)); assertTrue(Ellipse2afp.intersectsEllipseSegment(5, 8, 5, 10, 5, 0, 5, 50, true)); } @Test public void staticIntersectsEllipseCircle() { assertFalse(Ellipse2afp.intersectsEllipseCircle(5, 8, 5, 10, 0, 0, 1)); assertTrue(Ellipse2afp.intersectsEllipseCircle(5, 8, 5, 10, 7.5, 7, 2)); assertFalse(Ellipse2afp.intersectsEllipseCircle(5, 8, 5, 10, 3, 8, 2)); assertFalse(Ellipse2afp.intersectsEllipseCircle(5, 8, 5, 10, 4, 8, 2)); } @Test public void setDoubleDoubleDoubleDouble() { this.shape.set(123.456, 789.123, 456.789, 123.456); assertEpsilonEquals(123.456, this.shape.getMinX()); assertEpsilonEquals(789.123, this.shape.getMinY()); assertEpsilonEquals(580.245, this.shape.getMaxX()); assertEpsilonEquals(912.579, this.shape.getMaxY()); } @Test public void setPoint2DPoint2D() { this.shape.set(createPoint(123.456, 789.123), createPoint(456.789, 123.456)); assertEpsilonEquals(123.456, this.shape.getMinX()); assertEpsilonEquals(123.456, this.shape.getMinY()); assertEpsilonEquals(456.789, this.shape.getMaxX()); assertEpsilonEquals(789.123, this.shape.getMaxY()); } @Test public void setWidth() { this.shape.setWidth(123.456); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(128.456, this.shape.getMaxX()); assertEpsilonEquals(18, this.shape.getMaxY()); } @Test public void setHeight() { this.shape.setHeight(123.456); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(10, this.shape.getMaxX()); assertEpsilonEquals(131.456, this.shape.getMaxY()); } @Test public void setFromCornersDoubleDoubleDoubleDouble() { this.shape.setFromCorners(123.456, 789.123, 456.789, 159.357); assertEpsilonEquals(123.456, this.shape.getMinX()); assertEpsilonEquals(159.357, this.shape.getMinY()); assertEpsilonEquals(456.789, this.shape.getMaxX()); assertEpsilonEquals(789.123, this.shape.getMaxY()); } @Test public void setFromCornersPoint2DPoint2D() { this.shape.setFromCorners(createPoint(123.456, 789.123), createPoint(456.789, 159.357)); assertEpsilonEquals(123.456, this.shape.getMinX()); assertEpsilonEquals(159.357, this.shape.getMinY()); assertEpsilonEquals(456.789, this.shape.getMaxX()); assertEpsilonEquals(789.123, this.shape.getMaxY()); } @Test public void setFromCenterDoubleDoubleDoubleDouble() { this.shape.setFromCenter(123.456, 789.123, 456.789, 159.357); assertEpsilonEquals(-209.877, this.shape.getMinX()); assertEpsilonEquals(159.357, this.shape.getMinY()); assertEpsilonEquals(456.789, this.shape.getMaxX()); assertEpsilonEquals(1418.889, this.shape.getMaxY()); } @Test public void setFromCenterPoint2DPoint2D() { this.shape.setFromCenter(createPoint(123.456, 789.123), createPoint(456.789, 159.357)); assertEpsilonEquals(-209.877, this.shape.getMinX()); assertEpsilonEquals(159.357, this.shape.getMinY()); assertEpsilonEquals(456.789, this.shape.getMaxX()); assertEpsilonEquals(1418.889, this.shape.getMaxY()); } @Test public void getMinX() { assertEpsilonEquals(5, this.shape.getMinX()); } @Test public void setMinX() { this.shape.setMinX(0); assertEpsilonEquals(0, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(10, this.shape.getMaxX()); assertEpsilonEquals(18, this.shape.getMaxY()); this.shape.setMinX(456); assertEpsilonEquals(456, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(456, this.shape.getMaxX()); assertEpsilonEquals(18, this.shape.getMaxY()); } @Test public void getCenterX() { assertEpsilonEquals(7.5, this.shape.getCenterX()); } @Test public void getMaxX() { assertEpsilonEquals(10, this.shape.getMaxX()); } @Test public void setMaxX() { this.shape.setMaxX(1456); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(1456, this.shape.getMaxX()); assertEpsilonEquals(18, this.shape.getMaxY()); this.shape.setMaxX(0); assertEpsilonEquals(0, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(0, this.shape.getMaxX()); assertEpsilonEquals(18, this.shape.getMaxY()); } @Test public void getMinY() { assertEpsilonEquals(8, this.shape.getMinY()); } @Test public void setMinY() { this.shape.setMinY(0); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(0, this.shape.getMinY()); assertEpsilonEquals(10, this.shape.getMaxX()); assertEpsilonEquals(18, this.shape.getMaxY()); this.shape.setMinY(456); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(456, this.shape.getMinY()); assertEpsilonEquals(10, this.shape.getMaxX()); assertEpsilonEquals(456, this.shape.getMaxY()); } @Test public void getCenterY() { assertEpsilonEquals(13, this.shape.getCenterY()); } @Test public void getMaxY() { assertEpsilonEquals(18, this.shape.getMaxY()); } @Test public void setMaxY() { this.shape.setMaxY(1456); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(8, this.shape.getMinY()); assertEpsilonEquals(10, this.shape.getMaxX()); assertEpsilonEquals(1456, this.shape.getMaxY()); this.shape.setMaxY(0); assertEpsilonEquals(5, this.shape.getMinX()); assertEpsilonEquals(0, this.shape.getMinY()); assertEpsilonEquals(10, this.shape.getMaxX()); assertEpsilonEquals(0, this.shape.getMaxY()); } @Test public void getWidth() { assertEpsilonEquals(5, this.shape.getWidth()); } @Test public void getHeight() { assertEpsilonEquals(10, this.shape.getHeight()); } @Test public void inflateDoubleDoubleDoubleDouble() { this.shape.inflate(15, -10, -20, 20); assertEpsilonEquals(-10, this.shape.getMinX()); assertEpsilonEquals(18, this.shape.getMinY()); assertEpsilonEquals(-10, this.shape.getMaxX()); assertEpsilonEquals(38, this.shape.getMaxY()); } @Test public void getHorizontalRadius_verticalAxisGreater() { assertEpsilonEquals(2.5, this.shape.getHorizontalRadius()); } @Test public void getVerticalRadius_verticalAxisGreater() { assertEpsilonEquals(5, this.shape.getVerticalRadius()); } @Test public void getMinFocusPoint_verticalAxisGreater() { Point2D p = this.shape.getMinFocusPoint(); assertNotNull(p); assertEpsilonEquals(7.5, p.getX()); assertEpsilonEquals(8.66987, p.getY()); } @Test public void getMaxFocusPoint_verticalAxisGreater() { Point2D p = this.shape.getMaxFocusPoint(); assertNotNull(p); assertEpsilonEquals(7.5, p.getX()); assertEpsilonEquals(17.33013, p.getY()); } @Test public void getHorizontalRadius_horizontalAxisGreater() { this.shape.set(5, 8, 10, 5); assertEpsilonEquals(5, this.shape.getHorizontalRadius()); } @Test public void getVerticalRadius_horizontalAxisGreater() { this.shape.set(5, 8, 10, 5); assertEpsilonEquals(2.5, this.shape.getVerticalRadius()); } @Test public void getMinFocusPoint_horizontalAxisGreater() { this.shape.set(5, 8, 10, 5); Point2D p = this.shape.getMinFocusPoint(); assertNotNull(p); assertEpsilonEquals(5.66987, p.getX()); assertEpsilonEquals(10.5, p.getY()); } @Test public void getMaxFocusPoint_horizontalAxisGreater() { this.shape.set(5, 8, 10, 5); Point2D p = this.shape.getMaxFocusPoint(); assertNotNull(p); assertEpsilonEquals(14.3301, p.getX()); assertEpsilonEquals(10.5, p.getY()); } @Override public void intersectsShape2D() { assertTrue(this.shape.intersects((Shape2D) createCircle(7.5, 7, 2))); assertTrue(this.shape.intersects((Shape2D) createEllipse(0.1, 8, 5, 10))); } @Override public void operator_addVector2D() { this.shape.operator_add(createVector(123.456, -789.123)); assertEpsilonEquals(128.456, this.shape.getMinX()); assertEpsilonEquals(-781.123, this.shape.getMinY()); assertEpsilonEquals(133.456, this.shape.getMaxX()); assertEpsilonEquals(-771.123, this.shape.getMaxY()); } @Override public void operator_plusVector2D() { T shape = this.shape.operator_plus(createVector(123.456, -789.123)); assertEpsilonEquals(128.456, shape.getMinX()); assertEpsilonEquals(-781.123, shape.getMinY()); assertEpsilonEquals(133.456, shape.getMaxX()); assertEpsilonEquals(-771.123, shape.getMaxY()); } @Override public void operator_removeVector2D() { this.shape.operator_remove(createVector(123.456, -789.123)); assertEpsilonEquals(-118.456, this.shape.getMinX()); assertEpsilonEquals(797.123, this.shape.getMinY()); assertEpsilonEquals(-113.456, this.shape.getMaxX()); assertEpsilonEquals(807.123, this.shape.getMaxY()); } @Override public void operator_minusVector2D() { T shape = this.shape.operator_minus(createVector(123.456, -789.123)); assertEpsilonEquals(-118.456, shape.getMinX()); assertEpsilonEquals(797.123, shape.getMinY()); assertEpsilonEquals(-113.456, shape.getMaxX()); assertEpsilonEquals(807.123, shape.getMaxY()); } @Override public void operator_multiplyTransform2D() { Transform2D tr; Shape2afp newShape; newShape = this.shape.operator_multiply(null); assertNotNull(newShape); assertNotSame(this.shape, newShape); assertEquals(this.shape, newShape); tr = new Transform2D(); newShape = this.shape.operator_multiply(tr); assertNotNull(newShape); assertNotSame(this.shape, newShape); assertEquals(this.shape, newShape); tr = new Transform2D(); tr.makeTranslationMatrix(10, -10); newShape = this.shape.operator_multiply(tr); assertNotNull(newShape); assertNotSame(this.shape, newShape); assertTrue(newShape instanceof Path2afp); PathIterator2afp pi = this.shape.getPathIterator(tr); assertElement(pi, PathElementType.MOVE_TO, 20, 3); assertElement(pi, PathElementType.CURVE_TO, 20, 5.76142374915397, 18.880711874576983, 8, 17.5, 8); assertElement(pi, PathElementType.CURVE_TO, 16.119288125423017, 8, 15, 5.76142374915397, 15, 3); assertElement(pi, PathElementType.CURVE_TO, 15, 0.23857625084603, 16.119288125423017, -2, 17.5, -2); assertElement(pi, PathElementType.CURVE_TO, 18.880711874576983, -2, 20, 0.23857625084603, 20, 3); assertElement(pi, PathElementType.CLOSE, 20, 3); assertNoElement(pi); } @Override public void operator_andPoint2D() { assertFalse(this.shape.operator_and(createPoint(0,0))); assertFalse(this.shape.operator_and(createPoint(11,10))); assertFalse(this.shape.operator_and(createPoint(11,50))); assertTrue(this.shape.operator_and(createPoint(9,12))); assertTrue(this.shape.operator_and(createPoint(9,11))); assertTrue(this.shape.operator_and(createPoint(8,12))); assertFalse(this.shape.operator_and(createPoint(3,7))); assertFalse(this.shape.operator_and(createPoint(10,12))); assertFalse(this.shape.operator_and(createPoint(10,11))); assertTrue(this.shape.operator_and(createPoint(9,10))); assertFalse(this.shape.operator_and(createPoint(9.5,9.5))); } @Override public void operator_andShape2D() { assertTrue(this.shape.operator_and(createCircle(7.5, 7, 2))); assertTrue(this.shape.operator_and(createEllipse(0.1, 8, 5, 10))); } @Override public void operator_upToPoint2D() { assertEpsilonEquals(10.63171, this.shape.operator_upTo(createPoint(0, 0))); assertEpsilonEquals(9.12909, this.shape.operator_upTo(createPoint(0, 24))); assertEpsilonEquals(17.48928, this.shape.operator_upTo(createPoint(24, 0))); assertEpsilonEquals(16.5153, this.shape.operator_upTo(createPoint(24, 24))); assertEpsilonEquals(8, this.shape.operator_upTo(createPoint(18, 13))); assertEpsilonEquals(5, this.shape.operator_upTo(createPoint(0, 13))); assertEpsilonEquals(6, this.shape.operator_upTo(createPoint(7.5, 24))); assertEpsilonEquals(8, this.shape.operator_upTo(createPoint(7.5, 0))); assertEpsilonEquals(0, this.shape.operator_upTo(createPoint(6, 11))); } @Override @Test public void getClosestPointToCircle2afp() { assertFpPointEquals(6.58303, 8.34848, this.shape.getClosestPointTo(createCircle(0, 0, 1))); assertFpPointEquals(8.77919, 17.29589, this.shape.getClosestPointTo(createCircle(12, 20, 1))); assertFpPointEquals(9, 9, this.shape.getClosestPointTo(createCircle(10.5, 8, 1))); assertClosestPointInBothShapes(this.shape, createCircle(6, 11, 1)); assertClosestPointInBothShapes(this.shape, createCircle(10, 10, 1)); } @Override @Test public void getDistanceSquaredCircle2afp() { assertEpsilonEquals(92.76993, this.shape.getDistanceSquared(createCircle(0, 0, 1))); assertEpsilonEquals(10.27493, this.shape.getDistanceSquared(createCircle(12, 20, 1))); assertEpsilonEquals(0.64445, this.shape.getDistanceSquared(createCircle(10.5, 8, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createCircle(6, 11, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createCircle(10, 10, 1))); } @Override @Test public void getClosestPointToSegment2afp() { assertFpPointEquals(6.60692, 8.32992, this.shape.getClosestPointTo(createSegment(0, 0, 1, 1))); assertFpPointEquals(6.49572, 8.42117, this.shape.getClosestPointTo(createSegment(0, 1, 1, 0))); assertFpPointEquals(8.00989, 8.1051, this.shape.getClosestPointTo(createSegment(4, 6, 16, 11))); assertFpPointEquals(8.63812, 17.453, this.shape.getClosestPointTo(createSegment(7, 20, 16, 11))); assertClosestPointInBothShapes(this.shape, createSegment(7, 20, 6, 12)); assertClosestPointInBothShapes(this.shape, createSegment(7, 20, 10, 0)); } @Override @Test public void getDistanceSquaredSegment2afp() { assertEpsilonEquals(85.1653, this.shape.getDistanceSquared(createSegment(0, 0, 1, 1))); assertEpsilonEquals(97.26811, this.shape.getDistanceSquared(createSegment(0, 1, 1, 0))); assertEpsilonEquals(0.16073, this.shape.getDistanceSquared(createSegment(4, 6, 16, 11))); assertEpsilonEquals(0.41402, this.shape.getDistanceSquared(createSegment(7, 20, 16, 11))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createSegment(7, 20, 6, 12))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createSegment(7, 20, 10, 0))); } @Override @Test public void getClosestPointToEllipse2afp() { assertFpPointEquals(6.72184, 8.24838, this.shape.getClosestPointTo(createEllipse(0, 0, 2, 1))); assertFpPointEquals(6.26802, 17.35074, this.shape.getClosestPointTo(createEllipse(1, 20, 2, 1))); assertFpPointEquals(9.86507, 14.62044, this.shape.getClosestPointTo(createEllipse(15, 15, 2, 1))); assertFpPointEquals(8.8872, 8.84000, this.shape.getClosestPointTo(createEllipse(9, 8, 2, 1))); assertClosestPointInBothShapes(this.shape, createEllipse(9, 9, 2, 1)); assertClosestPointInBothShapes(this.shape, createEllipse(6, 11, 2, 1)); } @Override @Test public void getDistanceSquaredEllipse2afp() { assertEpsilonEquals(79.70281, this.shape.getDistanceSquared(createEllipse(0, 0, 2, 1))); assertEpsilonEquals(19.93072, this.shape.getDistanceSquared(createEllipse(1, 20, 2, 1))); assertEpsilonEquals(27.10531, this.shape.getDistanceSquared(createEllipse(15, 15, 2, 1))); assertEpsilonEquals(0.05777, this.shape.getDistanceSquared(createEllipse(9, 8, 2, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createEllipse(9, 9, 2, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createEllipse(6, 11, 2, 1))); } @Override @Test public void getClosestPointToRectangle2afp() { assertFpPointEquals(6.72506, 8.24628, this.shape.getClosestPointTo(createRectangle(0, 0, 2, 1))); assertFpPointEquals(6.22081, 17.29589, this.shape.getClosestPointTo(createRectangle(1, 20, 2, 1))); assertFpPointEquals(9.91272, 14.30964, this.shape.getClosestPointTo(createRectangle(15, 15, 2, 1))); assertFpPointEquals(9, 9, this.shape.getClosestPointTo(createRectangle(9, 8, 2, 1))); assertClosestPointInBothShapes(this.shape, createRectangle(9, 9, 2, 1)); assertClosestPointInBothShapes(this.shape, createRectangle(6, 11, 2, 1)); } @Override @Test public void getDistanceSquaredRectangle2afp() { assertEpsilonEquals(74.83474, this.shape.getDistanceSquared(createRectangle(0, 0, 2, 1))); assertEpsilonEquals(17.68581, this.shape.getDistanceSquared(createRectangle(1, 20, 2, 1))); assertEpsilonEquals(26.35703, this.shape.getDistanceSquared(createRectangle(15, 15, 2, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createRectangle(9, 8, 2, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createRectangle(9, 9, 2, 1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createRectangle(6, 11, 2, 1))); } protected Triangle2afp createTestTriangle(double dx, double dy) { return createTriangle(dx, dy, dx + 6, dy + 3, dx - 1, dy + 2.5); } @Override @Test public void getClosestPointToTriangle2afp() { assertFpPointEquals(7.60851, 8.00471, this.shape.getClosestPointTo(createTestTriangle(6, 4))); assertFpPointEquals(6.44422, 8.46775, this.shape.getClosestPointTo(createTestTriangle(0, 5))); assertClosestPointInBothShapes(this.shape, createTestTriangle(4, 14)); assertFpPointEquals(9.12342, 16.80236, this.shape.getClosestPointTo(createTestTriangle(18, 22))); } @Override @Test public void getDistanceSquaredTriangle2afp() { assertEpsilonEquals(1.72933, this.shape.getDistanceSquared(createTestTriangle(6, 4))); assertEpsilonEquals(0.41609, this.shape.getDistanceSquared(createTestTriangle(0, 5))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestTriangle(4, 14))); assertEpsilonEquals(105.80901, this.shape.getDistanceSquared(createTestTriangle(18, 22))); } protected MultiShape2afp createTestMultiShape(double dx, double dy) { Circle2afp circle = createCircle(dx - 3, dy + 2, 2); Triangle2afp triangle = createTestTriangle(dx +1, dy - 1); MultiShape2afp multishape = createMultiShape(); multishape.add(circle); multishape.add(triangle); return multishape; } @Override @Test public void getClosestPointToMultiShape2afp() { assertFpPointEquals(6.22081, 8.70411, this.shape.getClosestPointTo(createTestMultiShape(6, 4))); assertFpPointEquals(7.223799841106517, 8.030608297899144, this.shape.getClosestPointTo(createTestMultiShape(0, 5))); assertClosestPointInBothShapes(this.shape, createTestMultiShape(4, 14)); assertFpPointEquals(8.603213137685831, 17.48683441764339, this.shape.getClosestPointTo(createTestMultiShape(18, 22))); } @Override @Test public void getDistanceSquaredMultiShape2afp() { assertEpsilonEquals(4.86401, this.shape.getDistanceSquared(createTestMultiShape(6, 4))); assertEpsilonEquals(1.112239832577874, this.shape.getDistanceSquared(createTestMultiShape(0, 5))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestMultiShape(4, 14))); assertEpsilonEquals(50.82386, this.shape.getDistanceSquared(createTestMultiShape(18, 22))); } protected OrientedRectangle2afp createTestOrientedRectangle(double dx, double dy) { Vector2D r = createVector(4, 1).toUnitVector(); return createOrientedRectangle(dx, dy, r.getX(), r.getY(), 2, 1); } @Override @Test public void getClosestPointToOrientedRectangle2afp() { assertFpPointEquals(7.56154, 8.00152, this.shape.getClosestPointTo(createTestOrientedRectangle(6, 4))); assertFpPointEquals(5.93629, 9.09882, this.shape.getClosestPointTo(createTestOrientedRectangle(0, 5))); assertClosestPointInBothShapes(this.shape, createTestOrientedRectangle(4, 14)); assertFpPointEquals(9.19246, 16.67999, this.shape.getClosestPointTo(createTestOrientedRectangle(18, 22))); } @Override @Test public void getDistanceSquaredOrientedRectangle2afp() { assertEpsilonEquals(6.5022, this.shape.getDistanceSquared(createTestOrientedRectangle(6, 4))); assertEpsilonEquals(24.95386, this.shape.getDistanceSquared(createTestOrientedRectangle(0, 5))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestOrientedRectangle(4, 14))); assertEpsilonEquals(65.48578, this.shape.getDistanceSquared(createTestOrientedRectangle(18, 22))); } protected Parallelogram2afp createTestParallelogram(double dx, double dy) { Vector2D r = createVector(4, 1).toUnitVector(); Vector2D s = createVector(-1, -1).toUnitVector(); return createParallelogram(dx, dy, r.getX(), r.getY(), 2, s.getX(), s.getY(), 1); } @Override @Test public void getClosestPointToParallelogram2afp() { assertFpPointEquals(7.79322, 8.03451, this.shape.getClosestPointTo(createTestParallelogram(6, 4))); assertFpPointEquals(6.12038, 8.83028, this.shape.getClosestPointTo(createTestParallelogram(0, 5))); assertClosestPointInBothShapes(this.shape, createTestParallelogram(4, 14)); assertFpPointEquals(9.0662, 16.89719, this.shape.getClosestPointTo(createTestParallelogram(18, 22))); } @Override @Test public void getDistanceSquaredParallelogram2afp() { assertEpsilonEquals(8.78906, this.shape.getDistanceSquared(createTestParallelogram(6, 4))); assertEpsilonEquals(19.02116, this.shape.getDistanceSquared(createTestParallelogram(0, 5))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestParallelogram(4, 14))); assertEpsilonEquals(54.81199, this.shape.getDistanceSquared(createTestParallelogram(18, 22))); } @Override @Test public void getClosestPointToRoundRectangle2afp() { assertFpPointEquals(6.71823, 8.25075, this.shape.getClosestPointTo(createRoundRectangle(0, 0, 2, 1, .1, .1))); assertFpPointEquals(6.22177, 17.29703, this.shape.getClosestPointTo(createRoundRectangle(1, 20, 2, 1, .1, .1))); assertFpPointEquals(9.90516, 14.36881, this.shape.getClosestPointTo(createRoundRectangle(15, 15, 2, 1, .1, .1))); assertFpPointEquals(8.98498, 8.97765, this.shape.getClosestPointTo(createRoundRectangle(9, 8, 2, 1, .1, .1))); assertClosestPointInBothShapes(this.shape, createRoundRectangle(9, 9, 2, 1, .1, .1)); assertClosestPointInBothShapes(this.shape, createRoundRectangle(6, 11, 2, 1, .1, .1)); } @Override @Test public void getDistanceSquaredRoundRectangle2afp() { assertEpsilonEquals(75.50109, this.shape.getDistanceSquared(createRoundRectangle(0, 0, 2, 1, .1, .1))); assertEpsilonEquals(18.0315, this.shape.getDistanceSquared(createRoundRectangle(1, 20, 2, 1, .1, .1))); assertEpsilonEquals(26.48855, this.shape.getDistanceSquared(createRoundRectangle(15, 15, 2, 1, .1, .1))); assertEpsilonEquals(0.00159, this.shape.getDistanceSquared(createRoundRectangle(9, 8, 2, 1, .1, .1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createRoundRectangle(9, 9, 2, 1, .1, .1))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createRoundRectangle(6, 11, 2, 1, .1, .1))); } protected Path2afp createTestPath(double dx, double dy) { Path2afp path = createPath(); path.moveTo(dx, dy); path.lineTo(dx - 16, dy + 12); path.lineTo(dx - 5, dy + 21); path.lineTo(dx + 10, dy + 15); path.lineTo(dx - 8, dy + 1); path.lineTo(dx - 20, dy + 12); path.lineTo(dx - 2, dy + 28); path.lineTo(dx + 20, dy + 20); return path; } protected Path2afp createTestPath(double dx, double dy, PathWindingRule rule) { Path2afp path = createPath(rule); path.moveTo(dx, dy); path.lineTo(dx - 16, dy + 12); path.lineTo(dx - 5, dy + 21); path.lineTo(dx + 10, dy + 15); path.lineTo(dx - 8, dy + 1); path.lineTo(dx - 20, dy + 12); path.lineTo(dx - 2, dy + 28); path.lineTo(dx + 20, dy + 20); path.closePath(); return path; } @Override @Test public void getClosestPointToPath2afp() { assertFpPointEquals(6.52689, 17.60708, this.shape.getClosestPointTo(createTestPath(12, 0))); assertFpPointEquals(6.52689, 17.60708, this.shape.getClosestPointTo(createTestPath(12, 0, PathWindingRule.EVEN_ODD))); assertClosestPointInBothShapes(this.shape, createTestPath(12, 0, PathWindingRule.NON_ZERO)); // assertFpPointEquals(8.35958, 8.3034, this.shape.getClosestPointTo(createTestPath(8, 0))); assertFpPointEquals(8.35958, 8.3034, this.shape.getClosestPointTo(createTestPath(8, 0, PathWindingRule.EVEN_ODD))); assertClosestPointInBothShapes(this.shape, createTestPath(8, 0, PathWindingRule.NON_ZERO)); // assertFpPointEquals(6.64042, 17.6966, this.shape.getClosestPointTo(createTestPath(2, 8))); assertClosestPointInBothShapes(this.shape, createTestPath(2, 8, PathWindingRule.EVEN_ODD)); assertClosestPointInBothShapes(this.shape, createTestPath(2, 8, PathWindingRule.NON_ZERO)); // assertClosestPointInBothShapes(this.shape, createTestPath(2, 6)); assertClosestPointInBothShapes(this.shape, createTestPath(2, 6, PathWindingRule.EVEN_ODD)); assertClosestPointInBothShapes(this.shape, createTestPath(2, 6, PathWindingRule.NON_ZERO)); } @Override @Test public void getDistanceSquaredPath2afp() { assertEpsilonEquals(5.41207, this.shape.getDistanceSquared(createTestPath(12, 0))); assertEpsilonEquals(5.41207, this.shape.getDistanceSquared(createTestPath(12, 0, PathWindingRule.EVEN_ODD))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(12, 0, PathWindingRule.NON_ZERO))); // assertEpsilonEquals(0.40027, this.shape.getDistanceSquared(createTestPath(8, 0))); assertEpsilonEquals(0.40027, this.shape.getDistanceSquared(createTestPath(8, 0, PathWindingRule.EVEN_ODD))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(8, 0, PathWindingRule.NON_ZERO))); // assertEpsilonEquals(0.80243, this.shape.getDistanceSquared(createTestPath(2, 8))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(2, 8, PathWindingRule.EVEN_ODD))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(2, 8, PathWindingRule.NON_ZERO))); // assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(2, 6))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(2, 6, PathWindingRule.EVEN_ODD))); assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(2, 6, PathWindingRule.NON_ZERO))); } }