Package org.osm2world.core.math.algorithms

Source Code of org.osm2world.core.math.algorithms.CAGUtilTest

package org.osm2world.core.math.algorithms;

import static java.util.Arrays.asList;
import static org.junit.Assert.assertSame;
import static org.osm2world.core.test.TestUtil.assertSameCyclicOrder;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.junit.Test;
import org.osm2world.core.math.PolygonWithHolesXZ;
import org.osm2world.core.math.SimplePolygonXZ;
import org.osm2world.core.math.VectorXZ;
import org.osm2world.core.math.algorithms.CAGUtil;

public class CAGUtilTest {
 
  @Test
  public void testOverlap() {
   
    List<VectorXZ> outline = asList(
        new VectorXZ( 1,-2),
        new VectorXZ( 1, 2),
        new VectorXZ(-1, 2),
        new VectorXZ(-1,-2),
        new VectorXZ( 1,-2)
    );
   
    List<VectorXZ> subOutline = asList(
        new VectorXZ( 2,-1),
        new VectorXZ( 0,-1),
        new VectorXZ( 0, 1),
        new VectorXZ( 2, 1),
        new VectorXZ( 2,-1)
    );
   
    List<PolygonWithHolesXZ> results = new ArrayList<PolygonWithHolesXZ>(
        CAGUtil.subtractPolygons(
            new SimplePolygonXZ(outline),
            Arrays.asList(new SimplePolygonXZ(subOutline))));
   
    assertSame(1, results.size());
   
    assertSameCyclicOrder(results.get(0).getOuter().getVertices(),
        new VectorXZ( 1,-2),
        new VectorXZ( 1,-1),
        new VectorXZ( 0,-1),
        new VectorXZ( 0, 1),
        new VectorXZ( 1, 1),
        new VectorXZ( 1, 2),
        new VectorXZ(-1, 2),
        new VectorXZ(-1,-2));
   
  }
 
  @Test
  public void testOverlapCommonNode() {
   
    List<VectorXZ> outline = asList(
        new VectorXZ( 1,-2),
        new VectorXZ( 1, 2),
        new VectorXZ(-1, 2),
        new VectorXZ(-1,-2),
        new VectorXZ( 1,-2)
    );
   
    List<VectorXZ> subOutline1 = asList(
        new VectorXZ( 2,-1),
        new VectorXZ( 0,-1),
        new VectorXZ( 0, 0),
        new VectorXZ( 2, 0),
        new VectorXZ( 2,-1)
    );
   
    List<VectorXZ> subOutline2 = asList(
        new VectorXZ( 2, 0),
        new VectorXZ( 0, 0),
        new VectorXZ( 0, 1),
        new VectorXZ( 2, 1),
        new VectorXZ( 2, 0)
    );
   
    List<PolygonWithHolesXZ> results = new ArrayList<PolygonWithHolesXZ>(
        CAGUtil.subtractPolygons(
            new SimplePolygonXZ(outline),
            Arrays.asList(
                new SimplePolygonXZ(subOutline1),
                new SimplePolygonXZ(subOutline2))));
   
    assertSame(1, results.size());
   
    List<VectorXZ> res = results.get(0).getOuter().getVertices();
   
    assertSameCyclicOrder(res,
        new VectorXZ( 1,-2),
        new VectorXZ( 1,-1),
        new VectorXZ( 0,-1),
        new VectorXZ( 0, 0),
        new VectorXZ( 0, 1),
        new VectorXZ( 1, 1),
        new VectorXZ( 1, 2),
        new VectorXZ(-1, 2),
        new VectorXZ(-1,-2));
   
  }
 
  @Test
  public void testOverlapConvex() {
   
    List<VectorXZ> outline = asList(
        new VectorXZ( 1,-2),
        new VectorXZ( 1, 2),
        new VectorXZ(-1,-1),
        new VectorXZ(-1,-2),
        new VectorXZ( 1,-2)
    );
   
    List<VectorXZ> subOutline = asList(
        new VectorXZ( 0,-3),
        new VectorXZ(-2,-3),
        new VectorXZ(-2, 0),
        new VectorXZ( 0, 0),
        new VectorXZ( 0,-3)
    );
   
    List<PolygonWithHolesXZ> results = new ArrayList<PolygonWithHolesXZ>(
        CAGUtil.subtractPolygons(
            new SimplePolygonXZ(outline),
            Arrays.asList(new SimplePolygonXZ(subOutline))));
   
    assertSame(1, results.size());
   
    List<VectorXZ> res = results.get(0).getOuter().getVertices();
   
    assertSameCyclicOrder(res,
        new VectorXZ( 1,-2),
        new VectorXZ( 1, 2),
        new VectorXZ(-1/3.0, 0),
        new VectorXZ( 0, 0),
        new VectorXZ( 0,-2));
   
  }
 
}
TOP

Related Classes of org.osm2world.core.math.algorithms.CAGUtilTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.