/* (non-Javadoc)
   * @see math.geom2d.GeometricObject2D#almostEquals(math.geom2d.GeometricObject2D, double)
   */
  public boolean almostEquals(GeometricObject2D obj, double eps) {
    if (this == obj) return true;

    if (!(obj instanceof PointSet2D)) return false;

    PointSet2D set = (PointSet2D) obj;
    if (this.points.size() != set.size()) return false;

    Iterator<Point2D> iter = set.iterator();
    for (Point2D point : points) {
      if (!point.almostEquals(iter.next(), eps)) return false;
    }

    return true;
  }
  /**
   * Returns true if the given object is an instance of PointSet2D that contains the same number of
   * points, such that iteration on each set returns equal points.
   */
  @Override
  public boolean equals(Object obj) {
    if (this == obj) return true;

    if (!(obj instanceof PointSet2D)) return false;

    PointSet2D set = (PointSet2D) obj;
    if (this.points.size() != set.size()) return false;

    Iterator<Point2D> iter = set.iterator();
    for (Point2D point : points) {
      if (!point.equals(iter.next())) return false;
    }

    return true;
  }
 /** Copy constructor */
 public PointArray2D(PointSet2D set) {
   this(set.size());
   for (Point2D element : set) this.points.add(element);
 }