Ejemplo n.º 1
0
  /**
   * {@inheritDoc}
   *
   * @return
   */
  @Override
  public K compute(final K in, final K r) {
    final Cursor<BitType> cur = in.localizingCursor();
    ArrayList<Point> points = new ArrayList<Point>();
    while (cur.hasNext()) {
      cur.fwd();
      if (cur.get().get()) {
        points.add(new Point(cur.getIntPosition(m_dimX), cur.getIntPosition(m_dimY)));
      }
    }
    points = quickHull(points);
    final Polygon poly = new Polygon();
    for (final Point p : points) {
      poly.addPoint(p.x, p.y);
    }

    Cursor<BitType> resCur = r.localizingCursor();

    if (m_fill) {
      while (resCur.hasNext()) {
        resCur.fwd();
        if (poly.contains(resCur.getIntPosition(m_dimX), resCur.getIntPosition(m_dimY))) {
          resCur.get().set(true);
        }
      }
    } else {

      // m_imgManFalse.compute(in, r);

      final RandomAccess<BitType> ra = r.randomAccess();

      for (int i = 0; i < poly.npoints - 1; i++) {
        drawLine(ra, poly, i, i + 1, m_dimX, m_dimY);
      }
      if (poly.npoints > 0) {
        drawLine(ra, poly, poly.npoints - 1, 0, m_dimX, m_dimY);
      }
    }
    return r;
  }