/*
* $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.assertSame;
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.afp.Triangle2afp.TriangleFeature;
import org.arakhne.afc.math.geometry.d2.ai.PathIterator2ai;
@SuppressWarnings("all")
public abstract class AbstractTriangle2afpTest<T extends Triangle2afp<?, T, ?, ?, ?, B>,
B extends Rectangle2afp<?, ?, ?, ?, ?, B>> extends AbstractShape2afpTest<T, B> {
@Override
protected final T createShape() {
return (T) createTriangle(5, 8, -10, 1, -1, -2);
}
@Test
public void staticFindsClosestFeatureTrianglePoint() {
assertSame(TriangleFeature.THIRD_CORNER,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -12, 8));
assertSame(TriangleFeature.SECOND_SEGMENT,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -7, 10));
assertSame(TriangleFeature.SECOND_CORNER,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, 0, 1));
assertSame(TriangleFeature.FIRST_SEGMENT,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -10, 1));
assertSame(TriangleFeature.FIRST_CORNER,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -12, 1));
assertSame(TriangleFeature.THIRD_SEGMENT,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -12, 5.5));
assertSame(TriangleFeature.INSIDE,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -9.9, 5.1));
assertSame(TriangleFeature.INSIDE,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -9.9, 5.1));
assertSame(TriangleFeature.INSIDE,
Triangle2afp.findsClosestFeatureTrianglePoint(-10, 5, -9, 5, -10, 5.5, -9.9, 5.1));
}
@Test
public void staticIsCCW() {
assertTrue(Triangle2afp.isCCW(5, 8, -10, 1, -1, -2));
assertTrue(Triangle2afp.isCCW(-10, 1, -1, -2, 5, 8));
assertTrue(Triangle2afp.isCCW(-1, -2, 5, 8, -10, 1));
assertFalse(Triangle2afp.isCCW(5, 8, -1, -2, -10, 1));
assertFalse(Triangle2afp.isCCW(-1, -2, -10, 1, 5, 8));
assertFalse(Triangle2afp.isCCW(-10, 1, 5, 8, -1, -2));
assertFalse(Triangle2afp.isCCW(-6, 8, -4, 2, -6, 0));
assertTrue(Triangle2afp.isCCW(-6, 8, -6, 0, -4, 2));
}
@Test
public void staticContainsTrianglePoint() {
assertTrue(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 0, 0));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 11, 10));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 11, 50));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 9, 12));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 9, 11));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 0, 6));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 8, 12));
assertTrue(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 3, 7));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 10, 11));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, 9, 10));
assertTrue(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, -4, 2));
assertFalse(Triangle2afp.containsTrianglePoint(5, 8, -10, 1, -1, -2, -8, -5));
}
@Test
public void staticContainsTriangleRectangle() {
assertFalse(Triangle2afp.containsTriangleRectangle(5, 8, -10, 1, -1, -2, 0, 0, 1, 1));
assertTrue(Triangle2afp.containsTriangleRectangle(5, 8, -10, 1, -1, -2, -2, 1, 1, 1));
assertFalse(Triangle2afp.containsTriangleRectangle(5, 8, -10, 1, -1, -2, -30, 20, 1, 1));
assertFalse(Triangle2afp.containsTriangleRectangle(5, 8, -10, 1, -1, -2, -10.5, 0.5, 1, 1));
}
@Test
public void staticFindsClosestFarthestPointsTrianglePoint() {
Point2D closest, farthest;
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, 0, 0, closest, farthest);
assertEpsilonEquals(0, closest.getX());
assertEpsilonEquals(0, closest.getY());
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, 9, 12, closest, farthest);
assertEpsilonEquals(5, closest.getX());
assertEpsilonEquals(8, closest.getY());
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, 0, 6, closest, farthest);
assertEpsilonEquals(0.12774, closest.getX());
assertEpsilonEquals(5.72628, closest.getY());
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, -20, 1, closest, farthest);
assertEpsilonEquals(-10, closest.getX());
assertEpsilonEquals(1, closest.getY());
assertEpsilonEquals(5, farthest.getX());
assertEpsilonEquals(8, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, -6, -1, closest, farthest);
assertEpsilonEquals(-5.8, closest.getX());
assertEpsilonEquals(-0.4, closest.getY());
assertEpsilonEquals(5, farthest.getX());
assertEpsilonEquals(8, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, -1, -6, closest, farthest);
assertEpsilonEquals(-1, closest.getX());
assertEpsilonEquals(-2, closest.getY());
assertEpsilonEquals(5, farthest.getX());
assertEpsilonEquals(8, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, 6, 2, closest, farthest);
assertEpsilonEquals(2.61765, closest.getX());
assertEpsilonEquals(4.02941, closest.getY());
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
closest = createPoint(Double.NaN, Double.NaN);
farthest = createPoint(Double.NaN, Double.NaN);
Triangle2afp.findsClosestFarthestPointsTrianglePoint(5, 8, -10, 1, -1, -2, 5, 9, closest, farthest);
assertEpsilonEquals(5, closest.getX());
assertEpsilonEquals(8, closest.getY());
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
}
@Test
public void staticCalculatesSquaredDistanceTrianglePoint() {
assertEpsilonEquals(0, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, 0, 0));
assertEpsilonEquals(32, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, 9, 12));
assertEpsilonEquals(.09124, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, 0, 6));
assertEpsilonEquals(100, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, -20, 1));
assertEpsilonEquals(0.40001, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, -6, -1));
assertEpsilonEquals(16, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, -1, -6));
assertEpsilonEquals(15.55876, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, 6, 2));
assertEpsilonEquals(1, Triangle2afp.calculatesSquaredDistanceTrianglePoint(5, 8, -10, 1, -1, -2, 5, 9));
assertEpsilonEquals(3.97445, Triangle2afp.calculatesSquaredDistanceTrianglePoint(
-10, 7, -4, 6, -10, 6,
-3.156934306569343, 4.193430656934306));
assertEpsilonEquals(0, Triangle2afp.calculatesSquaredDistanceTrianglePoint(
4, 16, 7, 19, 3, 17,
5, 18));
assertEpsilonEquals(0, Triangle2afp.calculatesSquaredDistanceTrianglePoint(
4, 16, 3, 17, 7, 19,
5, 18));
assertEpsilonEquals(0, Triangle2afp.calculatesSquaredDistanceTrianglePoint(
6, 10, 8, 11.5, 7.5, 8.4,
7.5, 8.4));
assertEpsilonEquals(0, Triangle2afp.calculatesSquaredDistanceTrianglePoint(
6, 10, 7.5, 8.4, 8, 11.5,
7.5, 8.4));
}
@Test
public void staticIntersectsTriangleCircle() {
assertTrue(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 5, 8, 1));
assertTrue(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, -10, 1, 1));
assertTrue(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, -1, -2, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 2, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.9, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.8, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.7, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.6, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.5, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.4, 0, 1));
assertTrue(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 1.3, 0, 1));
assertFalse(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 5, 9, 1));
assertTrue(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, 5, 8.9, 1));
assertTrue(Triangle2afp.intersectsTriangleCircle(5, 8, -10, 1, -1, -2, -4, 1, 1));
}
@Test
public void staticIntersectsTriangleEllipse() {
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 5, 8, 2, 1));
assertTrue(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, -10, 1, 2, 1));
assertTrue(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, -1, -2, 2, 1));
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 1, 0, 2, 1));
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 0.9, 0, 2, 1));
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 0.8, 0, 2, 1));
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 0.7, 0, 2, 1));
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 0.6, 0, 2, 1));
assertTrue(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, 0.5, 0, 2, 1));
assertFalse(Triangle2afp.intersectsTriangleEllipse(5, 8, -10, 1, -1, -2, -1.12464, -2.86312, 2, 1));
}
@Test
public void staticIntersectsTriangleSegment() {
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -6, -2, -4, 0));
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -6, -2, 2, 0));
assertFalse(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -6, -2, 14, -4));
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -2, 2, 4, 0));
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -2, 2, 0, 0));
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -4, -2, -6, 6));
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, 6, 7, -6, 6));
assertTrue(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, 0, 5, -6, 6));
assertFalse(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -5, 5, -6, 6));
assertFalse(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -4, -2, 2, -2));
assertFalse(Triangle2afp.intersectsTriangleSegment(5, 8, -10, 1, -1, -2, -1, -2, 5, 8));
}
@Test
public void staticIntersectsTriangleTriangle_ab() {
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-8, 6.5, -4, 6, -7, 11));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-8, -2, -10, -4, -6, -6));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
6, 2, 8, -2, 16, 0));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
0, -4, -2, -6, 2, -8));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
8, 14, 8, 12, 12, 12));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-16, 2, -16, 0, -14, 2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-16, 2, -12, 6, -12, 8));
assertTrue(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-6, 8, -6, 0, -4, 2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-6, 8, -8, 6, -4, 2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-6, 8, -8, 6, -4, -4));
assertTrue(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-6, 8, -8, 6, 4, 2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
0, 4, -6, 0, 2, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-16, 2, -12, -6, -12, 8));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-16, 0, -10, 1, -14, 2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(5, 8, -10, 1, -1, -2,
-1, -2, -10, 1, -14, 2));
}
@Test
public void staticIntersectsTriangleTriangle_ba() {
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-8, 6.5, -4, 6, -7, 11, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-8, -2, -10, -4, -6, -6, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
6, 2, 8, -2, 16, 0, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
0, -4, -2, -6, 2, -8, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
8, 14, 8, 12, 12, 12, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-16, 2, -16, 0, -14, 2, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-16, 2, -12, 6, -12, 8, 5, 8, -10, 1, -1, -2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(
-6, 8, -6, 0, -4, 2, 5, 8, -10, 1, -1, -2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(
-6, 8, -8, 6, -4, 2, 5, 8, -10, 1, -1, -2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(
-6, 8, -8, 6, -4, -4, 5, 8, -10, 1, -1, -2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(
-6, 8, -8, 6, 4, 2, 5, 8, -10, 1, -1, -2));
assertTrue(Triangle2afp.intersectsTriangleTriangle(
0, 4, -6, 0, 2, -2, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-16, 2, -12, -6, -12, 8, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-16, 0, -10, 1, -14, 2, 5, 8, -10, 1, -1, -2));
assertFalse(Triangle2afp.intersectsTriangleTriangle(
-1, -2, -10, 1, -14, 2, 5, 8, -10, 1, -1, -2));
}
@Test
public void staticIntersectsTriangleRectangle() {
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, -6, -2, 1, 1));
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, -6, 6, 1, 1));
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, 6, 6, 1, 1));
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, -16, 0, 1, 1));
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, 12, 12, 1, 1));
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, 0, -6, 1, 1));
assertTrue(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, -4, 2, 1, 1));
assertTrue(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, -4, 4, 1, 1));
assertTrue(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, 0, 6, 1, 1));
assertTrue(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, 2, 4, 1, 1));
assertFalse(Triangle2afp.intersectsTriangleRectangle(5, 8, -10, 1, -1, -2, 5, 8, 1, 1));
}
@Test
public void getX1() {
assertEpsilonEquals(5, this.shape.getX1());
}
@Test
public void getY1() {
assertEpsilonEquals(8, this.shape.getY1());
}
@Test
public void getX2() {
assertEpsilonEquals(-10, this.shape.getX2());
}
@Test
public void getY2() {
assertEpsilonEquals(1, this.shape.getY2());
}
@Test
public void getX3() {
assertEpsilonEquals(-1, this.shape.getX3());
}
@Test
public void getY3() {
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void getP1() {
Point2D p = this.shape.getP1();
assertNotNull(p);
assertEpsilonEquals(5, p.getX());
assertEpsilonEquals(8, p.getY());
}
@Test
public void getP2() {
Point2D p = this.shape.getP2();
assertNotNull(p);
assertEpsilonEquals(-10, p.getX());
assertEpsilonEquals(1, p.getY());
}
@Test
public void getP3() {
Point2D p = this.shape.getP3();
assertNotNull(p);
assertEpsilonEquals(-1, p.getX());
assertEpsilonEquals(-2, p.getY());
}
@Test
public void setP1Point2D() {
this.shape.setP1(createPoint(123.456, 456.789));
assertEpsilonEquals(123.456, this.shape.getX1());
assertEpsilonEquals(456.789, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setP1DoubleDouble() {
this.shape.setP1(123.456, 456.789);
assertEpsilonEquals(123.456, this.shape.getX1());
assertEpsilonEquals(456.789, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setP2Point2D() {
this.shape.setP2(createPoint(123.456, 456.789));
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(123.456, this.shape.getX2());
assertEpsilonEquals(456.789, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setP2DoubleDouble() {
this.shape.setP2(123.456, 456.789);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(123.456, this.shape.getX2());
assertEpsilonEquals(456.789, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setP3Point2D() {
this.shape.setP3(createPoint(123.456, 456.789));
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(123.456, this.shape.getX3());
assertEpsilonEquals(456.789, this.shape.getY3());
}
@Test
public void setP3DoubleDouble() {
this.shape.setP3(123.456, 456.789);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(123.456, this.shape.getX3());
assertEpsilonEquals(456.789, this.shape.getY3());
}
@Test
public void setX1() {
this.shape.setX1(123.456);
assertEpsilonEquals(123.456, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setY1() {
this.shape.setY1(123.456);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(123.456, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setX2() {
this.shape.setX2(123.456);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(123.456, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setY2() {
this.shape.setY2(123.456);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(123.456, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setX3() {
this.shape.setX3(123.456);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(123.456, this.shape.getX3());
assertEpsilonEquals(-2, this.shape.getY3());
}
@Test
public void setY3() {
this.shape.setY3(123.456);
assertEpsilonEquals(5, this.shape.getX1());
assertEpsilonEquals(8, this.shape.getY1());
assertEpsilonEquals(-10, this.shape.getX2());
assertEpsilonEquals(1, this.shape.getY2());
assertEpsilonEquals(-1, this.shape.getX3());
assertEpsilonEquals(123.456, this.shape.getY3());
}
@Test
public void setDoubleDoubleDoubleDoubleDoubleDouble() {
this.shape.set(1.2, 3.4, 5.6, 7.8, 9.1, 3.2);
assertEpsilonEquals(1.2, this.shape.getX1());
assertEpsilonEquals(3.4, this.shape.getY1());
assertEpsilonEquals(5.6, this.shape.getX2());
assertEpsilonEquals(7.8, this.shape.getY2());
assertEpsilonEquals(9.1, this.shape.getX3());
assertEpsilonEquals(3.2, this.shape.getY3());
}
@Test
public void isCCW() {
assertTrue(this.shape.isCCW());
this.shape.set(5, 8, -1, -2, -10, 1);
assertFalse(this.shape.isCCW());
}
@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.getX1());
assertEpsilonEquals(8, clone.getY1());
assertEpsilonEquals(-10, clone.getX2());
assertEpsilonEquals(1, clone.getY2());
assertEpsilonEquals(-1, clone.getX3());
assertEpsilonEquals(-2, clone.getY3());
}
@Test
@Override
public void equalsObject() {
assertFalse(this.shape.equals(null));
assertFalse(this.shape.equals(new Object()));
assertFalse(this.shape.equals(createTriangle(5, 8, -10, 1, -1, -3)));
assertFalse(this.shape.equals(createTriangle(-1, -2, 5, 8, -10, 1)));
assertFalse(this.shape.equals(createSegment(5, 8, 6, 10)));
assertTrue(this.shape.equals(this.shape));
assertTrue(this.shape.equals(createTriangle(5, 8, -10, 1, -1, -2)));
}
@Test
@Override
public void equalsObject_withPathIterator() {
assertFalse(this.shape.equals(createTriangle(5, 8, -10, 1, -1, -3).getPathIterator()));
assertFalse(this.shape.equals(createTriangle(-1, -2, 5, 8, -10, 1).getPathIterator()));
assertFalse(this.shape.equals(createSegment(5, 8, 6, 10).getPathIterator()));
assertTrue(this.shape.equals(this.shape.getPathIterator()));
assertTrue(this.shape.equals(createTriangle(5, 8, -10, 1, -1, -2).getPathIterator()));
}
@Test
@Override
public void equalsToPathIterator() {
assertFalse(this.shape.equalsToPathIterator((PathIterator2ai) null));
assertFalse(this.shape.equalsToPathIterator(createTriangle(5, 8, -10, 1, -1, -3).getPathIterator()));
assertFalse(this.shape.equalsToPathIterator(createTriangle(-1, -2, 5, 8, -10, 1).getPathIterator()));
assertFalse(this.shape.equalsToPathIterator(createSegment(5, 8, 6, 10).getPathIterator()));
assertTrue(this.shape.equalsToPathIterator(this.shape.getPathIterator()));
assertTrue(this.shape.equalsToPathIterator(createTriangle(5, 8, -10, 1, -1, -2).getPathIterator()));
}
@Test
@Override
public void equalsToShape() {
assertFalse(this.shape.equalsToShape(null));
assertFalse(this.shape.equalsToShape((T) createTriangle(5, 8, -10, 1, -1, -3)));
assertFalse(this.shape.equalsToShape((T) createTriangle(-1, -2, 5, 8, -10, 1)));
assertTrue(this.shape.equalsToShape(this.shape));
assertTrue(this.shape.equalsToShape((T) createTriangle(5, 8, -10, 1, -1, -2)));
}
@Test
@Override
public void isEmpty() {
assertFalse(this.shape.isEmpty());
this.shape.clear();
assertTrue(this.shape.isEmpty());
}
@Test
@Override
public void clear() {
this.shape.clear();
assertEpsilonEquals(0, this.shape.getX1());
assertEpsilonEquals(0, this.shape.getY1());
assertEpsilonEquals(0, this.shape.getX2());
assertEpsilonEquals(0, this.shape.getY2());
assertEpsilonEquals(0, this.shape.getX3());
assertEpsilonEquals(0, this.shape.getY3());
}
@Test
@Override
public void containsDoubleDouble() {
assertTrue(this.shape.contains(0,0));
assertFalse(this.shape.contains(11,10));
assertFalse(this.shape.contains(11,50));
assertFalse(this.shape.contains(9,12));
assertFalse(this.shape.contains(9,11));
assertFalse(this.shape.contains(0,6));
assertFalse(this.shape.contains(8,12));
assertTrue(this.shape.contains(3,7));
assertFalse(this.shape.contains(10,11));
assertFalse(this.shape.contains(9,10));
assertTrue(this.shape.contains(-4,2));
assertFalse(this.shape.contains(-8,-5));
}
@Test
@Override
public void containsPoint2D() {
assertTrue(this.shape.contains(createPoint(0,0)));
assertFalse(this.shape.contains(createPoint(11,10)));
assertFalse(this.shape.contains(createPoint(11,50)));
assertFalse(this.shape.contains(createPoint(9,12)));
assertFalse(this.shape.contains(createPoint(9,11)));
assertFalse(this.shape.contains(createPoint(0,6)));
assertFalse(this.shape.contains(createPoint(8,12)));
assertTrue(this.shape.contains(createPoint(3,7)));
assertFalse(this.shape.contains(createPoint(10,11)));
assertFalse(this.shape.contains(createPoint(9,10)));
assertTrue(this.shape.contains(createPoint(-4,2)));
assertFalse(this.shape.contains(createPoint(-8,-5)));
}
@Test
@Override
public void getClosestPointTo() {
Point2D closest;
closest = this.shape.getClosestPointTo(createPoint(0, 0));
assertEpsilonEquals(0, closest.getX());
assertEpsilonEquals(0, closest.getY());
closest = this.shape.getClosestPointTo(createPoint(9, 12));
assertEpsilonEquals(5, closest.getX());
assertEpsilonEquals(8, closest.getY());
closest = this.shape.getClosestPointTo(createPoint(0, 6));
assertEpsilonEquals(0.12774, closest.getX());
assertEpsilonEquals(5.72628, closest.getY());
closest = this.shape.getClosestPointTo(createPoint(-20, 1));
assertEpsilonEquals(-10, closest.getX());
assertEpsilonEquals(1, closest.getY());
closest = this.shape.getClosestPointTo(createPoint(-6, -1));
assertEpsilonEquals(-5.8, closest.getX());
assertEpsilonEquals(-0.4, closest.getY());
closest = this.shape.getClosestPointTo(createPoint(-1, -6));
assertEpsilonEquals(-1, closest.getX());
assertEpsilonEquals(-2, closest.getY());
closest = this.shape.getClosestPointTo(createPoint(6, 2));
assertEpsilonEquals(2.61765, closest.getX());
assertEpsilonEquals(4.02941, closest.getY());
}
@Override
public void getFarthestPointTo() {
Point2D farthest;
farthest = this.shape.getFarthestPointTo(createPoint(0, 0));
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
farthest = this.shape.getFarthestPointTo(createPoint(9, 12));
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
farthest = this.shape.getFarthestPointTo(createPoint(0, 6));
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
farthest = this.shape.getFarthestPointTo(createPoint(-20, 1));
assertEpsilonEquals(5, farthest.getX());
assertEpsilonEquals(8, farthest.getY());
farthest = this.shape.getFarthestPointTo(createPoint(-6, -1));
assertEpsilonEquals(5, farthest.getX());
assertEpsilonEquals(8, farthest.getY());
farthest = this.shape.getFarthestPointTo(createPoint(-1, -6));
assertEpsilonEquals(5, farthest.getX());
assertEpsilonEquals(8, farthest.getY());
farthest = this.shape.getFarthestPointTo(createPoint(6, 2));
assertEpsilonEquals(-10, farthest.getX());
assertEpsilonEquals(1, farthest.getY());
}
@Override
public void getDistance() {
assertEpsilonEquals(0, this.shape.getDistance(createPoint(0, 0)));
assertEpsilonEquals(5.65685, this.shape.getDistance(createPoint(9, 12)));
assertEpsilonEquals(0.30206, this.shape.getDistance(createPoint(0, 6)));
assertEpsilonEquals(10, this.shape.getDistance(createPoint(-20, 1)));
assertEpsilonEquals(0.63246, this.shape.getDistance(createPoint(-6, -1)));
assertEpsilonEquals(4, this.shape.getDistance(createPoint(-1, -6)));
assertEpsilonEquals(3.94446, this.shape.getDistance(createPoint(6, 2)));
}
@Override
public void getDistanceSquared() {
assertEpsilonEquals(0, this.shape.getDistanceSquared(createPoint(0, 0)));
assertEpsilonEquals(32, this.shape.getDistanceSquared(createPoint(9, 12)));
assertEpsilonEquals(.09124, this.shape.getDistanceSquared(createPoint(0, 6)));
assertEpsilonEquals(100, this.shape.getDistanceSquared(createPoint(-20, 1)));
assertEpsilonEquals(0.40001, this.shape.getDistanceSquared(createPoint(-6, -1)));
assertEpsilonEquals(16, this.shape.getDistanceSquared(createPoint(-1, -6)));
assertEpsilonEquals(15.55876, this.shape.getDistanceSquared(createPoint(6, 2)));
}
@Override
public void getDistanceL1() {
assertEpsilonEquals(0, this.shape.getDistanceL1(createPoint(0, 0)));
assertEpsilonEquals(8, this.shape.getDistanceL1(createPoint(9, 12)));
assertEpsilonEquals(0.40146, this.shape.getDistanceL1(createPoint(0, 6)));
assertEpsilonEquals(10, this.shape.getDistanceL1(createPoint(-20, 1)));
assertEpsilonEquals(.8, this.shape.getDistanceL1(createPoint(-6, -1)));
assertEpsilonEquals(4, this.shape.getDistanceL1(createPoint(-1, -6)));
assertEpsilonEquals(5.41176, this.shape.getDistanceL1(createPoint(6, 2)));
}
@Override
public void getDistanceLinf() {
assertEpsilonEquals(0, this.shape.getDistanceLinf(createPoint(0, 0)));
assertEpsilonEquals(4, this.shape.getDistanceLinf(createPoint(9, 12)));
assertEpsilonEquals(.27372, this.shape.getDistanceLinf(createPoint(0, 6)));
assertEpsilonEquals(10, this.shape.getDistanceLinf(createPoint(-20, 1)));
assertEpsilonEquals(.6, this.shape.getDistanceLinf(createPoint(-6, -1)));
assertEpsilonEquals(4, this.shape.getDistanceLinf(createPoint(-1, -6)));
assertEpsilonEquals(3.38235, this.shape.getDistanceLinf(createPoint(6, 2)));
}
@Override
public void setIT() {
this.shape.set((T) createTriangle(17, 20, 7, 45, 7, -4));
assertEpsilonEquals(17, this.shape.getX1());
assertEpsilonEquals(20, this.shape.getY1());
assertEpsilonEquals(7, this.shape.getX2());
assertEpsilonEquals(45, this.shape.getY2());
assertEpsilonEquals(7, this.shape.getX3());
assertEpsilonEquals(-4, this.shape.getY3());
}
@Override
public void translateDoubleDouble() {
this.shape.translate(2, -3);
assertEpsilonEquals(7, this.shape.getX1());
assertEpsilonEquals(5, this.shape.getY1());
assertEpsilonEquals(-8, this.shape.getX2());
assertEpsilonEquals(-2, this.shape.getY2());
assertEpsilonEquals(1, this.shape.getX3());
assertEpsilonEquals(-5, this.shape.getY3());
}
@Override
public void translateVector2D() {
this.shape.translate(createVector(2, -3));
assertEpsilonEquals(7, this.shape.getX1());
assertEpsilonEquals(5, this.shape.getY1());
assertEpsilonEquals(-8, this.shape.getX2());
assertEpsilonEquals(-2, this.shape.getY2());
assertEpsilonEquals(1, this.shape.getX3());
assertEpsilonEquals(-5, this.shape.getY3());
}
@Override
public void toBoundingBox() {
B box = this.shape.toBoundingBox();
assertEpsilonEquals(-10, box.getMinX());
assertEpsilonEquals(-2, box.getMinY());
assertEpsilonEquals(5, box.getMaxX());
assertEpsilonEquals(8, box.getMaxY());
}
@Override
public void toBoundingBoxB() {
B box = createRectangle(0, 0, 0, 0);
this.shape.toBoundingBox(box);
assertEpsilonEquals(-10, box.getMinX());
assertEpsilonEquals(-2, box.getMinY());
assertEpsilonEquals(5, box.getMaxX());
assertEpsilonEquals(8, box.getMaxY());
}
@Override
public void getPathIteratorTransform2D() {
PathIterator2afp pi = this.shape.getPathIterator(null);
assertElement(pi, PathElementType.MOVE_TO, 5, 8);
assertElement(pi, PathElementType.LINE_TO, -10, 1);
assertElement(pi, PathElementType.LINE_TO, -1, -2);
assertElement(pi, PathElementType.CLOSE, 5, 8);
assertNoElement(pi);
Transform2D tr;
tr = new Transform2D();
pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 5, 8);
assertElement(pi, PathElementType.LINE_TO, -10, 1);
assertElement(pi, PathElementType.LINE_TO, -1, -2);
assertElement(pi, PathElementType.CLOSE, 5, 8);
assertNoElement(pi);
tr = new Transform2D();
tr.makeTranslationMatrix(10, -10);
pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 15, -2);
assertElement(pi, PathElementType.LINE_TO, 0, -9);
assertElement(pi, PathElementType.LINE_TO, 9, -12);
assertElement(pi, PathElementType.CLOSE, 15, -2);
assertNoElement(pi);
}
@Override
public void getPathIterator() {
PathIterator2afp pi = this.shape.getPathIterator();
assertElement(pi, PathElementType.MOVE_TO, 5, 8);
assertElement(pi, PathElementType.LINE_TO, -10, 1);
assertElement(pi, PathElementType.LINE_TO, -1, -2);
assertElement(pi, PathElementType.CLOSE, 5, 8);
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 Triangle2afp);
PathIterator2afp pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 15, -2);
assertElement(pi, PathElementType.LINE_TO, 0, -9);
assertElement(pi, PathElementType.LINE_TO, 9, -12);
assertElement(pi, PathElementType.CLOSE, 15, -2);
assertNoElement(pi);
}
@Override
public void containsRectangle2afp() {
assertFalse(this.shape.contains(createRectangle(0, 0, 1, 1)));
assertTrue(this.shape.contains(createRectangle(-2, 1, 1, 1)));
assertFalse(this.shape.contains(createRectangle(-30, 20, 1, 1)));
assertFalse(this.shape.contains(createRectangle(-10.5, 0.5, 1, 1)));
}
@Override
public void containsShape2D() {
assertFalse(this.shape.contains(createCircle(0, 0, 1)));
assertTrue(this.shape.contains(createCircle(-2, 1, 1)));
assertFalse(this.shape.contains(createCircle(-30, 20, 1)));
assertFalse(this.shape.contains(createCircle(-10.5, 0.5, 1)));
}
@Override
public void intersectsRectangle2afp() {
assertFalse(this.shape.intersects(createRectangle(-6, -2, 1, 1)));
assertFalse(this.shape.intersects(createRectangle(-6, 6, 1, 1)));
assertFalse(this.shape.intersects(createRectangle(6, 6, 1, 1)));
assertFalse(this.shape.intersects(createRectangle(-16, 0, 1, 1)));
assertFalse(this.shape.intersects(createRectangle(12, 12, 1, 1)));
assertFalse(this.shape.intersects(createRectangle(0, -6, 1, 1)));
assertTrue(this.shape.intersects(createRectangle(-4, 2, 1, 1)));
assertTrue(this.shape.intersects(createRectangle(-4, 4, 1, 1)));
assertTrue(this.shape.intersects(createRectangle(0, 6, 1, 1)));
assertTrue(this.shape.intersects(createRectangle(2, 4, 1, 1)));
assertFalse(this.shape.intersects(createRectangle(5, 8, 1, 1)));
}
@Test
@Override
public void intersectsTriangle2afp() {
assertFalse(this.shape.intersects(createTriangle(
-8, 6.5, -4, 6, -7, 11)));
assertFalse(this.shape.intersects(createTriangle(
-8, -2, -10, -4, -6, -6)));
assertFalse(this.shape.intersects(createTriangle(
6, 2, 8, -2, 16, 0)));
assertFalse(this.shape.intersects(createTriangle(
0, -4, -2, -6, 2, -8)));
assertFalse(this.shape.intersects(createTriangle(
8, 14, 8, 12, 12, 12)));
assertFalse(this.shape.intersects(createTriangle(
-16, 2, -16, 0, -14, 2)));
assertFalse(this.shape.intersects(createTriangle(
-16, 2, -12, 6, -12, 8)));
assertTrue(this.shape.intersects(createTriangle(
-6, 8, -6, 0, -4, 2)));
assertTrue(this.shape.intersects(createTriangle(
-6, 8, -8, 6, -4, 2)));
assertTrue(this.shape.intersects(createTriangle(
-6, 8, -8, 6, -4, -4)));
assertTrue(this.shape.intersects(createTriangle(
-6, 8, -8, 6, 4, 2)));
assertTrue(this.shape.intersects(createTriangle(
0, 4, -6, 0, 2, -2)));
assertFalse(this.shape.intersects(createTriangle(
-16, 2, -12, -6, -12, 8)));
assertFalse(this.shape.intersects(createTriangle(
-16, 0, -10, 1, -14, 2)));
assertFalse(this.shape.intersects(createTriangle(
-1, -2, -10, 1, -14, 2)));
}
@Test
@Override
public void intersectsOrientedRectangle2afp() {
OrientedRectangle2afp rectangle = createOrientedRectangle(
6, 9,
0.894427190999916, -0.447213595499958, 13.999990000000002,
12.999989999999997);
assertFalse(createTriangle(-10, 15, -8, 16, -13, 19).intersects(rectangle));
assertFalse(createTriangle(-5, 30, -3, 31, -8, 34).intersects(rectangle));
assertFalse(createTriangle(15, 25, 17, 26, 12, 29).intersects(rectangle));
assertFalse(createTriangle(40, 15, 42, 16, 37, 19).intersects(rectangle));
assertFalse(createTriangle(35, 0, 37, 1, 32, 4).intersects(rectangle));
assertFalse(createTriangle(15, -20, 17, -19, 12, -16).intersects(rectangle));
assertFalse(createTriangle(-5, -10, -3, -9, -8, -6).intersects(rectangle));
assertFalse(createTriangle(-25, -5, -23, -4, -28, -1).intersects(rectangle));
assertTrue(createTriangle(-4, -2, -2, -1, -7, -2).intersects(rectangle));
assertTrue(createTriangle(-2, 4, 0, 5, -5, 8).intersects(rectangle));
assertTrue(createTriangle(20, 5, 22, 6, 17, 9).intersects(rectangle));
assertTrue(createTriangle(20, 5, 22, 6, -10, 15).intersects(rectangle));
assertTrue(createTriangle(50, 30, 0, -50, -30, 31).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);
assertTrue(createTriangle(-5, 15, -3, 16, -8, 19).intersects(para));
assertTrue(createTriangle(-5, 15, -8, 19, -3, 16).intersects(para));
assertFalse(createTriangle(0, -5, 2, -4, -3, -1).intersects(para));
assertFalse(createTriangle(0, -5, -3, -1, 2, -4).intersects(para));
assertFalse(createTriangle(20, 0, 22, 1, 17, 4).intersects(para));
assertFalse(createTriangle(20, 0, 17, 4, 22, 1).intersects(para));
assertFalse(createTriangle(17.18034, 9, 19.18034, 10, 14.18034, 13).intersects(para));
assertFalse(createTriangle(17.18034, 9, 14.18034, 13, 19.18034, 10).intersects(para));
assertTrue(createTriangle(0, 10, 2, 11, -3, 14).intersects(para));
assertTrue(createTriangle(0, 10, -3, 14, 2, 11).intersects(para));
assertTrue(createTriangle(0, 20, 2, 21, -3, 24).intersects(para));
}
@Test
@Override
public void intersectsRoundRectangle2afp() {
assertTrue(this.shape.intersects(createRoundRectangle(0, 0, 1, 1, .2, .4)));
assertTrue(this.shape.intersects(createRoundRectangle(0, 2, 1, 1, .2, .4)));
assertTrue(this.shape.intersects(createRoundRectangle(0, 3, 1, 1, .2, .4)));
assertTrue(this.shape.intersects(createRoundRectangle(0, 4, 1, 1, .2, .4)));
assertTrue(this.shape.intersects(createRoundRectangle(0, 5, 1, 1, .2, .4)));
assertTrue(this.shape.intersects(createRoundRectangle(0, 6, 1, 1, .2, .4)));
assertTrue(this.shape.intersects(createRoundRectangle(0, 6.05, 1, 1, .2, .4)));
assertFalse(this.shape.intersects(createRoundRectangle(0, 6.06, 1, 1, .2, .4)));
assertFalse(this.shape.intersects(createRoundRectangle(4.5, 8, 1, 1, .2, .4)));
}
@Override
public void intersectsCircle2afp() {
assertTrue(this.shape.intersects(createCircle(5, 8, 1)));
assertTrue(this.shape.intersects(createCircle(-10, 1, 1)));
assertTrue(this.shape.intersects(createCircle(-1, -2, 1)));
assertFalse(this.shape.intersects(createCircle(2, 0, 1)));
assertFalse(this.shape.intersects(createCircle(1.9, 0, 1)));
assertFalse(this.shape.intersects(createCircle(1.8, 0, 1)));
assertFalse(this.shape.intersects(createCircle(1.7, 0, 1)));
assertFalse(this.shape.intersects(createCircle(1.6, 0, 1)));
assertFalse(this.shape.intersects(createCircle(1.5, 0, 1)));
assertFalse(this.shape.intersects(createCircle(1.4, 0, 1)));
assertTrue(this.shape.intersects(createCircle(1.3, 0, 1)));
assertFalse(this.shape.intersects(createCircle(5, 9, 1)));
assertTrue(this.shape.intersects(createCircle(5, 8.9, 1)));
assertTrue(this.shape.intersects(createCircle(-4, 1, 1)));
}
@Override
public void intersectsEllipse2afp() {
assertFalse(this.shape.intersects(createEllipse(5, 8, 2, 1)));
assertTrue(this.shape.intersects(createEllipse(-10, 1, 2, 1)));
assertTrue(this.shape.intersects(createEllipse(-1, -2, 2, 1)));
assertFalse(this.shape.intersects(createEllipse(1, 0, 2, 1)));
assertFalse(this.shape.intersects(createEllipse(0.9, 0, 2, 1)));
assertFalse(this.shape.intersects(createEllipse(0.8, 0, 2, 1)));
assertFalse(this.shape.intersects(createEllipse(0.7, 0, 2, 1)));
assertFalse(this.shape.intersects(createEllipse(0.6, 0, 2, 1)));
assertTrue(this.shape.intersects(createEllipse(0.5, 0, 2, 1)));
assertFalse(this.shape.intersects(createEllipse(-1.12464, -2.86312, 2, 1)));
}
@Override
public void intersectsSegment2afp() {
assertTrue(this.shape.intersects(createSegment(-6, -2, -4, 0)));
assertTrue(this.shape.intersects(createSegment(-6, -2, 2, 0)));
assertFalse(this.shape.intersects(createSegment(-6, -2, 14, -4)));
assertTrue(this.shape.intersects(createSegment(-2, 2, 4, 0)));
assertTrue(this.shape.intersects(createSegment(-2, 2, 0, 0)));
assertTrue(this.shape.intersects(createSegment(-4, -2, -6, 6)));
assertTrue(this.shape.intersects(createSegment(6, 7, -6, 6)));
assertTrue(this.shape.intersects(createSegment(0, 5, -6, 6)));
assertFalse(this.shape.intersects(createSegment(-5, 5, -6, 6)));
assertFalse(this.shape.intersects(createSegment(-4, -2, 2, -2)));
assertFalse(this.shape.intersects(createSegment(-1, -2, 5, 8)));
}
@Override
public void intersectsPath2afp() {
// NON_ZERO
Path2afp path = createPath(PathWindingRule.NON_ZERO);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(2, 2);
assertFalse(this.shape.intersects(path));
path.closePath();
assertTrue(this.shape.intersects(path));
path = createPath(PathWindingRule.NON_ZERO);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(0, 8);
assertTrue(this.shape.intersects(path));
path.closePath();
assertTrue(this.shape.intersects(path));
path = createPath(PathWindingRule.NON_ZERO);
path.moveTo(-18, 2);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(6, 10);
assertFalse(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
// EVEN_ODD
path = createPath(PathWindingRule.EVEN_ODD);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(2, 2);
assertFalse(this.shape.intersects(path));
path.closePath();
assertTrue(this.shape.intersects(path));
path = createPath(PathWindingRule.EVEN_ODD);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(0, 8);
assertTrue(this.shape.intersects(path));
path.closePath();
assertTrue(this.shape.intersects(path));
path = createPath(PathWindingRule.EVEN_ODD);
path.moveTo(-18, 2);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(6, 10);
assertFalse(this.shape.intersects(path));
path.closePath();
assertTrue(this.shape.intersects(path));
}
@Override
public void intersectsPathIterator2afp() {
// NON_ZERO
Path2afp path = createPath(PathWindingRule.NON_ZERO);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(2, 2);
assertFalse(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path = createPath(PathWindingRule.NON_ZERO);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(0, 8);
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path = createPath(PathWindingRule.NON_ZERO);
path.moveTo(-18, 2);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(6, 10);
assertFalse(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
// EVEN_ODD
path = createPath(PathWindingRule.EVEN_ODD);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(2, 2);
assertFalse(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path = createPath(PathWindingRule.EVEN_ODD);
path.moveTo(-8, 0);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(0, 8);
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path = createPath(PathWindingRule.EVEN_ODD);
path.moveTo(-18, 2);
path.lineTo(-2, -2);
path.lineTo(2, -2);
path.lineTo(6, 10);
assertFalse(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
path.closePath();
assertTrue(this.shape.intersects((PathIterator2afp) path.getPathIterator()));
}
@Override
public void intersectsShape2D() {
assertTrue(this.shape.intersects((Shape2D) createCircle(5, 8, 1)));
assertTrue(this.shape.intersects((Shape2D) createEllipse(-10, 1, 2, 1)));
}
@Override
public void operator_addVector2D() {
this.shape.operator_add(createVector(2, -3));
assertEpsilonEquals(7, this.shape.getX1());
assertEpsilonEquals(5, this.shape.getY1());
assertEpsilonEquals(-8, this.shape.getX2());
assertEpsilonEquals(-2, this.shape.getY2());
assertEpsilonEquals(1, this.shape.getX3());
assertEpsilonEquals(-5, this.shape.getY3());
}
@Override
public void operator_plusVector2D() {
T shape = this.shape.operator_plus(createVector(2, -3));
assertEpsilonEquals(7, shape.getX1());
assertEpsilonEquals(5, shape.getY1());
assertEpsilonEquals(-8, shape.getX2());
assertEpsilonEquals(-2, shape.getY2());
assertEpsilonEquals(1, shape.getX3());
assertEpsilonEquals(-5, shape.getY3());
}
@Override
public void operator_removeVector2D() {
this.shape.operator_remove(createVector(2, -3));
assertEpsilonEquals(3, this.shape.getX1());
assertEpsilonEquals(11, this.shape.getY1());
assertEpsilonEquals(-12, this.shape.getX2());
assertEpsilonEquals(4, this.shape.getY2());
assertEpsilonEquals(-3, this.shape.getX3());
assertEpsilonEquals(1, this.shape.getY3());
}
@Override
public void operator_minusVector2D() {
T shape = this.shape.operator_minus(createVector(2, -3));
assertEpsilonEquals(3, shape.getX1());
assertEpsilonEquals(11, shape.getY1());
assertEpsilonEquals(-12, shape.getX2());
assertEpsilonEquals(4, shape.getY2());
assertEpsilonEquals(-3, shape.getX3());
assertEpsilonEquals(1, shape.getY3());
}
@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 Triangle2afp);
PathIterator2afp pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 15, -2);
assertElement(pi, PathElementType.LINE_TO, 0, -9);
assertElement(pi, PathElementType.LINE_TO, 9, -12);
assertElement(pi, PathElementType.CLOSE, 15, -2);
assertNoElement(pi);
}
@Override
public void operator_andPoint2D() {
assertTrue(this.shape.operator_and(createPoint(0,0)));
assertFalse(this.shape.operator_and(createPoint(11,10)));
assertFalse(this.shape.operator_and(createPoint(11,50)));
assertFalse(this.shape.operator_and(createPoint(9,12)));
assertFalse(this.shape.operator_and(createPoint(9,11)));
assertFalse(this.shape.operator_and(createPoint(0,6)));
assertFalse(this.shape.operator_and(createPoint(8,12)));
assertTrue(this.shape.operator_and(createPoint(3,7)));
assertFalse(this.shape.operator_and(createPoint(10,11)));
assertFalse(this.shape.operator_and(createPoint(9,10)));
assertTrue(this.shape.operator_and(createPoint(-4,2)));
assertFalse(this.shape.operator_and(createPoint(-8,-5)));
}
@Override
public void operator_andShape2D() {
assertTrue(this.shape.operator_and(createCircle(5, 8, 1)));
assertTrue(this.shape.operator_and(createEllipse(-10, 1, 2, 1)));
}
@Override
public void operator_upToPoint2D() {
assertEpsilonEquals(0, this.shape.operator_upTo(createPoint(0, 0)));
assertEpsilonEquals(5.65685, this.shape.operator_upTo(createPoint(9, 12)));
assertEpsilonEquals(0.30206, this.shape.operator_upTo(createPoint(0, 6)));
assertEpsilonEquals(10, this.shape.operator_upTo(createPoint(-20, 1)));
assertEpsilonEquals(0.63246, this.shape.operator_upTo(createPoint(-6, -1)));
assertEpsilonEquals(4, this.shape.operator_upTo(createPoint(-1, -6)));
assertEpsilonEquals(3.94446, this.shape.operator_upTo(createPoint(6, 2)));
}
@Override
@Test
public void getClosestPointToCircle2afp() {
assertFpPointEquals(-7.7, 2.07, this.shape.getClosestPointTo(createCircle(-10, 7, 1)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createCircle(0, -10, 1)));
assertClosestPointInBothShapes(this.shape, createCircle(-1, 5, 1));
}
@Override
@Test
public void getDistanceSquaredCircle2afp() {
assertEpsilonEquals(19.68785, this.shape.getDistanceSquared(createCircle(-10, 7, 1)));
assertEpsilonEquals(49.87548, this.shape.getDistanceSquared(createCircle(0, -10, 1)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createCircle(-1, 5, 1)));
}
@Override
@Test
public void getClosestPointToSegment2afp() {
assertFpPointEquals(-3.15693, 4.19343, this.shape.getClosestPointTo(createSegment(-10, 7, -4, 6)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createSegment(0, -4, -1, -8)));
assertClosestPointInBothShapes(this.shape, createSegment(-6, -2, 2, 0));
}
@Override
@Test
public void getDistanceSquaredSegment2afp() {
assertEpsilonEquals(3.97445, this.shape.getDistanceSquared(createSegment(-10, 7, -4, 6)));
assertEpsilonEquals(5, this.shape.getDistanceSquared(createSegment(0, -4, -1, -8)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSegment(-6, -2, 2, 0)));
}
@Override
@Test
public void getClosestPointToTriangle2afp() {
assertFpPointEquals(-3.15693, 4.19343, this.shape.getClosestPointTo(createTriangle(-10, 7, -4, 6, -10, 6)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createTriangle(0, -4, -1, -8, 0, -8)));
assertClosestPointInBothShapes(this.shape, createTriangle(-6, -2, 2, 0, -6, 0));
}
@Override
@Test
public void getDistanceSquaredTriangle2afp() {
assertEpsilonEquals(3.97445, this.shape.getDistanceSquared(createTriangle(-10, 7, -4, 6, -10, 6)));
assertEpsilonEquals(5, this.shape.getDistanceSquared(createTriangle(0, -4, -1, -8, 0, -8)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createTriangle(-6, -2, 2, 0, -6, 0)));
}
@Override
@Test
public void getClosestPointToEllipse2afp() {
assertFpPointEquals(-6.24279, 2.75336, this.shape.getClosestPointTo(createEllipse(-10, 7, 2, 1)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createEllipse(0, -4, 2, 1)));
assertClosestPointInBothShapes(this.shape, createEllipse(-5, -2, 2, 1));
}
@Override
@Test
public void getDistanceSquaredEllipse2afp() {
assertEpsilonEquals(23.49915, this.shape.getDistanceSquared(createEllipse(-10, 7, 2, 1)));
assertEpsilonEquals(2.84801, this.shape.getDistanceSquared(createEllipse(0, -4, 2, 1)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createEllipse(-5, -2, 2, 1)));
}
@Override
@Test
public void getClosestPointToRectangle2afp() {
assertFpPointEquals(-6.05839, 2.83942, this.shape.getClosestPointTo(createRectangle(-10, 7, 2, 1)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createRectangle(0, -4, 2, 1)));
assertClosestPointInBothShapes(this.shape, createRectangle(-5, -2, 2, 1));
}
@Override
@Test
public void getDistanceSquaredRectangle2afp() {
assertEpsilonEquals(21.08029, this.shape.getDistanceSquared(createRectangle(-10, 7, 2, 1)));
assertEpsilonEquals(2, this.shape.getDistanceSquared(createRectangle(0, -4, 2, 1)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createRectangle(-5, -2, 2, 1)));
}
protected MultiShape2afp createTestMultiShape(double x, double y) {
MultiShape2afp multishape = createMultiShape();
multishape.add(createCircle(x - 5, y + 4, 1));
multishape.add(createSegment(x + 4, y + 2, x + 8, y - 1));
return multishape;
}
@Override
@Test
public void getClosestPointToMultiShape2afp() {
assertFpPointEquals(-1.5146, 4.95985, this.shape.getClosestPointTo(createTestMultiShape(-10, 7)));
assertClosestPointInBothShapes(this.shape, createTestMultiShape(0, -4));
assertFpPointEquals(-4.6, -0.8, this.shape.getClosestPointTo(createTestMultiShape(0, -6)));
assertClosestPointInBothShapes(this.shape, createTestMultiShape(-5, -2));
}
@Override
@Test
public void getDistanceSquaredMultiShape2afp() {
assertEpsilonEquals(1.31752, this.shape.getDistanceSquared(createTestMultiShape(-10, 7)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestMultiShape(0, -4)));
assertEpsilonEquals(0.070178, this.shape.getDistanceSquared(createTestMultiShape(0, -6)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestMultiShape(-5, -2)));
}
@Override
@Test
public void getClosestPointToRoundRectangle2afp() {
assertFpPointEquals(-6.96782, 2.41502, this.shape.getClosestPointTo(createRoundRectangle(-10, 7, 1, 1, .2, .4)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createRoundRectangle(0, -5, 1, 1, .2, .4)));
assertClosestPointInBothShapes(this.shape, createRoundRectangle(-4, -2, 1, 1, .2, .4));
}
@Override
@Test
public void getDistanceSquaredRoundRectangle2afp() {
assertEpsilonEquals(25.8999, this.shape.getDistanceSquared(createRoundRectangle(-10, 7, 1, 1, .2, .4)));
assertEpsilonEquals(5.37295, this.shape.getDistanceSquared(createRoundRectangle(0, -5, 1, 1, .2, .4)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createRoundRectangle(-4, -2, 1, 1, .2, .4)));
}
@Override
@Test
public void getClosestPointToOrientedRectangle2afp() {
Vector2D u = createVector(-3, .5).toUnitVector();
assertFpPointEquals(-7.97973, 1.94279, this.shape.getClosestPointTo(createOrientedRectangle(-10, 7, u.getX(), u.getY(), 1, 2)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createOrientedRectangle(0, -6, u.getX(), u.getY(), 1, 2)));
assertClosestPointInBothShapes(this.shape, createOrientedRectangle(-5, -2, u.getX(), u.getY(), 1, 2));
}
@Override
@Test
public void getDistanceSquaredOrientedRectangle2afp() {
Vector2D u = createVector(-3, .5).toUnitVector();
assertEpsilonEquals(10.3834, this.shape.getDistanceSquared(createOrientedRectangle(-10, 7, u.getX(), u.getY(), 1, 2)));
assertEpsilonEquals(3.58731, this.shape.getDistanceSquared(createOrientedRectangle(0, -6, u.getX(), u.getY(), 1, 2)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createOrientedRectangle(-5, -2, u.getX(), u.getY(), 1, 2)));
}
@Override
@Test
public void getClosestPointToParallelogram2afp() {
Vector2D u = createVector(-3, .5).toUnitVector();
Vector2D v = createVector(5, .1).toUnitVector();
assertFpPointEquals(-5.2964, 3.19501, this.shape.getClosestPointTo(createParallelogram(-10, 7, u.getX(), u.getY(), 1, v.getX(), v.getY(), 2)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createParallelogram(0, -6, u.getX(), u.getY(), 1, v.getX(), v.getY(), 2)));
assertClosestPointInBothShapes(this.shape, createParallelogram(-5, -1, u.getX(), u.getY(), 1, v.getX(), v.getY(), 2));
}
@Override
@Test
public void getDistanceSquaredParallelogram2afp() {
Vector2D u = createVector(-3, .5).toUnitVector();
Vector2D v = createVector(5, .1).toUnitVector();
assertEpsilonEquals(16.49686, this.shape.getDistanceSquared(createParallelogram(-10, 7, u.getX(), u.getY(), 1, v.getX(), v.getY(), 2)));
assertEpsilonEquals(14.70804, this.shape.getDistanceSquared(createParallelogram(0, -6, u.getX(), u.getY(), 1, v.getX(), v.getY(), 2)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createParallelogram(-5, -1, u.getX(), u.getY(), 1, v.getX(), v.getY(), 2)));
}
protected Path2afp createSimpleTestPath(double dx, double dy, boolean close) {
Path2afp path = createPath();
path.moveTo(dx - 2, dy - 4);
path.lineTo(dx - 14, dy + 2);
path.lineTo(dx, dy + 12);
path.lineTo(dx + 12, dy + 8);
if (close) {
path.closePath();
}
return path;
}
protected Path2afp createComplexTestPath(double dx, double dy, boolean close, PathWindingRule rule) {
Path2afp path = createPath(rule);
path.moveTo(dx, dy - 4);
path.lineTo(dx - 14, dy + 2);
path.lineTo(dx, dy + 8);
path.lineTo(dx + 8, dy + 10);
path.lineTo(dx - 2, dy - 4);
path.lineTo(dx - 18, dy + 2);
path.lineTo(dx, dy + 10);
path.lineTo(dx + 12, dy + 12);
if (close) {
path.closePath();
}
return path;
}
@Override
@Test
public void getClosestPointToPath2afp() {
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createSimpleTestPath(0, 0, false)));
assertClosestPointInBothShapes(this.shape, createSimpleTestPath(0, 0, true));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createSimpleTestPath(2, -2, false)));
assertClosestPointInBothShapes(this.shape, createSimpleTestPath(2, -2, true));
assertClosestPointInBothShapes(this.shape, createSimpleTestPath(4, -6, false));
assertClosestPointInBothShapes(this.shape, createSimpleTestPath(4, -6, true));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createSimpleTestPath(-20, -10, false)));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createSimpleTestPath(-20, -10, true)));
//
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createComplexTestPath(0, 0, false, PathWindingRule.EVEN_ODD)));
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createComplexTestPath(0, 0, true, PathWindingRule.EVEN_ODD)));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createComplexTestPath(-12, 0, false, PathWindingRule.EVEN_ODD)));
assertClosestPointInBothShapes(this.shape, createComplexTestPath(-12, 0, true, PathWindingRule.EVEN_ODD));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createComplexTestPath(-16, 2, false, PathWindingRule.EVEN_ODD)));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createComplexTestPath(-16, 2, true, PathWindingRule.EVEN_ODD)));
//
assertFpPointEquals(-1, -2, this.shape.getClosestPointTo(createComplexTestPath(0, 0, false, PathWindingRule.NON_ZERO)));
assertClosestPointInBothShapes(this.shape, createComplexTestPath(0, 0, true, PathWindingRule.NON_ZERO));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createComplexTestPath(-12, 0, false, PathWindingRule.NON_ZERO)));
assertClosestPointInBothShapes(this.shape, createComplexTestPath(-12, 0, true, PathWindingRule.NON_ZERO));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createComplexTestPath(-16, 2, false, PathWindingRule.NON_ZERO)));
assertFpPointEquals(-10, 1, this.shape.getClosestPointTo(createComplexTestPath(-16, 2, true, PathWindingRule.NON_ZERO)));
}
@Override
@Test
public void getDistanceSquaredPath2afp() {
assertEpsilonEquals(.8, this.shape.getDistanceSquared(createSimpleTestPath(0, 0, false)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSimpleTestPath(0, 0, true)));
assertEpsilonEquals(0.12162, this.shape.getDistanceSquared(createSimpleTestPath(2, -2, false)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSimpleTestPath(2, -2, true)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSimpleTestPath(4, -6, false)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSimpleTestPath(4, -6, false)));
assertEpsilonEquals(4.9, this.shape.getDistanceSquared(createSimpleTestPath(-20, -10, true)));
assertEpsilonEquals(4.9, this.shape.getDistanceSquared(createSimpleTestPath(-20, -10, true)));
//
assertEpsilonEquals(0.12162, this.shape.getDistanceSquared(createComplexTestPath(0, 0, false, PathWindingRule.EVEN_ODD)));
assertEpsilonEquals(0.12162, this.shape.getDistanceSquared(createComplexTestPath(0, 0, true, PathWindingRule.EVEN_ODD)));
assertEpsilonEquals(0.12162, this.shape.getDistanceSquared(createComplexTestPath(-12, 0, false, PathWindingRule.EVEN_ODD)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createComplexTestPath(-12, 0, true, PathWindingRule.EVEN_ODD)));
assertEpsilonEquals(22.71622, this.shape.getDistanceSquared(createComplexTestPath(-16, 2, false, PathWindingRule.EVEN_ODD)));
assertEpsilonEquals(9, this.shape.getDistanceSquared(createComplexTestPath(-16, 2, true, PathWindingRule.EVEN_ODD)));
//
assertEpsilonEquals(0.12162, this.shape.getDistanceSquared(createComplexTestPath(0, 0, false, PathWindingRule.NON_ZERO)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createComplexTestPath(0, 0, true, PathWindingRule.NON_ZERO)));
assertEpsilonEquals(0.12162, this.shape.getDistanceSquared(createComplexTestPath(-12, 0, false, PathWindingRule.NON_ZERO)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createComplexTestPath(-12, 0, true, PathWindingRule.NON_ZERO)));
assertEpsilonEquals(22.71622, this.shape.getDistanceSquared(createComplexTestPath(-16, 2, false, PathWindingRule.NON_ZERO)));
assertEpsilonEquals(9, this.shape.getDistanceSquared(createComplexTestPath(-16, 2, true, PathWindingRule.NON_ZERO)));
}
}