Finds cells adjacent to other cells in a multi-dimensional array (R.W. Payne).
||Pointer containing a variate for each cell, giving the indexes of its adjacent cells|
||Whether to include diagonal cells (
||Maximum distance between cells and adjacent cells; default
||Dimensions of the array|
||Locations of the cells in each dimension|
||The pointer for each
ADJACENTCELLS finds the cells that are adjacent to cells in a multi-dimensional array. The
DISTANCE option specifies how close the cells need to be for them to be classed as adjacent. The default of one indicates that they must be alongside each other. A setting of two means that there can be an intervening cell, and so on. The default is to include cells that are diagonal to each other, but you can set option
DIAGONALS=exclude to exclude these.
DIMENSION parameter supplies a list of scalars defining the dimensions of the array (i.e. the number of cells in each direction). The
CELLS parameter supplies a list of variates giving the locations of the cells in each dimension.
The adjacent cells can be saved in two different ways. The
ADJACENTCELLS parameter can supply a list of pointers, one for each dimension. These contain a variate for each cell, containing the locations of its adjacent cells in that dimension. Alternatively, the
ADJACENTINDEXES option can save pointer containing a variate for each cell. This saves the indexes of the adjacent cells for that cell. (These indexes are defined as the locations of the cells within a multi-way table classified by factors representing the dimensions.)
CAPTION 'ADJACENTCELLS example'; STYLE=meta VARIATE [VALUES=1,1,2,2] x & [VALUES=2,3,3,4] y & [VALUES=5,3,4,3] z ADJACENTCELLS [ADJACENTINDEXES=index] 2,4,5; CELLS=x,y,z; ADJACENTCELLS=ax,ay,az FACTOR [NVALUES=40; LEVELS=2] fx & [LEVELS=4] fy & [LEVELS=5] fz GENERATE fx,fy,fz " details of the cells adjacent to each original cell " FOR [INDEX=i; NTIMES=4] SCALAR xcell,ycell,zcell; VALUE=x$[i],y$[i],z$[i] " print the coordinates of the cells " CAPTION 'Cell' PRINT xcell,ycell,zcell; FIELD=8; DECIMALS=0 " print the coordinates of its adjacent cells " CAPTION 'Adjacent cells' PRINT ax[i],ay[i],az[i]; FIELD=8; DECIMALS=0 " show the locations of the adjacent cells, using a 3-way table " VARIATE [NVALUES=40] tvals CALCULATE icell = (xcell-1)*4*5 + (ycell-1)*5 + zcell & tvals$[icell] = 1 & tvals$[index[i]] = 2 TABLE [CLASS=fx,fy,fz] tab; VALUES=tvals CAPTION 'Cell locations' PRINT [RLWIDTH=6; VSPECIAL=!(1,2); TSPECIAL=!t('cell','adj')]\ tab; FIELD=6 ENDFOR