public Iterator<Point2D> getPoints( final float start, final float end, final int nPoints ) {
		if( nPoints == 1 ) {
			return new Iterator<Point2D>() {
				private boolean hasNext = true;

				@Override
				public boolean hasNext() {
					return hasNext;
				}

				@Override
				public Point2D next() {
					hasNext = false;
					return getPointAt( start + (end - start) / 2.0f );
				}

				@Override
				public void remove() {
					throw new UnsupportedOperationException();
				}
			};
		} else {
			return new Iterator<Point2D>() {
				private int index;

				@Override
				public boolean hasNext() {
					return index < nPoints;
				}

				@Override
				public Point2D next() {
					float position = start + (end - start) * (index / (nPoints - 1.0f));
					index++;
					return getPointAt( position );
				}

				@Override
				public void remove() {
					throw new UnsupportedOperationException();
				}
			};
		}
	}