public static Circle reconstructCircle( final String[] elements ) {
        if( elements == null ) {
            throw new IllegalArgumentException( "The parameter 'elements' must not be 'null'." );
        }
        final Map< String, Object > attributesP = new HashMap< String, Object >();
        final Map< String, Object > attributesR = new HashMap< String, Object >();
        IColumnVector< Float > p = null;
        float radius =  0f;
        final List< Float > digitBuffer = new ArrayList< Float >();
        int i = 1;
        do {
            if( elements[i].equals( "p" ) ) {
                ++i;
                digitBuffer.clear();
                while( (Character.isDigit( elements[i].charAt( 0 ) ) || (elements[i].charAt( 0 ) == '-') ) ) {
                    digitBuffer.add( Float.parseFloat( elements[i++] ) );
                }
                p = new ColumnVector( digitBuffer );
                if( elements[i].equals( "color" ) ) {
                    ++i;
                    final int r = Integer.parseInt( elements[i++] );
                    final int g = Integer.parseInt( elements[i++] );
                    final int b = Integer.parseInt( elements[i++] );
                    attributesP.put( "color", new Color( r, g, b ) );
                }
            } else if( elements[i].equals( "r" ) ) {
                ++i;
                radius = Float.parseFloat( elements[ i++ ] );
                if( i < elements.length && elements[i].equals( "color" ) ) {
                    ++i;
                    final int r = Integer.parseInt( elements[i++] );
                    final int g = Integer.parseInt( elements[i++] );
                    final int b = Integer.parseInt( elements[i++] );
                    attributesR.put( "color", new Color( r, g, b ) );
                }
            }
        } while( i < elements.length );
        return new Circle( p, attributesP, radius, attributesR );
    }