/*
* $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.ai;
import static org.arakhne.afc.math.MathConstants.SHAPE_INTERSECTS;
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 java.util.Iterator;
import org.junit.Test;
import org.arakhne.afc.math.MathConstants;
import org.arakhne.afc.math.geometry.PathElementType;
import org.arakhne.afc.math.geometry.d2.Point2D;
import org.arakhne.afc.math.geometry.d2.Shape2D;
import org.arakhne.afc.math.geometry.d2.Transform2D;
@SuppressWarnings("all")
public abstract class AbstractSegment2aiTest<T extends Segment2ai<?, T, ?, ?, ?, B>,
B extends Rectangle2ai<?, ?, ?, ?, ?, B>> extends AbstractShape2aiTest<T, B> {
@Override
protected final T createShape() {
return (T) createSegment(0, 0, 10, 5);
}
@Test
@Override
public void testClone() {
T clone = this.shape.clone();
assertNotNull(clone);
assertNotSame(this.shape, clone);
assertEquals(this.shape.getClass(), clone.getClass());
assertEpsilonEquals(0, clone.getX1());
assertEpsilonEquals(0, clone.getY1());
assertEpsilonEquals(10, clone.getX2());
assertEpsilonEquals(5, clone.getY2());
}
@Test
@Override
public void equalsObject() {
assertFalse(this.shape.equals(null));
assertFalse(this.shape.equals(new Object()));
assertFalse(this.shape.equals(createSegment(0, 0, 5, 5)));
assertFalse(this.shape.equals(createSegment(0, 0, 10, 6)));
assertFalse(this.shape.equals(createRectangle(0, 0, 10, 5)));
assertTrue(this.shape.equals(this.shape));
assertTrue(this.shape.equals(createSegment(0, 0, 10, 5)));
}
@Test
@Override
public void equalsObject_withPathIterator() {
assertFalse(this.shape.equals(createSegment(0, 0, 5, 5).getPathIterator()));
assertFalse(this.shape.equals(createSegment(0, 0, 10, 6).getPathIterator()));
assertFalse(this.shape.equals(createRectangle(0, 0, 10, 5).getPathIterator()));
assertTrue(this.shape.equals(this.shape.getPathIterator()));
assertTrue(this.shape.equals(createSegment(0, 0, 10, 5).getPathIterator()));
}
@Test
@Override
public void equalsToShape() {
assertFalse(this.shape.equalsToShape(null));
assertFalse(this.shape.equalsToShape((T) createSegment(0, 0, 5, 5)));
assertFalse(this.shape.equalsToShape((T) createSegment(0, 0, 10, 6)));
assertTrue(this.shape.equalsToShape(this.shape));
assertTrue(this.shape.equalsToShape((T) createSegment(0, 0, 10, 5)));
}
@Test
@Override
public void equalsToPathIterator() {
assertFalse(this.shape.equalsToPathIterator((PathIterator2ai) null));
assertFalse(this.shape.equalsToPathIterator(createSegment(0, 0, 5, 5).getPathIterator()));
assertFalse(this.shape.equalsToPathIterator(createSegment(0, 0, 10, 6).getPathIterator()));
assertFalse(this.shape.equalsToPathIterator(createRectangle(0, 0, 10, 5).getPathIterator()));
assertTrue(this.shape.equalsToPathIterator(this.shape.getPathIterator()));
assertTrue(this.shape.equalsToPathIterator(createSegment(0, 0, 10, 5).getPathIterator()));
}
@Test
@Override
public void isEmpty() {
assertFalse(this.shape.isEmpty());
this.shape.clear();
assertTrue(this.shape.isEmpty());
}
@Test
@Override
public void clear() {
this.shape.clear();
assertEquals(0, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(0, this.shape.getX2());
assertEquals(0, this.shape.getY2());
}
@Test
@Override
public void getDistance() {
assertEpsilonEquals(0f, this.shape.getDistance(createPoint(0, 0)));
assertEpsilonEquals(1f, this.shape.getDistance(createPoint(1, 1)));
assertEpsilonEquals(2.828427125f, this.shape.getDistance(createPoint(2, 4)));
assertEpsilonEquals(1f, this.shape.getDistance(createPoint(2, 2)));
assertEpsilonEquals(7.071067812f, this.shape.getDistance(createPoint(-5, 5)));
}
@Test
@Override
public void getDistanceSquared() {
assertEpsilonEquals(0f, this.shape.getDistanceSquared(createPoint(0, 0)));
assertEpsilonEquals(1f, this.shape.getDistanceSquared(createPoint(1, 1)));
assertEpsilonEquals(8f, this.shape.getDistanceSquared(createPoint(2, 4)));
assertEpsilonEquals(1f, this.shape.getDistanceSquared(createPoint(2, 2)));
assertEpsilonEquals(50f, this.shape.getDistanceSquared(createPoint(-5, 5)));
}
@Test
@Override
public void getDistanceL1() {
assertEpsilonEquals(0f, this.shape.getDistanceL1(createPoint(0, 0)));
assertEpsilonEquals(1f, this.shape.getDistanceL1(createPoint(1, 1)));
assertEpsilonEquals(4f, this.shape.getDistanceL1(createPoint(2, 4)));
assertEpsilonEquals(1f, this.shape.getDistanceL1(createPoint(2, 2)));
assertEpsilonEquals(10f, this.shape.getDistanceL1(createPoint(-5, 5)));
}
@Test
@Override
public void getDistanceLinf() {
assertEpsilonEquals(0f, this.shape.getDistanceLinf(createPoint(0, 0)));
assertEpsilonEquals(1f, this.shape.getDistanceLinf(createPoint(1, 1)));
assertEpsilonEquals(2f, this.shape.getDistanceLinf(createPoint(2, 4)));
assertEpsilonEquals(1f, this.shape.getDistanceLinf(createPoint(2, 2)));
assertEpsilonEquals(5f, this.shape.getDistanceLinf(createPoint(-5, 5)));
}
@Test
@Override
public void translateIntInt() {
this.shape.translate(3, 4);
assertEquals(3, this.shape.getX1());
assertEquals(4, this.shape.getY1());
assertEquals(13, this.shape.getX2());
assertEquals(9, this.shape.getY2());
}
@Test
@Override
public void translateVector2D() {
this.shape.translate(createVector(3, 4));
assertEquals(3, this.shape.getX1());
assertEquals(4, this.shape.getY1());
assertEquals(13, this.shape.getX2());
assertEquals(9, this.shape.getY2());
}
@Test
public void setIntIntIntInt() {
this.shape.set(3, 4, 5, 6);
assertEquals(3, this.shape.getX1());
assertEquals(4, this.shape.getY1());
assertEquals(5, this.shape.getX2());
assertEquals(6, this.shape.getY2());
}
@Test
public void setPoint2DPoint2D() {
this.shape.set(createPoint(3, 4), createPoint(5, 6));
assertEpsilonEquals(3, this.shape.getX1());
assertEpsilonEquals(4, this.shape.getY1());
assertEpsilonEquals(5, this.shape.getX2());
assertEpsilonEquals(6, this.shape.getY2());
}
@Test
@Override
public void toBoundingBox() {
B bb = this.shape.toBoundingBox();
assertEpsilonEquals(0, bb.getMinX());
assertEpsilonEquals(0, bb.getMinY());
assertEpsilonEquals(10, bb.getMaxX());
assertEpsilonEquals(5, bb.getMaxY());
}
@Test
@Override
public void containsPoint2D() {
assertTrue(this.shape.contains(createPoint(0, 0)));
assertTrue(this.shape.contains(createPoint(10, 5)));
assertFalse(this.shape.contains(createPoint(1, 1)));
assertFalse(this.shape.contains(createPoint(2, 4)));
assertFalse(this.shape.contains(createPoint(2, 2)));
assertTrue(this.shape.contains(createPoint(1, 0)));
assertFalse(this.shape.contains(createPoint(5, 3)));
assertTrue(this.shape.contains(createPoint(5, 2)));
}
@Test
@Override
public void containsIntInt() {
assertTrue(this.shape.contains(0, 0));
assertTrue(this.shape.contains(10, 5));
assertFalse(this.shape.contains(1, 1));
assertFalse(this.shape.contains(2, 4));
assertFalse(this.shape.contains(2, 2));
assertTrue(this.shape.contains(1, 0));
assertFalse(this.shape.contains(5, 3));
assertTrue(this.shape.contains(5, 2));
}
@Test
@Override
public void getClosestPointTo() {
Point2D p;
p = this.shape.getClosestPointTo(createPoint(0,0));
assertIntPointEquals(0, 0, p);
p = this.shape.getClosestPointTo(createPoint(1,1));
assertIntPointEquals(1, 0, p);
p = this.shape.getClosestPointTo(createPoint(2,2));
assertIntPointEquals(2, 1, p);
p = this.shape.getClosestPointTo(createPoint(-2,2));
assertIntPointEquals(0, 0, p);
p = this.shape.getClosestPointTo(createPoint(0,1));
assertIntPointEquals(0, 0, p);
p = this.shape.getClosestPointTo(createPoint(10,-1));
assertIntPointEquals(7, 3, p);
p = this.shape.getClosestPointTo(createPoint(2,4));
assertIntPointEquals(4, 2, p);
}
@Test
@Override
public void getFarthestPointTo() {
Point2D p;
p = this.shape.getFarthestPointTo(createPoint(0,0));
assertEquals(10, p.ix());
assertEquals(5, p.iy());
p = this.shape.getFarthestPointTo(createPoint(1,1));
assertEquals(10, p.ix());
assertEquals(5, p.iy());
p = this.shape.getFarthestPointTo(createPoint(2,2));
assertEquals(10, p.ix());
assertEquals(5, p.iy());
p = this.shape.getFarthestPointTo(createPoint(-2,2));
assertEquals(10, p.ix());
assertEquals(5, p.iy());
p = this.shape.getFarthestPointTo(createPoint(0,1));
assertEquals(10, p.ix());
assertEquals(5, p.iy());
p = this.shape.getFarthestPointTo(createPoint(10,-1));
assertEquals(0, p.ix());
assertEquals(0, p.iy());
p = this.shape.getFarthestPointTo(createPoint(2,4));
assertEquals(10, p.ix());
assertEquals(5, p.iy());
}
@Test
@Override
public void getPathIterator() {
PathIterator2ai pi = this.shape.getPathIterator();
assertElement(pi, PathElementType.MOVE_TO, 0, 0);
assertElement(pi, PathElementType.LINE_TO, 10, 5);
assertNoElement(pi);
}
@Test
@Override
public void getPathIteratorTransform2D() {
Transform2D tr;
PathIterator2ai pi;
tr = new Transform2D();
pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 0,0);
assertElement(pi, PathElementType.LINE_TO, 10,5);
assertNoElement(pi);
tr = new Transform2D();
tr.makeTranslationMatrix(3.4f, 4.5f);
pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 3, 5);
assertElement(pi, PathElementType.LINE_TO, 13, 10);
assertNoElement(pi);
tr = new Transform2D();
tr.makeRotationMatrix(MathConstants.QUARTER_PI);
pi = this.shape.getPathIterator(tr);
assertElement(pi, PathElementType.MOVE_TO, 0, 0);
assertElement(pi, PathElementType.LINE_TO, 4, 11);
assertNoElement(pi);
}
@Test
@Override
public void createTransformedShape() {
T s;
Transform2D tr;
tr = new Transform2D();
s = (T) this.shape.createTransformedShape(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(10, s.getX2());
assertEquals(5, s.getY2());
tr = new Transform2D();
tr.setTranslation(3.4f, 4.5f);
s = (T) this.shape.createTransformedShape(tr);
assertEquals(3, s.getX1());
assertEquals(5, s.getY1());
assertEquals(13, s.getX2());
assertEquals(10, s.getY2());
tr = new Transform2D();
tr.setRotation(MathConstants.PI);
s = (T) this.shape.createTransformedShape(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(-10, s.getX2());
assertEquals(-5, s.getY2());
tr = new Transform2D();
tr.setRotation(MathConstants.QUARTER_PI);
s = (T) this.shape.createTransformedShape(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(4, s.getX2());
assertEquals(11, s.getY2());
}
@Test
public void transformTransform2D() {
T s;
Transform2D tr;
tr = new Transform2D();
s = this.shape.clone();
s.transform(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(10, s.getX2());
assertEquals(5, s.getY2());
tr = new Transform2D();
tr.makeTranslationMatrix(3.4f, 4.5f);
s = this.shape.clone();
s.transform(tr);
assertEquals(3, s.getX1());
assertEquals(5, s.getY1());
assertEquals(13, s.getX2());
assertEquals(10, s.getY2());
tr = new Transform2D();
tr.makeRotationMatrix(MathConstants.PI);
s = this.shape.clone();
s.transform(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(-10, s.getX2());
assertEquals(-5, s.getY2());
tr = new Transform2D();
tr.makeRotationMatrix(MathConstants.QUARTER_PI);
s = this.shape.clone();
s.transform(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(4, s.getX2());
assertEquals(11, s.getY2());
}
@Test
@Override
public void getPointIterator() {
Point2D p;
Iterator<? extends Point2D> iterator = this.shape.getPointIterator();
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(0, p.ix());
assertEquals(0, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(1, p.ix());
assertEquals(0, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(2, p.ix());
assertEquals(1, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(3, p.ix());
assertEquals(1, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(4, p.ix());
assertEquals(2, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(5, p.ix());
assertEquals(2, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(6, p.ix());
assertEquals(3, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(7, p.ix());
assertEquals(3, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(8, p.ix());
assertEquals(4, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(9, p.ix());
assertEquals(4, p.iy());
assertTrue(iterator.hasNext());
p = iterator.next();
assertNotNull(p);
assertEquals(10, p.ix());
assertEquals(5, p.iy());
assertFalse(iterator.hasNext());
}
@Test
public void staticIntersectsSegmentSegment() {
assertTrue(Segment2ai.intersectsSegmentSegment(0, 0, 10, 5, 0, 0, 10, 5));
assertTrue(Segment2ai.intersectsSegmentSegment(0, 0, 10, 5, 0, 0, 5, 2));
assertFalse(Segment2ai.intersectsSegmentSegment(0, 0, 10, 5, 0, 1, 5, 3));
assertFalse(Segment2ai.intersectsSegmentSegment(0, 0, 10, 5, 0, 2, 5, 4));
assertTrue(Segment2ai.intersectsSegmentSegment(0, 0, 10, 5, 5, 0, 4, 3));
assertFalse(Segment2ai.intersectsSegmentSegment(0, 0, 10, 5, -1, 5, -1, 0));
assertTrue(Segment2ai.intersectsSegmentSegment(5, 3, 7, 5, 6, 2, 6, 5));
assertTrue(Segment2ai.intersectsSegmentSegment(5, 3, 7, 5, 9, 4, 6, 6));
assertFalse(Segment2ai.intersectsSegmentSegment(5, 3, 7, 5, 9, 4, 6, 7));
assertTrue(Segment2ai.intersectsSegmentSegment(5, 3, 7, 5, 6, 4, 6, 8));
}
@Test
public void staticCalculatesCrossingsPointShadowSegment() {
assertEquals(0, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, -1, -1, 0, 0));
assertEquals(0, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 4, -2, 4, 10));
assertEquals(2, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 6, -2, 6, 10));
assertEquals(SHAPE_INTERSECTS, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 5, -2, 5, 10));
assertEquals(-2, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 6, 10, 6, -2));
assertEquals(SHAPE_INTERSECTS, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 5, 10, 5, -2));
assertEquals(2, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 10, -5, 127, 345));
assertEquals(-2, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 127, 345, 10, -5));
assertEquals(1, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 127, 3, 200, 345));
assertEquals(-1, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 127, 345, 200, 3));
assertEquals(1, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 10, 1, 12, 3));
assertEquals(-1, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 12, 3, 10, 1));
assertEquals(1, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 10, 3, 12, 5));
assertEquals(-1, Segment2ai.calculatesCrossingsPointShadowSegment(0, 5, 3, 12, 5, 10, 3));
assertEquals(0, Segment2ai.calculatesCrossingsPointShadowSegment(0, 4, -1, 7, -5, 0, 0));
}
@Test
public void staticCalculatesCrossingsRectangleShadowSegment() {
int[] data = new int[] {
-1, -1, 0, 0, 0,
-1, 0, 10, 0, 0,
10, -2, 12, 4, 1,
12, 4, 50, 10, 1,
10, -2, 50, 10, 2,
10, 3, 12, 4, 0,
12, 4, 50, 5, 0,
12, 3, 50, 5, 0,
12, 5, 50, 5, 0,
12, 4, 50, 10, 1,
12, 3, 50, 10, 1,
12, 5, 50, 10, 1,
0, 5, 3, 7, 0,
6, 2, 6, 4, SHAPE_INTERSECTS,
6, 4, 6, 8, SHAPE_INTERSECTS,
7, 4, 7, 8, SHAPE_INTERSECTS,
5, 4, 5, 8, SHAPE_INTERSECTS,
4, 4, 6, 6, SHAPE_INTERSECTS,
6, 6, 8, 4, SHAPE_INTERSECTS,
5, 4, 7, 4, SHAPE_INTERSECTS,
0, 4, 7, 4, SHAPE_INTERSECTS,
6, 6, 12, 8, 0,
6, 2, 12, -3, 0,
};
String label;
for(int i=0; i<data.length;) {
int x1 = data[i++];
int y1 = data[i++];
int x2 = data[i++];
int y2 = data[i++];
int crossing = data[i++];
label = x1+";"+y1+";"+x2+";"+y2; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(label, crossing, Segment2ai.calculatesCrossingsRectangleShadowSegment(0, 5, 3, 7, 5, x1, y1, x2, y2));
label = x2+";"+y2+";"+x1+";"+y1; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (crossing!=SHAPE_INTERSECTS) {
crossing = -crossing;
}
assertEquals(label, crossing, Segment2ai.calculatesCrossingsRectangleShadowSegment(0, 5, 3, 7, 5, x2, y2, x1, y1));
}
}
@Test
public void staticCalculatesCrossingsSegmentShadowSegment() {
assertEquals(0, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ -1, -1, 0, 0));
assertEquals(0, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ -1, 0, 10, 0));
assertEquals(1, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 10, -2, 12, 4));
assertEquals(1, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 12, 4, 50, 10));
assertEquals(2, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 10, -2, 50, 10));
assertEquals(0, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 10, 3, 12, 4));
assertEquals(0, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 12, 4, 50, 5));
assertEquals(0, Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 12, 3, 50, 5));
assertEquals(1,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 6, 2, 6, 3));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 6, 2, 6, 5));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 6, 2, 6, 4));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 6, 4, 6, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 6, 3, 6, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 7, 4, 7, 8));
assertEquals(0,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 5, 4, 5, 8));
assertEquals(0,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 4, 4, 6, 6));
assertEquals(0,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 4, 3, 6, 5));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 8, 4, 6, 6));
assertEquals(1,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 10, 4, 6, 8));
assertEquals(-1,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 6, 8, 10, 4));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsSegmentShadowSegment(0, /**/ 5, 3, 7, 5, /**/ 5, 4, 100, 6));
}
@Test
public void staticCalculatesCrossingsCircleShadowSegment() {
assertEquals(0, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ -1, -1, 0, 0));
assertEquals(0, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ -1, 0, 10, 0));
assertEquals(1, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 10, -2, 12, 4));
assertEquals(1, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 12, 4, 50, 10));
assertEquals(2, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 10, -2, 50, 10));
assertEquals(0, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 10, 3, 12, 4));
assertEquals(0, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 12, 4, 50, 5));
assertEquals(0, Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 12, 3, 50, 5));
assertEquals(1,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 6, 2, 6, 3));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 6, 2, 6, 5));
assertEquals(1,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 7, 2, 7, 4));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 6, 2, 6, 4));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 6, 4, 6, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 6, 3, 6, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 7, 4, 7, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 5, 4, 5, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 4, 4, 6, 6));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 4, 3, 6, 5));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 8, 4, 6, 6));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 10, 4, 6, 8));
assertEquals(SHAPE_INTERSECTS,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 6, 8, 10, 4));
assertEquals(1,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 7, 8, 10, 12));
assertEquals(-1,
Segment2ai.calculatesCrossingsCircleShadowSegment(0, /**/ 4, 6, 3, /**/ 10, 12, 7, 8));
}
@Test
@Override
public void setIT() {
this.shape.set((T) createSegment(10, 12, 14, 16));
assertEquals(10, this.shape.getX1());
assertEquals(12, this.shape.getY1());
assertEquals(14, this.shape.getX2());
assertEquals(16, this.shape.getY2());
}
@Test
public void setX1() {
this.shape.setX1(145);
assertEquals(145, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(5, this.shape.getY2());
}
@Test
public void setY1() {
this.shape.setY1(145);
assertEquals(0, this.shape.getX1());
assertEquals(145, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(5, this.shape.getY2());
}
@Test
public void setX2() {
this.shape.setX2(145);
assertEquals(0, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(145, this.shape.getX2());
assertEquals(5, this.shape.getY2());
}
@Test
public void setY2() {
this.shape.setY2(145);
assertEquals(0, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(145, this.shape.getY2());
}
@Test
public void getX1() {
assertEquals(0, this.shape.getX1());
}
@Test
public void getY1() {
assertEquals(0, this.shape.getY1());
}
@Test
public void getX2() {
assertEquals(10, this.shape.getX2());
}
@Test
public void getY2() {
assertEquals(5, this.shape.getY2());
}
@Test
public void getP1() {
Point2D p = this.shape.getP1();
assertEquals(0, p.ix());
assertEquals(0, p.iy());
}
@Test
public void getP2() {
Point2D p = this.shape.getP2();
assertEquals(10, p.ix());
assertEquals(5, p.iy());
}
@Test
public void staticFindsClosestPointSegmentPoint() {
Point2D p;
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, 0, 0, p);
assertEquals(0, p.ix());
assertEquals(0, p.iy());
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, 1, 1, p);
assertEquals(1, p.ix());
assertEquals(0, p.iy());
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, 2, 2, p);
assertEquals(2, p.ix());
assertEquals(1, p.iy());
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, -2, 2, p);
assertEquals(0, p.ix());
assertEquals(0, p.iy());
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, 0, 1, p);
assertEquals(0, p.ix());
assertEquals(0, p.iy());
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, 10, -1, p);
assertEquals(7, p.ix());
assertEquals(3, p.iy());
p = createPoint(0, 0);
Segment2ai.findsClosestPointSegmentPoint(0, 0, 10, 5, 2, 4, p);
assertEquals(4, p.ix());
assertEquals(2, p.iy());
}
@Test
public void staticFindsFarthestPointSegmentPoint() {
Point2D p;
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, 0, 0, p);
assertIntPointEquals(10, 5, p);
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, 1, 1, p);
assertIntPointEquals(10, 5, p);
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, 2, 2, p);
assertIntPointEquals(10, 5, p);
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, -2, 2, p);
assertIntPointEquals(10, 5, p);
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, 0, 1, p);
assertIntPointEquals(10, 5, p);
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, 10, -1, p);
assertIntPointEquals(0, 0, p);
p = createPoint(0, 0);
Segment2ai.findsFarthestPointSegmentPoint(0, 0, 10, 5, 2, 4, p);
assertIntPointEquals(10, 5, p);
}
@Test
public void staticFindsClosestPointsSegmentSegment() {
Point2D p1;
Point2D p2;
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(0, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 10, 5, 0, 0, 1, 15, p1, p2));
assertIntPointEquals(0, 0, p1);
assertIntPointEquals(0, 0, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(4, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 10, 5, 0, 2, 1, 15, p1, p2));
assertIntPointEquals(0, 0, p1);
assertIntPointEquals(0, 2, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(58, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 10, 5, 0, 15, 5, 11, p1, p2));
assertIntPointEquals(8, 4, p1);
assertIntPointEquals(5, 11, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(4, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 10, 5, 0, 2, 10, 17, p1, p2));
assertIntPointEquals(0, 0, p1);
assertIntPointEquals(0, 2, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(0, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 10, 5, 0, 15, 10, 0, p1, p2));
assertIntPointEquals(8, 4, p1);
assertIntPointEquals(7, 4, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(1, Segment2ai.findsClosestPointsSegmentSegment(2, 2, 3, 1, 3, -1, 8, 8, p1, p2));
assertIntPointEquals(3, 1, p1);
assertIntPointEquals(4, 1, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(0, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 2, 2, 3, -1, 1, 1, p1, p2));
assertIntPointEquals(1, 1, p1);
assertIntPointEquals(1, 1, p2);
p1 = createPoint(0, 0);
p2 = createPoint(0, 0);
assertEpsilonEquals(89, Segment2ai.findsClosestPointsSegmentSegment(0, 0, 10, 5, 0, 15, 5, 13, p1, p2));
assertIntPointEquals(10, 5, p1);
assertIntPointEquals(5, 13, p2);
}
@Test
public void staticFindsClosestPointSegmentRectangle() {
Point2D p1;
p1 = createPoint(0, 0);
assertEpsilonEquals(0, Segment2ai.findsClosestPointSegmentRectangle(0, 0, 10, 5, 0, 0, 5, 2, p1));
assertIntPointEquals(2, 1, p1);
p1 = createPoint(0, 0);
assertEpsilonEquals(0, Segment2ai.findsClosestPointSegmentRectangle(0, 0, 10, 5, 0, 2, 5, 2, p1));
assertIntPointEquals(4, 2, p1);
p1 = createPoint(0, 0);
assertEpsilonEquals(34, Segment2ai.findsClosestPointSegmentRectangle(0, 0, 10, 5, 15, 0, 5, 2, p1));
assertIntPointEquals(10, 5, p1);
p1 = createPoint(0, 0);
assertEpsilonEquals(125, Segment2ai.findsClosestPointSegmentRectangle(0, 0, 10, 5, 0, 15, 5, 2, p1));
assertIntPointEquals(10, 5, p1);
}
@Test
public void staticFindsSideLinePoint() {
assertEquals(0, Segment2ai.findsSideLinePoint(0, 0, 1, 1, 0, 0));
assertEquals(0, Segment2ai.findsSideLinePoint(0, 0, 1, 1, 1, 1));
assertEquals(0, Segment2ai.findsSideLinePoint(0, 0, 1, 1, 2, 2));
assertEquals(1, Segment2ai.findsSideLinePoint(0, 0, 1, 1, 120, 0));
assertEquals(0, Segment2ai.findsSideLinePoint(0, 0, 1, 1, -20, -20));
assertEquals(-1, Segment2ai.findsSideLinePoint(0, 0, 1, 1, 0, 1));
assertEquals(-1, Segment2ai.findsSideLinePoint(0, 0, 1, 1, 0, 120));
}
@Test
public void setP1Point2D() {
this.shape.setP1(createPoint(145, 654));
assertEquals(145, this.shape.getX1());
assertEquals(654, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(5, this.shape.getY2());
}
@Test
public void setP2Point2D() {
this.shape.setP2(createPoint(145, 654));
assertEquals(0, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(145, this.shape.getX2());
assertEquals(654, this.shape.getY2());
}
@Test
public void setP1IntInt() {
this.shape.setP1(145, 654);
assertEquals(145, this.shape.getX1());
assertEquals(654, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(5, this.shape.getY2());
}
@Test
public void setP2IntInt() {
this.shape.setP2(145, 654);
assertEquals(0, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(145, this.shape.getX2());
assertEquals(654, this.shape.getY2());
}
@Override
@Test
public void toBoundingBoxB() {
B bb = createRectangle(0, 0, 0, 0);
this.shape.toBoundingBox(bb);
assertEpsilonEquals(0, bb.getMinX());
assertEpsilonEquals(0, bb.getMinY());
assertEpsilonEquals(10, bb.getMaxX());
assertEpsilonEquals(5, bb.getMaxY());
}
@Override
@Test
public void containsRectangle2ai() {
assertFalse(this.shape.contains(createRectangle(0,0,1,1)));
assertFalse(this.shape.contains(createRectangle(0,0,8,1)));
assertFalse(this.shape.contains(createRectangle(0,0,8,6)));
assertFalse(this.shape.contains(createRectangle(0,0,100,100)));
assertFalse(this.shape.contains(createRectangle(7,10,1,1)));
assertFalse(this.shape.contains(createRectangle(16,0,100,100)));
assertFalse(this.shape.contains(createRectangle(0,3,3,10)));
this.shape = (T) createSegment(0, 0, 10, 0);
assertFalse(this.shape.contains(createRectangle(0,0,2,0)));
}
@Override
@Test
public void containsShape2D() {
assertFalse(this.shape.contains(createCircle(0,0,1)));
assertFalse(this.shape.contains(createCircle(0,0,8)));
assertFalse(this.shape.contains(createCircle(0,0,6)));
assertFalse(this.shape.contains(createCircle(0,0,100)));
assertFalse(this.shape.contains(createCircle(7,10,1)));
assertFalse(this.shape.contains(createCircle(16,0,100)));
assertFalse(this.shape.contains(createCircle(0,3,3)));
assertFalse(this.shape.contains(createCircle(0,3,10)));
}
@Test
public void clipToRectangle() {
assertTrue(this.shape.clipToRectangle(3, 1, 7, 6));
assertEquals(3, this.shape.getX1());
assertEquals(1, this.shape.getY1());
assertEquals(7, this.shape.getX2());
assertEquals(3, this.shape.getY2());
this.shape = createShape();
assertTrue(this.shape.clipToRectangle(8, 3, 11, 7));
assertEquals(8, this.shape.getX1());
assertEquals(4, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(5, this.shape.getY2());
this.shape = createShape();
assertFalse(this.shape.clipToRectangle(0, 3, 5, 4));
assertEquals(0, this.shape.getX1());
assertEquals(0, this.shape.getY1());
assertEquals(10, this.shape.getX2());
assertEquals(5, this.shape.getY2());
}
@Override
@Test
public void intersectsRectangle2ai() {
assertTrue(this.shape.intersects(createRectangle(0,0,1,1)));
assertTrue(this.shape.intersects(createRectangle(0,0,8,1)));
assertTrue(this.shape.intersects(createRectangle(0,0,8,6)));
assertTrue(this.shape.intersects(createRectangle(0,0,100,100)));
assertFalse(this.shape.intersects(createRectangle(7,10,1,1)));
assertFalse(this.shape.intersects(createRectangle(16,0,100,100)));
assertFalse(this.shape.intersects(createRectangle(0,3,3,10)));
}
@Override
@Test
public void intersectsCircle2ai() {
assertTrue(this.shape.intersects(createCircle(0,0,1)));
assertTrue(this.shape.intersects(createCircle(0,0,8)));
assertTrue(this.shape.intersects(createCircle(0,0,8)));
assertTrue(this.shape.intersects(createCircle(0,0,100)));
assertFalse(this.shape.intersects(createCircle(7,10,1)));
assertTrue(this.shape.intersects(createCircle(16,0,100)));
assertTrue(this.shape.intersects(createCircle(0,3,3)));
assertFalse(this.shape.intersects(createCircle(0,3,1)));
}
@Test
@Override
public void intersectsSegment2ai() {
assertTrue(this.shape.intersects(createSegment(0,0,1,10)));
assertTrue(this.shape.intersects(createSegment(0,0,8,0)));
assertTrue(this.shape.intersects(createSegment(0,0,8,-1)));
assertTrue(this.shape.intersects(createSegment(0,0,100,-100)));
assertFalse(this.shape.intersects(createSegment(7,10,1,3)));
assertFalse(this.shape.intersects(createSegment(16,0,100,3)));
assertFalse(this.shape.intersects(createSegment(0,3,3,3)));
assertFalse(this.shape.intersects(createSegment(0,3,5,3)));
assertTrue(this.shape.intersects(createSegment(0,3,6,3)));
assertFalse(this.shape.intersects(createSegment(0,3,1,2)));
}
@Override
@Test
public void intersectsPath2ai() {
Path2ai path = createPath();
path.moveTo(0, 0);
path.lineTo(2, 2);
path.quadTo(3, 0, 4, 3);
path.curveTo(5, -1, 6, 5, 7, -5);
path.closePath();
assertTrue(createSegment(0, 0, 1, 1).intersects(path));
assertTrue(createSegment(4, 3, 1, 1).intersects(path));
assertTrue(createSegment(2, 2, 1, 1).intersects(path));
assertTrue(createSegment(2, 1, 1, 1).intersects(path));
assertTrue(createSegment(3, 0, 1, 1).intersects(path));
assertTrue(createSegment(-1, -1, 1, 1).intersects(path));
assertTrue(createSegment(4, -3, 1, 1).intersects(path));
assertTrue(createSegment(-3, 4, 1, 1).intersects(path));
assertTrue(createSegment(6, -5, 1, 1).intersects(path));
assertTrue(createSegment(4, 0, 1, 1).intersects(path));
assertTrue(createSegment(5, 0, 1, 1).intersects(path));
assertFalse(createSegment(-4, -4, -3, -3).intersects(path));
assertFalse(createSegment(-1, 0, 2, 3).intersects(path));
assertFalse(createSegment(7, 1, 18, 14).intersects(path));
}
@Override
public void intersectsPathIterator2ai() {
Path2ai path = createPath();
path.moveTo(0, 0);
path.lineTo(2, 2);
path.quadTo(3, 0, 4, 3);
path.curveTo(5, -1, 6, 5, 7, -5);
path.closePath();
assertTrue(createSegment(0, 0, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(4, 3, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(2, 2, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(2, 1, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(3, 0, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(-1, -1, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(4, -3, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(-3, 4, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(6, -5, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(4, 0, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertTrue(createSegment(5, 0, 1, 1).intersects((PathIterator2ai) path.getPathIterator()));
assertFalse(createSegment(-4, -4, -3, -3).intersects((PathIterator2ai) path.getPathIterator()));
assertFalse(createSegment(-1, 0, 2, 3).intersects((PathIterator2ai) path.getPathIterator()));
assertFalse(createSegment(7, 1, 18, 14).intersects((PathIterator2ai) path.getPathIterator()));
}
@Override
public void intersectsShape2D() {
assertTrue(this.shape.intersects((Shape2D) createCircle(16,0,100)));
assertTrue(this.shape.intersects((Shape2D) createRectangle(0,0,100,100)));
}
@Override
public void operator_addVector2D() {
this.shape.operator_add(createVector(3, 4));
assertEquals(3, this.shape.getX1());
assertEquals(4, this.shape.getY1());
assertEquals(13, this.shape.getX2());
assertEquals(9, this.shape.getY2());
}
@Override
public void operator_plusVector2D() {
T r = this.shape.operator_plus(createVector(3, 4));
assertEquals(3, r.getX1());
assertEquals(4, r.getY1());
assertEquals(13, r.getX2());
assertEquals(9, r.getY2());
}
@Override
public void operator_removeVector2D() {
this.shape.operator_remove(createVector(3, 4));
assertEquals(-3, this.shape.getX1());
assertEquals(-4, this.shape.getY1());
assertEquals(7, this.shape.getX2());
assertEquals(1, this.shape.getY2());
}
@Override
public void operator_minusVector2D() {
T r = this.shape.operator_minus(createVector(3, 4));
assertEquals(-3, r.getX1());
assertEquals(-4, r.getY1());
assertEquals(7, r.getX2());
assertEquals(1, r.getY2());
}
@Override
public void operator_multiplyTransform2D() {
T s;
Transform2D tr;
tr = new Transform2D();
s = (T) this.shape.operator_multiply(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(10, s.getX2());
assertEquals(5, s.getY2());
tr = new Transform2D();
tr.setTranslation(3.4f, 4.5f);
s = (T) this.shape.operator_multiply(tr);
assertEquals(3, s.getX1());
assertEquals(5, s.getY1());
assertEquals(13, s.getX2());
assertEquals(10, s.getY2());
tr = new Transform2D();
tr.setRotation(MathConstants.PI);
s = (T) this.shape.operator_multiply(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(-10, s.getX2());
assertEquals(-5, s.getY2());
tr = new Transform2D();
tr.setRotation(MathConstants.QUARTER_PI);
s = (T) this.shape.operator_multiply(tr);
assertEquals(0, s.getX1());
assertEquals(0, s.getY1());
assertEquals(4, s.getX2());
assertEquals(11, s.getY2());
}
@Override
public void operator_andPoint2D() {
assertTrue(this.shape.operator_and(createPoint(0, 0)));
assertTrue(this.shape.operator_and(createPoint(10, 5)));
assertFalse(this.shape.operator_and(createPoint(1, 1)));
assertFalse(this.shape.operator_and(createPoint(2, 4)));
assertFalse(this.shape.operator_and(createPoint(2, 2)));
assertTrue(this.shape.operator_and(createPoint(1, 0)));
assertFalse(this.shape.operator_and(createPoint(5, 3)));
assertTrue(this.shape.operator_and(createPoint(5, 2)));
}
@Override
public void operator_andShape2D() {
assertTrue(this.shape.operator_and(createCircle(16,0,100)));
assertTrue(this.shape.operator_and(createRectangle(0,0,100,100)));
}
@Override
public void operator_upToPoint2D() {
assertEpsilonEquals(0f, this.shape.operator_upTo(createPoint(0, 0)));
assertEpsilonEquals(1f, this.shape.operator_upTo(createPoint(1, 1)));
assertEpsilonEquals(2.828427125f, this.shape.operator_upTo(createPoint(2, 4)));
assertEpsilonEquals(1f, this.shape.operator_upTo(createPoint(2, 2)));
assertEpsilonEquals(7.071067812f, this.shape.operator_upTo(createPoint(-5, 5)));
}
@Override
@Test
public void getClosestPointToCircle2ai() {
assertClosestPointInBothShapes(this.shape, createCircle(0, 0, 2));
assertIntPointEquals(6, 3, this.shape.getClosestPointTo(createCircle(0, 15, 2)));
assertIntPointEquals(10, 5, this.shape.getClosestPointTo(createCircle(15, 0, 2)));
assertIntPointEquals(6, 3, this.shape.getClosestPointTo(createCircle(4, 5, 2)));
}
@Override
@Test
public void getDistanceSquaredCircle2ai() {
assertEpsilonEquals(0, this.shape.getDistanceSquared(createCircle(0, 0, 2)));
assertEpsilonEquals(125, this.shape.getDistanceSquared(createCircle(0, 15, 2)));
assertEpsilonEquals(25, this.shape.getDistanceSquared(createCircle(15, 0, 2)));
assertEpsilonEquals(1, this.shape.getDistanceSquared(createCircle(4, 5, 2)));
}
@Override
@Test
public void getClosestPointToSegment2ai() {
assertClosestPointInBothShapes(this.shape, createSegment(0, 0, 5, -2));
assertIntPointEquals(10, 5, this.shape.getClosestPointTo(createSegment(0, 15, 5, 13)));
assertIntPointEquals(10, 5, this.shape.getClosestPointTo(createSegment(15, 0, 20, 13)));
assertIntPointEquals(7, 3, this.shape.getClosestPointTo(createSegment(4, 5, 9, 3)));
}
@Override
@Test
public void getDistanceSquaredSegment2ai() {
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSegment(0, 0, 5, -2)));
assertEpsilonEquals(89, this.shape.getDistanceSquared(createSegment(0, 15, 5, 13)));
assertEpsilonEquals(40, this.shape.getDistanceSquared(createSegment(15, 0, 20, 13)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createSegment(4, 5, 9, 3)));
}
@Override
@Test
public void getClosestPointToRectangle2ai() {
assertClosestPointInBothShapes(this.shape, createRectangle(0, 0, 3, 2));
assertIntPointEquals(8, 4, this.shape.getClosestPointTo(createRectangle(2, 11, 3, 2)));
assertIntPointEquals(5, 2, this.shape.getClosestPointTo(createRectangle(2, 3, 3, 2)));
assertClosestPointInBothShapes(this.shape, createRectangle(3, 3, 3, 2));
assertIntPointEquals(9, 4, this.shape.getClosestPointTo(createRectangle(15, -10, 3, 2)));
}
@Override
@Test
public void getDistanceSquaredRectangle2ai() {
assertEpsilonEquals(0, this.shape.getDistanceSquared(createRectangle(0, 0, 3, 2)));
assertEpsilonEquals(58, this.shape.getDistanceSquared(createRectangle(2, 11, 3, 2)));
assertEpsilonEquals(1, this.shape.getDistanceSquared(createRectangle(2, 3, 3, 2)));
assertEpsilonEquals(0, this.shape.getDistanceSquared(createRectangle(3, 3, 3, 2)));
assertEpsilonEquals(180, this.shape.getDistanceSquared(createRectangle(15, -10, 3, 2)));
}
protected MultiShape2ai createTestMultiShape(int dx, int dy) {
MultiShape2ai multishape = createMultiShape();
Segment2ai segment = createSegment(dx - 5, dy - 4, dx - 8, dy - 1);
Rectangle2ai rectangle = createRectangle(dx + 2, dy + 1, 3, 2);
multishape.add(segment);
multishape.add(rectangle);
return multishape;
}
@Override
@Test
public void getClosestPointToMultiShape2ai() {
assertClosestPointInBothShapes(this.shape, createTestMultiShape(0, 0));
assertIntPointEquals(0, 0, this.shape.getClosestPointTo(createTestMultiShape(0, 15)));
assertIntPointEquals(5, 2, this.shape.getClosestPointTo(createTestMultiShape(15, 0)));
}
@Override
@Test
public void getDistanceSquaredMultiShape2ai() {
assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestMultiShape(0, 0)));
assertEpsilonEquals(146, this.shape.getDistanceSquared(createTestMultiShape(0, 15)));
assertEpsilonEquals(13, this.shape.getDistanceSquared(createTestMultiShape(15, 0)));
}
protected Path2ai createTestPath(int dx, int dy) {
Path2ai path = createPath();
path.moveTo(dx + 5, dy - 5);
path.lineTo(dx + 20, dy + 5);
path.lineTo(dx + 0, dy + 20);
path.lineTo(dx - 5, dy);
return path;
}
@Override
@Test
public void getClosestPointToPath2ai() {
assertClosestPointInBothShapes(this.shape, createTestPath(0, 0));
assertIntPointEquals(8, 4, this.shape.getClosestPointTo(createTestPath(0, 15)));
assertIntPointEquals(10, 5, this.shape.getClosestPointTo(createTestPath(15, 0)));
}
@Override
@Test
public void getDistanceSquaredPath2ai() {
assertEpsilonEquals(0, this.shape.getDistanceSquared(createTestPath(0, 0)));
assertEpsilonEquals(45, this.shape.getDistanceSquared(createTestPath(0, 15)));
assertEpsilonEquals(1, this.shape.getDistanceSquared(createTestPath(15, 0)));
}
}