# sierpinski_foam#

The sierpinski gasket is a classic example of a fractal image with self-similar properties across all length scales. It has also been extensively analyzed so these properties are well know. The sierpinski_foam is a 3D version of the gasket.

import porespy as ps
import matplotlib.pyplot as plt
import numpy as np
import inspect
inspect.signature(ps.generators.sierpinski_foam)

<Signature (dmin, n, ndim=2, max_size=1000000000.0)>


## dmin and n#

This generator does not accept size. Instead you specify the smallest hole to add with dmin and the number of scales to create with n:

fig, ax = plt.subplots(1, 2, figsize=[12, 6])

dmin = 5
n = 3
im = ps.generators.sierpinski_foam(dmin=dmin, n=n)
ax[0].imshow(im, interpolation='none')
ax[0].axis(False)

dmin = 3
n = 5
im = ps.generators.sierpinski_foam(dmin=dmin, n=n)
ax[1].imshow(im, interpolation='none')
ax[1].axis(False);


## ndim#

The dimensionality of the image, either 2 or 3. A value of 2 (as above) technically makes a gasket while 3 makes a foam:

ndim = 3
dmin = 5
n = 3
im = ps.generators.sierpinski_foam(dmin=dmin, n=n, ndim=3)

ax.voxels(1-im[30:60, 30:60, 30:60]);


## max_size#

This puts a cap on the maximum number of voxel in the generated image so that it doesnâ€™t get too large. The function will stop iterating if the image size exceeds this value.

fig, ax = plt.subplots(1, 2, figsize=[12, 6])

max_size=1e4
im = ps.generators.sierpinski_foam(dmin=dmin, n=100, max_size=max_size)
ax[0].imshow(im, interpolation='none')
ax[0].axis(False)
ax[0].set_title(f'actual size = {im.size}')

max_size=1e6
im = ps.generators.sierpinski_foam(dmin=dmin, n=100, max_size=max_size)
ax[1].imshow(im, interpolation='none')
ax[1].axis(False)
ax[1].set_title(f'actual size = {im.size}');