# makeBowl

Create a binary map of a bowl within a 3D grid.

## Syntax

    bowl = makeBowl(grid_size, bowl_pos, radius, diameter, focus_pos)
    bowl = makeBowl(grid_size, bowl_pos, radius, diameter, focus_pos, ...)

## Description

`makeBowl` creates a binary map of a bowl from a symmetric spherical shell within a three-dimensional grid. The bowl position is denoted by 1's in the matrix with 0's elsewhere. The bowl surface within the Cartesian grid is found using a bi-directional line search along each row and column to find the grid point with radius closest to the desired radius.

The position of the bowl is set by `bowl_pos`, which corresponds to the center of the rear bowl surface. The orientation of the bowl is set by `focus_pos`, which corresponds to any point on the axis of the bowl (note, this must not be equal to `bowl_pos`). It is assumed that the solid angle of the bowl is equal to or less than 2*pi steradians. If the `radius` is set to `inf`, a disc is generated.

In some cases, the generated bowl will not be simply connected, and there will be a small number of overlapping grid points. To remove these points, set the optional input 'RemoveOverlap' to true.

## Examples

    % define parameters
    grid_size = [32, 64, 64];
    bowl_pos  = [1, 32, 32];
    radius    = 60;
    diameter  = 61;
    focus_pos = [32, 32, 32];

    % create bowl
    makeBowl(grid_size, bowl_pos, radius, diameter, focus_pos, 'Plot', true);

    % define parameters
    grid_size = [128, 128, 128];
    bowl_pos  = [80, 80, 80];
    radius    = 60;
    diameter  = 81;
    focus_pos = [1, 1, 1];

    % create bowl
    makeBowl(grid_size, bowl_pos, radius, diameter, focus_pos, 'Plot', true);

## Inputs

`grid_size` | size of the 3D grid given as a three element vector [Nx, Ny, Nz] [grid points]
`bowl_pos` | centre of the rear surface of the bowl given as a three element vector [bx, by, bz] [grid points]
`radius` | radius of curvature of the bowl [grid points]
`diameter` | aperture diameter of the bowl [grid points]
`focus_pos` | any point on the beam axis of the bowl given as a three element vector [fx, fy, fz] [grid points]

## Optional Inputs

Optional 'string', value pairs that may be used to modify the default computational settings.

Input | Valid Settings | Default | Description
--- | --- | --- | ---
`'Binary'` | (Boolean scalar) | `false` | Boolean controlling whether the bowl map is returned as a double precision matrix (false) or a logical matrix (true).
`'Plot'` | (Boolean scalar) | `false` | Boolean controlling whether the bowl is plotted using `voxelPlot`.
`'RemoveOverlap'` | (Boolean scalar) | `false` | Boolean controlling whether overlapped grid points are removed.

## Outputs

`bowl` | 3D binary map of a bowl

## See Also

`makeArc`, `makeBall`, `makeMultiBowl`, `makeSphere`, `makeSphericalSection`