|
Java example source code file (ArcsSetTest.java)
This example Java source code file (ArcsSetTest.java) is included in the alvinalexander.com
"Java Source Code
Warehouse" project. The intent of this project is to help you "Learn
Java by Example" TM.
Learn more about this Java project at its project page.
The ArcsSetTest.java Java example source code
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.commons.math3.geometry.spherical.oned;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import org.apache.commons.math3.exception.NumberIsTooLargeException;
import org.apache.commons.math3.geometry.partitioning.BSPTree;
import org.apache.commons.math3.geometry.partitioning.Region;
import org.apache.commons.math3.geometry.partitioning.Region.Location;
import org.apache.commons.math3.geometry.partitioning.RegionFactory;
import org.apache.commons.math3.geometry.partitioning.Side;
import org.apache.commons.math3.geometry.partitioning.SubHyperplane;
import org.apache.commons.math3.util.FastMath;
import org.apache.commons.math3.util.MathUtils;
import org.apache.commons.math3.util.Precision;
import org.junit.Assert;
import org.junit.Test;
public class ArcsSetTest {
@Test
public void testArc() {
ArcsSet set = new ArcsSet(2.3, 5.7, 1.0e-10);
Assert.assertEquals(3.4, set.getSize(), 1.0e-10);
Assert.assertEquals(1.0e-10, set.getTolerance(), 1.0e-20);
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(2.3)));
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(5.7)));
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(1.2)));
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(8.5)));
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(8.7)));
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(3.0)));
Assert.assertEquals(1, set.asList().size());
Assert.assertEquals(2.3, set.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.7, set.asList().get(0).getSup(), 1.0e-10);
}
@Test
public void testWrapAround2PiArc() {
ArcsSet set = new ArcsSet(5.7 - MathUtils.TWO_PI, 2.3, 1.0e-10);
Assert.assertEquals(MathUtils.TWO_PI - 3.4, set.getSize(), 1.0e-10);
Assert.assertEquals(1.0e-10, set.getTolerance(), 1.0e-20);
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(2.3)));
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(5.7)));
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(1.2)));
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(8.5)));
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(8.7)));
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(3.0)));
Assert.assertEquals(1, set.asList().size());
Assert.assertEquals(5.7, set.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(2.3 + MathUtils.TWO_PI, set.asList().get(0).getSup(), 1.0e-10);
}
@Test
public void testSplitOver2Pi() {
ArcsSet set = new ArcsSet(1.0e-10);
Arc arc = new Arc(1.5 * FastMath.PI, 2.5 * FastMath.PI, 1.0e-10);
ArcsSet.Split split = set.split(arc);
for (double alpha = 0.0; alpha <= MathUtils.TWO_PI; alpha += 0.01) {
S1Point p = new S1Point(alpha);
if (alpha < 0.5 * FastMath.PI || alpha > 1.5 * FastMath.PI) {
Assert.assertEquals(Location.OUTSIDE, split.getPlus().checkPoint(p));
Assert.assertEquals(Location.INSIDE, split.getMinus().checkPoint(p));
} else {
Assert.assertEquals(Location.INSIDE, split.getPlus().checkPoint(p));
Assert.assertEquals(Location.OUTSIDE, split.getMinus().checkPoint(p));
}
}
}
@Test
public void testSplitAtEnd() {
ArcsSet set = new ArcsSet(1.0e-10);
Arc arc = new Arc(FastMath.PI, MathUtils.TWO_PI, 1.0e-10);
ArcsSet.Split split = set.split(arc);
for (double alpha = 0.01; alpha < MathUtils.TWO_PI; alpha += 0.01) {
S1Point p = new S1Point(alpha);
if (alpha > FastMath.PI) {
Assert.assertEquals(Location.OUTSIDE, split.getPlus().checkPoint(p));
Assert.assertEquals(Location.INSIDE, split.getMinus().checkPoint(p));
} else {
Assert.assertEquals(Location.INSIDE, split.getPlus().checkPoint(p));
Assert.assertEquals(Location.OUTSIDE, split.getMinus().checkPoint(p));
}
}
S1Point zero = new S1Point(0.0);
Assert.assertEquals(Location.BOUNDARY, split.getPlus().checkPoint(zero));
Assert.assertEquals(Location.BOUNDARY, split.getMinus().checkPoint(zero));
S1Point pi = new S1Point(FastMath.PI);
Assert.assertEquals(Location.BOUNDARY, split.getPlus().checkPoint(pi));
Assert.assertEquals(Location.BOUNDARY, split.getMinus().checkPoint(pi));
}
@Test(expected=NumberIsTooLargeException.class)
public void testWrongInterval() {
new ArcsSet(1.2, 0.0, 1.0e-10);
}
@Test
public void testFullEqualEndPoints() {
ArcsSet set = new ArcsSet(1.0, 1.0, 1.0e-10);
Assert.assertEquals(1.0e-10, set.getTolerance(), 1.0e-20);
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(9.0)));
for (double alpha = -20.0; alpha <= 20.0; alpha += 0.1) {
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(alpha)));
}
Assert.assertEquals(1, set.asList().size());
Assert.assertEquals(0.0, set.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(2 * FastMath.PI, set.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(2 * FastMath.PI, set.getSize(), 1.0e-10);
}
@Test
public void testFullCircle() {
ArcsSet set = new ArcsSet(1.0e-10);
Assert.assertEquals(1.0e-10, set.getTolerance(), 1.0e-20);
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(9.0)));
for (double alpha = -20.0; alpha <= 20.0; alpha += 0.1) {
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(alpha)));
}
Assert.assertEquals(1, set.asList().size());
Assert.assertEquals(0.0, set.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(2 * FastMath.PI, set.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(2 * FastMath.PI, set.getSize(), 1.0e-10);
}
@Test
public void testEmpty() {
ArcsSet empty = (ArcsSet) new RegionFactory<Sphere1D>().getComplement(new ArcsSet(1.0e-10));
Assert.assertEquals(1.0e-10, empty.getTolerance(), 1.0e-20);
Assert.assertEquals(0.0, empty.getSize(), 1.0e-10);
Assert.assertTrue(empty.asList().isEmpty());
}
@Test
public void testTiny() {
ArcsSet tiny = new ArcsSet(0.0, Precision.SAFE_MIN / 2, 1.0e-10);
Assert.assertEquals(1.0e-10, tiny.getTolerance(), 1.0e-20);
Assert.assertEquals(Precision.SAFE_MIN / 2, tiny.getSize(), 1.0e-10);
Assert.assertEquals(1, tiny.asList().size());
Assert.assertEquals(0.0, tiny.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(Precision.SAFE_MIN / 2, tiny.asList().get(0).getSup(), 1.0e-10);
}
@Test
public void testSpecialConstruction() {
List<SubHyperplane boundary = new ArrayList>();
boundary.add(new LimitAngle(new S1Point(0.0), false, 1.0e-10).wholeHyperplane());
boundary.add(new LimitAngle(new S1Point(MathUtils.TWO_PI - 1.0e-11), true, 1.0e-10).wholeHyperplane());
ArcsSet set = new ArcsSet(boundary, 1.0e-10);
Assert.assertEquals(MathUtils.TWO_PI, set.getSize(), 1.0e-10);
Assert.assertEquals(1.0e-10, set.getTolerance(), 1.0e-20);
Assert.assertEquals(1, set.asList().size());
Assert.assertEquals(0.0, set.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(MathUtils.TWO_PI, set.asList().get(0).getSup(), 1.0e-10);
}
@Test
public void testDifference() {
ArcsSet a = new ArcsSet(1.0, 6.0, 1.0e-10);
List<Arc> aList = a.asList();
Assert.assertEquals(1, aList.size());
Assert.assertEquals(1.0, aList.get(0).getInf(), 1.0e-10);
Assert.assertEquals(6.0, aList.get(0).getSup(), 1.0e-10);
ArcsSet b = new ArcsSet(3.0, 5.0, 1.0e-10);
List<Arc> bList = b.asList();
Assert.assertEquals(1, bList.size());
Assert.assertEquals(3.0, bList.get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, bList.get(0).getSup(), 1.0e-10);
ArcsSet aMb = (ArcsSet) new RegionFactory<Sphere1D>().difference(a, b);
for (int k = -2; k < 3; ++k) {
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(0.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(0.9 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(1.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(1.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(2.9 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(3.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(3.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(4.9 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(5.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(5.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(5.9 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(6.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(6.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(6.2 + k * MathUtils.TWO_PI)));
}
List<Arc> aMbList = aMb.asList();
Assert.assertEquals(2, aMbList.size());
Assert.assertEquals(1.0, aMbList.get(0).getInf(), 1.0e-10);
Assert.assertEquals(3.0, aMbList.get(0).getSup(), 1.0e-10);
Assert.assertEquals(5.0, aMbList.get(1).getInf(), 1.0e-10);
Assert.assertEquals(6.0, aMbList.get(1).getSup(), 1.0e-10);
}
@Test
public void testIntersection() {
ArcsSet a = (ArcsSet) new RegionFactory<Sphere1D>().union(new ArcsSet(1.0, 3.0, 1.0e-10),
new ArcsSet(5.0, 6.0, 1.0e-10));
List<Arc> aList = a.asList();
Assert.assertEquals(2, aList.size());
Assert.assertEquals(1.0, aList.get(0).getInf(), 1.0e-10);
Assert.assertEquals(3.0, aList.get(0).getSup(), 1.0e-10);
Assert.assertEquals(5.0, aList.get(1).getInf(), 1.0e-10);
Assert.assertEquals(6.0, aList.get(1).getSup(), 1.0e-10);
ArcsSet b = new ArcsSet(0.0, 5.5, 1.0e-10);
List<Arc> bList = b.asList();
Assert.assertEquals(1, bList.size());
Assert.assertEquals(0.0, bList.get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.5, bList.get(0).getSup(), 1.0e-10);
ArcsSet aMb = (ArcsSet) new RegionFactory<Sphere1D>().intersection(a, b);
for (int k = -2; k < 3; ++k) {
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(0.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(1.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(1.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(2.9 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(3.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(3.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(4.9 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(5.0 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(5.1 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.INSIDE, aMb.checkPoint(new S1Point(5.4 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.BOUNDARY, aMb.checkPoint(new S1Point(5.5 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(5.6 + k * MathUtils.TWO_PI)));
Assert.assertEquals(Location.OUTSIDE, aMb.checkPoint(new S1Point(6.2 + k * MathUtils.TWO_PI)));
}
List<Arc> aMbList = aMb.asList();
Assert.assertEquals(2, aMbList.size());
Assert.assertEquals(1.0, aMbList.get(0).getInf(), 1.0e-10);
Assert.assertEquals(3.0, aMbList.get(0).getSup(), 1.0e-10);
Assert.assertEquals(5.0, aMbList.get(1).getInf(), 1.0e-10);
Assert.assertEquals(5.5, aMbList.get(1).getSup(), 1.0e-10);
}
@Test
public void testMultiple() {
RegionFactory<Sphere1D> factory = new RegionFactory();
ArcsSet set = (ArcsSet)
factory.intersection(factory.union(factory.difference(new ArcsSet(1.0, 6.0, 1.0e-10),
new ArcsSet(3.0, 5.0, 1.0e-10)),
new ArcsSet(0.5, 2.0, 1.0e-10)),
new ArcsSet(0.0, 5.5, 1.0e-10));
Assert.assertEquals(3.0, set.getSize(), 1.0e-10);
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(0.0)));
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(4.0)));
Assert.assertEquals(Region.Location.OUTSIDE, set.checkPoint(new S1Point(6.0)));
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(1.2)));
Assert.assertEquals(Region.Location.INSIDE, set.checkPoint(new S1Point(5.25)));
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(0.5)));
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(3.0)));
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(5.0)));
Assert.assertEquals(Region.Location.BOUNDARY, set.checkPoint(new S1Point(5.5)));
List<Arc> list = set.asList();
Assert.assertEquals(2, list.size());
Assert.assertEquals( 0.5, list.get(0).getInf(), 1.0e-10);
Assert.assertEquals( 3.0, list.get(0).getSup(), 1.0e-10);
Assert.assertEquals( 5.0, list.get(1).getInf(), 1.0e-10);
Assert.assertEquals( 5.5, list.get(1).getSup(), 1.0e-10);
}
@Test
public void testSinglePoint() {
ArcsSet set = new ArcsSet(1.0, FastMath.nextAfter(1.0, Double.POSITIVE_INFINITY), 1.0e-10);
Assert.assertEquals(2 * Precision.EPSILON, set.getSize(), Precision.SAFE_MIN);
}
@Test
public void testIteration() {
ArcsSet set = (ArcsSet) new RegionFactory<Sphere1D>().difference(new ArcsSet(1.0, 6.0, 1.0e-10),
new ArcsSet(3.0, 5.0, 1.0e-10));
Iterator<double[]> iterator = set.iterator();
try {
iterator.remove();
Assert.fail("an exception should have been thrown");
} catch (UnsupportedOperationException uoe) {
// expected
}
Assert.assertTrue(iterator.hasNext());
double[] a0 = iterator.next();
Assert.assertEquals(2, a0.length);
Assert.assertEquals(1.0, a0[0], 1.0e-10);
Assert.assertEquals(3.0, a0[1], 1.0e-10);
Assert.assertTrue(iterator.hasNext());
double[] a1 = iterator.next();
Assert.assertEquals(2, a1.length);
Assert.assertEquals(5.0, a1[0], 1.0e-10);
Assert.assertEquals(6.0, a1[1], 1.0e-10);
Assert.assertFalse(iterator.hasNext());
try {
iterator.next();
Assert.fail("an exception should have been thrown");
} catch (NoSuchElementException nsee) {
// expected
}
}
@Test
public void testEmptyTree() {
Assert.assertEquals(MathUtils.TWO_PI, new ArcsSet(new BSPTree<Sphere1D>(Boolean.TRUE), 1.0e-10).getSize(), 1.0e-10);
}
@Test
public void testShiftedAngles() {
for (int k = -2; k < 3; ++k) {
SubLimitAngle l1 = new LimitAngle(new S1Point(1.0 + k * MathUtils.TWO_PI), false, 1.0e-10).wholeHyperplane();
SubLimitAngle l2 = new LimitAngle(new S1Point(1.5 + k * MathUtils.TWO_PI), true, 1.0e-10).wholeHyperplane();
ArcsSet set = new ArcsSet(new BSPTree<Sphere1D>(l1,
new BSPTree<Sphere1D>(Boolean.FALSE),
new BSPTree<Sphere1D>(l2,
new BSPTree<Sphere1D>(Boolean.FALSE),
new BSPTree<Sphere1D>(Boolean.TRUE),
null),
null),
1.0e-10);
for (double alpha = 1.0e-6; alpha < MathUtils.TWO_PI; alpha += 0.001) {
if (alpha < 1 || alpha > 1.5) {
Assert.assertEquals(Location.OUTSIDE, set.checkPoint(new S1Point(alpha)));
} else {
Assert.assertEquals(Location.INSIDE, set.checkPoint(new S1Point(alpha)));
}
}
}
}
@Test(expected=ArcsSet.InconsistentStateAt2PiWrapping.class)
public void testInconsistentState() {
SubLimitAngle l1 = new LimitAngle(new S1Point(1.0), false, 1.0e-10).wholeHyperplane();
SubLimitAngle l2 = new LimitAngle(new S1Point(2.0), true, 1.0e-10).wholeHyperplane();
SubLimitAngle l3 = new LimitAngle(new S1Point(3.0), false, 1.0e-10).wholeHyperplane();
new ArcsSet(new BSPTree<Sphere1D>(l1,
new BSPTree<Sphere1D>(Boolean.FALSE),
new BSPTree<Sphere1D>(l2,
new BSPTree<Sphere1D>(l3,
new BSPTree<Sphere1D>(Boolean.FALSE),
new BSPTree<Sphere1D>(Boolean.TRUE),
null),
new BSPTree<Sphere1D>(Boolean.TRUE),
null),
null),
1.0e-10);
}
@Test
public void testSide() {
ArcsSet set = (ArcsSet) new RegionFactory<Sphere1D>().difference(new ArcsSet(1.0, 6.0, 1.0e-10),
new ArcsSet(3.0, 5.0, 1.0e-10));
for (int k = -2; k < 3; ++k) {
Assert.assertEquals(Side.MINUS, set.split(new Arc(0.5 + k * MathUtils.TWO_PI,
6.1 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
Assert.assertEquals(Side.PLUS, set.split(new Arc(0.5 + k * MathUtils.TWO_PI,
0.8 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
Assert.assertEquals(Side.PLUS, set.split(new Arc(6.2 + k * MathUtils.TWO_PI,
6.3 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
Assert.assertEquals(Side.PLUS, set.split(new Arc(3.5 + k * MathUtils.TWO_PI,
4.5 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
Assert.assertEquals(Side.BOTH, set.split(new Arc(2.9 + k * MathUtils.TWO_PI,
4.5 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
Assert.assertEquals(Side.BOTH, set.split(new Arc(0.5 + k * MathUtils.TWO_PI,
1.2 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
Assert.assertEquals(Side.BOTH, set.split(new Arc(0.5 + k * MathUtils.TWO_PI,
5.9 + k * MathUtils.TWO_PI,
set.getTolerance())).getSide());
}
}
@Test
public void testSideEmbedded() {
ArcsSet s35 = new ArcsSet(3.0, 5.0, 1.0e-10);
ArcsSet s16 = new ArcsSet(1.0, 6.0, 1.0e-10);
Assert.assertEquals(Side.BOTH, s16.split(new Arc(3.0, 5.0, 1.0e-10)).getSide());
Assert.assertEquals(Side.BOTH, s16.split(new Arc(5.0, 3.0 + MathUtils.TWO_PI, 1.0e-10)).getSide());
Assert.assertEquals(Side.MINUS, s35.split(new Arc(1.0, 6.0, 1.0e-10)).getSide());
Assert.assertEquals(Side.PLUS, s35.split(new Arc(6.0, 1.0 + MathUtils.TWO_PI, 1.0e-10)).getSide());
}
@Test
public void testSideOverlapping() {
ArcsSet s35 = new ArcsSet(3.0, 5.0, 1.0e-10);
ArcsSet s46 = new ArcsSet(4.0, 6.0, 1.0e-10);
Assert.assertEquals(Side.BOTH, s46.split(new Arc(3.0, 5.0, 1.0e-10)).getSide());
Assert.assertEquals(Side.BOTH, s46.split(new Arc(5.0, 3.0 + MathUtils.TWO_PI, 1.0e-10)).getSide());
Assert.assertEquals(Side.BOTH, s35.split(new Arc(4.0, 6.0, 1.0e-10)).getSide());
Assert.assertEquals(Side.BOTH, s35.split(new Arc(6.0, 4.0 + MathUtils.TWO_PI, 1.0e-10)).getSide());
}
@Test
public void testSideHyper() {
ArcsSet sub = (ArcsSet) new RegionFactory<Sphere1D>().getComplement(new ArcsSet(1.0e-10));
Assert.assertTrue(sub.isEmpty());
Assert.assertEquals(Side.HYPER, sub.split(new Arc(2.0, 3.0, 1.0e-10)).getSide());
}
@Test
public void testSplitEmbedded() {
ArcsSet s35 = new ArcsSet(3.0, 5.0, 1.0e-10);
ArcsSet s16 = new ArcsSet(1.0, 6.0, 1.0e-10);
ArcsSet.Split split1 = s16.split(new Arc(3.0, 5.0, 1.0e-10));
ArcsSet split1Plus = split1.getPlus();
ArcsSet split1Minus = split1.getMinus();
Assert.assertEquals(3.0, split1Plus.getSize(), 1.0e-10);
Assert.assertEquals(2, split1Plus.asList().size());
Assert.assertEquals(1.0, split1Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(3.0, split1Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(5.0, split1Plus.asList().get(1).getInf(), 1.0e-10);
Assert.assertEquals(6.0, split1Plus.asList().get(1).getSup(), 1.0e-10);
Assert.assertEquals(2.0, split1Minus.getSize(), 1.0e-10);
Assert.assertEquals(1, split1Minus.asList().size());
Assert.assertEquals(3.0, split1Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split1Minus.asList().get(0).getSup(), 1.0e-10);
ArcsSet.Split split2 = s16.split(new Arc(5.0, 3.0 + MathUtils.TWO_PI, 1.0e-10));
ArcsSet split2Plus = split2.getPlus();
ArcsSet split2Minus = split2.getMinus();
Assert.assertEquals(2.0, split2Plus.getSize(), 1.0e-10);
Assert.assertEquals(1, split2Plus.asList().size());
Assert.assertEquals(3.0, split2Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split2Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(3.0, split2Minus.getSize(), 1.0e-10);
Assert.assertEquals(2, split2Minus.asList().size());
Assert.assertEquals(1.0, split2Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(3.0, split2Minus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(5.0, split2Minus.asList().get(1).getInf(), 1.0e-10);
Assert.assertEquals(6.0, split2Minus.asList().get(1).getSup(), 1.0e-10);
ArcsSet.Split split3 = s35.split(new Arc(1.0, 6.0, 1.0e-10));
ArcsSet split3Plus = split3.getPlus();
ArcsSet split3Minus = split3.getMinus();
Assert.assertNull(split3Plus);
Assert.assertEquals(2.0, split3Minus.getSize(), 1.0e-10);
Assert.assertEquals(1, split3Minus.asList().size());
Assert.assertEquals(3.0, split3Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split3Minus.asList().get(0).getSup(), 1.0e-10);
ArcsSet.Split split4 = s35.split(new Arc(6.0, 1.0 + MathUtils.TWO_PI, 1.0e-10));
ArcsSet split4Plus = split4.getPlus();
ArcsSet split4Minus = split4.getMinus();
Assert.assertEquals(2.0, split4Plus.getSize(), 1.0e-10);
Assert.assertEquals(1, split4Plus.asList().size());
Assert.assertEquals(3.0, split4Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split4Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertNull(split4Minus);
}
@Test
public void testSplitOverlapping() {
ArcsSet s35 = new ArcsSet(3.0, 5.0, 1.0e-10);
ArcsSet s46 = new ArcsSet(4.0, 6.0, 1.0e-10);
ArcsSet.Split split1 = s46.split(new Arc(3.0, 5.0, 1.0e-10));
ArcsSet split1Plus = split1.getPlus();
ArcsSet split1Minus = split1.getMinus();
Assert.assertEquals(1.0, split1Plus.getSize(), 1.0e-10);
Assert.assertEquals(1, split1Plus.asList().size());
Assert.assertEquals(5.0, split1Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(6.0, split1Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(1.0, split1Minus.getSize(), 1.0e-10);
Assert.assertEquals(1, split1Minus.asList().size());
Assert.assertEquals(4.0, split1Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split1Minus.asList().get(0).getSup(), 1.0e-10);
ArcsSet.Split split2 = s46.split(new Arc(5.0, 3.0 + MathUtils.TWO_PI, 1.0e-10));
ArcsSet split2Plus = split2.getPlus();
ArcsSet split2Minus = split2.getMinus();
Assert.assertEquals(1.0, split2Plus.getSize(), 1.0e-10);
Assert.assertEquals(1, split2Plus.asList().size());
Assert.assertEquals(4.0, split2Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split2Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(1.0, split2Minus.getSize(), 1.0e-10);
Assert.assertEquals(1, split2Minus.asList().size());
Assert.assertEquals(5.0, split2Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(6.0, split2Minus.asList().get(0).getSup(), 1.0e-10);
ArcsSet.Split split3 = s35.split(new Arc(4.0, 6.0, 1.0e-10));
ArcsSet split3Plus = split3.getPlus();
ArcsSet split3Minus = split3.getMinus();
Assert.assertEquals(1.0, split3Plus.getSize(), 1.0e-10);
Assert.assertEquals(1, split3Plus.asList().size());
Assert.assertEquals(3.0, split3Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(4.0, split3Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(1.0, split3Minus.getSize(), 1.0e-10);
Assert.assertEquals(1, split3Minus.asList().size());
Assert.assertEquals(4.0, split3Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split3Minus.asList().get(0).getSup(), 1.0e-10);
ArcsSet.Split split4 = s35.split(new Arc(6.0, 4.0 + MathUtils.TWO_PI, 1.0e-10));
ArcsSet split4Plus = split4.getPlus();
ArcsSet split4Minus = split4.getMinus();
Assert.assertEquals(1.0, split4Plus.getSize(), 1.0e-10);
Assert.assertEquals(1, split4Plus.asList().size());
Assert.assertEquals(4.0, split4Plus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(5.0, split4Plus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(1.0, split4Minus.getSize(), 1.0e-10);
Assert.assertEquals(1, split4Minus.asList().size());
Assert.assertEquals(3.0, split4Minus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(4.0, split4Minus.asList().get(0).getSup(), 1.0e-10);
}
@Test
public void testFarSplit() {
ArcsSet set = new ArcsSet(FastMath.PI, 2.5 * FastMath.PI, 1.0e-10);
ArcsSet.Split split = set.split(new Arc(0.5 * FastMath.PI, 1.5 * FastMath.PI, 1.0e-10));
ArcsSet splitPlus = split.getPlus();
ArcsSet splitMinus = split.getMinus();
Assert.assertEquals(1, splitMinus.asList().size());
Assert.assertEquals(1.0 * FastMath.PI, splitMinus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(1.5 * FastMath.PI, splitMinus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(0.5 * FastMath.PI, splitMinus.getSize(), 1.0e-10);
Assert.assertEquals(1, splitPlus.asList().size());
Assert.assertEquals(1.5 * FastMath.PI, splitPlus.asList().get(0).getInf(), 1.0e-10);
Assert.assertEquals(2.5 * FastMath.PI, splitPlus.asList().get(0).getSup(), 1.0e-10);
Assert.assertEquals(1.0 * FastMath.PI, splitPlus.getSize(), 1.0e-10);
}
@Test
public void testSplitWithinEpsilon() {
double epsilon = 1.0e-10;
double a = 6.25;
double b = a - 0.5 * epsilon;
ArcsSet set = new ArcsSet(a - 1, a, epsilon);
Arc arc = new Arc(b, b + FastMath.PI, epsilon);
ArcsSet.Split split = set.split(arc);
Assert.assertEquals(set.getSize(), split.getPlus().getSize(), epsilon);
Assert.assertNull(split.getMinus());
}
@Test
public void testSideSplitConsistency() {
double epsilon = 1.0e-6;
double a = 4.725;
ArcsSet set = new ArcsSet(a, a + 0.5, epsilon);
Arc arc = new Arc(a + 0.5 * epsilon, a + 1, epsilon);
ArcsSet.Split split = set.split(arc);
Assert.assertNotNull(split.getMinus());
Assert.assertNull(split.getPlus());
Assert.assertEquals(Side.MINUS, set.split(arc).getSide());
}
}
Other Java examples (source code examples)
Here is a short list of links related to this Java ArcsSetTest.java source code file:
|