Examples of VectorXZ


Examples of org.osm2world.core.math.VectorXZ

    filteredPoints.removeAll(knownVectors);
   
    // remove points that are *almost* the same as a known vector
    Iterator<VectorXZ> filteredPointsIterator = filteredPoints.iterator();
    while (filteredPointsIterator.hasNext()) {
      VectorXZ filteredPoint = filteredPointsIterator.next();
      for (VectorXZ knownVector : knownVectors) {
        if (knownVector.distanceTo(filteredPoint) < 0.2) {
          filteredPointsIterator.remove();
        }
      }
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

  private static final TPoint toTPoint(VectorXZ v) {
    return new TPoint(v.x, v.z);
  }

  private static final VectorXZ toVectorXZ(TriangulationPoint points) {
    return new VectorXZ(points.getX(), points.getY());
  }
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

      return laneLayout;
    }
   
    private void renderStepsTo(Target<?> target) {
     
      final VectorXZ startWithOffset = getStartPosition();
      final VectorXZ endWithOffset = getEndPosition();
   
      List<VectorXYZ> leftOutline = getOutline(false);
      List<VectorXYZ> rightOutline = getOutline(true);
     
     
      double lineLength = VectorXZ.distance (
          segment.getStartNode().getPos(), segment.getEndNode().getPos());
     
      /* render ground first (so gaps between the steps look better) */
     
      List<VectorXYZ> vs = createTriangleStripBetween(
          leftOutline, rightOutline);

      target.drawTriangleStrip(ASPHALT, vs,
          texCoordLists(vs, ASPHALT, GLOBAL_X_Z));
     
      /* determine the length of each individual step */
     
      float stepLength = 0.3f;
     
      if (tags.containsKey("step_count")) {
        try {
          int stepCount = Integer.parseInt(tags.getValue("step_count"));
          stepLength = (float)lineLength / stepCount;
        } catch (NumberFormatException e) { /* don't overwrite default length */ }
      }
     
      /* locate the position on the line at the beginning/end of each step
       * (positions on the line spaced by step length),
       * interpolate heights between adjacent points with elevation */
     
      List<VectorXYZ> centerline = getCenterline();
     
      List<VectorXZ> stepBorderPositionsXZ =
        GeometryUtil.equallyDistributePointsAlong(
          stepLength, true, startWithOffset, endWithOffset);
     
      List<VectorXYZ> stepBorderPositions = new ArrayList<VectorXYZ>();
      for (VectorXZ posXZ : stepBorderPositionsXZ) {
        VectorXYZ posXYZ = interpolateElevation(posXZ,
            centerline.get(0),
            centerline.get(centerline.size() - 1));
        stepBorderPositions.add(posXYZ);
      }
     
      /* draw steps */
     
      for (int step = 0; step < stepBorderPositions.size() - 1; step++) {
       
        VectorXYZ frontCenter = stepBorderPositions.get(step);
        VectorXYZ backCenter = stepBorderPositions.get(step+1);
       
        double height = abs(frontCenter.y - backCenter.y);
               
        VectorXYZ center = (frontCenter.add(backCenter)).mult(0.5);
        center = center.subtract(Y_UNIT.mult(0.5 * height));
       
        VectorXZ faceDirection = segment.getDirection();
        if (frontCenter.y < backCenter.y) {
          //invert if upwards
          faceDirection = faceDirection.invert();
        }
       
        target.drawBox(Materials.STEPS_DEFAULT,
            center, faceDirection,
            height, width, backCenter.distanceToXZ(frontCenter));
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

          t = higher ? 0 - padding : 1 + padding;
        } else {
          t = higher ? 0 : 1;
        }
       
        result.add(new VectorXZ(s, t));
       
      }
     
      return result;
     
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

    tempVertices.add(outline.get(0));
    SimplePolygonXZ tempPolygon = new SimplePolygonXZ(tempVertices);

    //TODO (performance) avoid creating polygon by passing clockwise information
   
    VectorXZ segBefore = outline.get(i).subtract(vertexBefore(outline, i));
    VectorXZ segAfter = vertexAfter(outline, i).subtract(outline.get(i));
   
    return tempPolygon.isClockwise() ^
      segBefore.z * segAfter.x - segBefore.x * segAfter.z < 0;
   
  }
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

   
    { /* calculate centerline */
           
      centerlineXZ = new ArrayList<VectorXZ>();
     
      final VectorXZ start = getStartWithOffset();
      final VectorXZ end = getEndWithOffset();
     
      centerlineXZ.add(start);
     
      connectors.add(new EleConnector(start,
          segment.getStartNode(), getGroundState(segment.getStartNode())));
     
      // add intersections along the centerline
     
      for (MapOverlap<?,?> overlap : segment.getOverlaps()) {
       
        if (overlap.getOther(segment).getPrimaryRepresentation() == null)
          continue;
       
        if (overlap instanceof MapIntersectionWW) {
         
          MapIntersectionWW intersection = (MapIntersectionWW) overlap;
         
          if (GeometryUtil.isBetween(intersection.pos, start, end)) {
           
            centerlineXZ.add(intersection.pos);
           
            connectors.add(new EleConnector(intersection.pos,
                null, getGroundState()));
           
          }
         
        } else if (overlap instanceof MapOverlapWA
            && overlap.type == MapOverlapType.INTERSECT) {
         
          if (!(overlap.getOther(segment).getPrimaryRepresentation()
              instanceof AbstractAreaWorldObject)) continue;
         
          MapOverlapWA overlapWA = (MapOverlapWA) overlap;
         
          for (int i = 0; i < overlapWA.getIntersectionPositions().size(); i++) {
         
            VectorXZ pos = overlapWA.getIntersectionPositions().get(i);
           
            if (GeometryUtil.isBetween(pos, start, end)) {
             
              centerlineXZ.add(pos);
             
              connectors.add(new EleConnector(pos,
                  null, getGroundState()));
             
            }
         
          }
         
        }
       
       
      }
     
      // finish the centerline
     
      centerlineXZ.add(end);

      connectors.add(new EleConnector(end,
          segment.getEndNode(), getGroundState(segment.getEndNode())));
     
      if (centerlineXZ.size() > 3) {
       
        // sort by distance from start
        Collections.sort(centerlineXZ, new Comparator<VectorXZ>() {
          @Override
          public int compare(VectorXZ v1, VectorXZ v2) {
            return Double.compare(
                distanceSquared(v1, start),
                distanceSquared(v2, start));
          }
        });
       
      }
     
    }
   
    { /* calculate left and right outlines */
     
      leftOutlineXZ = new ArrayList<VectorXZ>(centerlineXZ.size());
      rightOutlineXZ = new ArrayList<VectorXZ>(centerlineXZ.size());
     
      assert centerlineXZ.size() >= 2;
     
      double halfWidth = getWidth() * 0.5f;
     
      VectorXZ centerStart = centerlineXZ.get(0);
      leftOutlineXZ.add(centerStart.add(startCutVector.mult(-halfWidth)));
      rightOutlineXZ.add(centerStart.add(startCutVector.mult(halfWidth)));
     
      connectors.add(new EleConnector(leftOutlineXZ.get(0),
          segment.getStartNode(), getGroundState(segment.getStartNode())));
      connectors.add(new EleConnector(rightOutlineXZ.get(0),
          segment.getStartNode(), getGroundState(segment.getStartNode())));
     
      for (int i = 1; i < centerlineXZ.size() - 1; i++) {
       
        leftOutlineXZ.add(centerlineXZ.get(i).add(segment.getRightNormal().mult(-halfWidth)));
        rightOutlineXZ.add(centerlineXZ.get(i).add(segment.getRightNormal().mult(halfWidth)));
       
        connectors.add(new EleConnector(leftOutlineXZ.get(i),
            null, getGroundState()));
        connectors.add(new EleConnector(rightOutlineXZ.get(i),
            null, getGroundState()));
       
      }
     
      VectorXZ centerEnd = centerlineXZ.get(centerlineXZ.size() - 1);
      leftOutlineXZ.add(centerEnd.add(endCutVector.mult(-halfWidth)));
      rightOutlineXZ.add(centerEnd.add(endCutVector.mult(halfWidth)));
     
      connectors.add(new EleConnector(leftOutlineXZ.get(leftOutlineXZ.size() - 1),
          segment.getEndNode(), getGroundState(segment.getEndNode())));
      connectors.add(new EleConnector(rightOutlineXZ.get(rightOutlineXZ.size() - 1),
          segment.getEndNode(), getGroundState(segment.getEndNode())));
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

   */
  public VectorXYZ getPointOnCut(boolean start, double relativePosFromLeft) {
   
    assert 0 <= relativePosFromLeft && relativePosFromLeft <= 1;
   
    VectorXZ position = start ? getStartWithOffset() : getEndWithOffset();
    VectorXZ cutVector = start ? getStartCutVector() : getEndCutVector();
   
    return connectors.getPosXYZ(position.add(cutVector.mult(
        (-0.5 + relativePosFromLeft) * getWidth())));
   
  }
 
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

 
  @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));
   
  }
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

 
  @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));
   
  }
View Full Code Here

Examples of org.osm2world.core.math.VectorXZ

 
  @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));
   
  }
View Full Code Here
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.