| RotationDetect {ICvectorfields} | R Documentation |
Detect Rotating Patterns in Vector Fields
Description
Detect patterns in vector fields represented on a grid by looking in the
rook's neighbourhood of each grid cell. This function is analogous to
PatternDetect, except that it detects rotational patterns. Four
patterns are detected: clockwise rotation when rotation in all four
neighbbour grids appears clockwise, counter clockwise rotation when rotation
in all four neighbour grids appears counter-clockwise, and partial clockwise
and counter-clockwise rotation, when all but one of the four adjacent
neighbour cells has vectors that indicate rotation. For all of the patterns
above a sub-pattern is specified as convergence when all of the vectors in
the four adjacent grids point towards the focal cell or a divergence when all
of the vectors in the four adjacent grids point away from the focal cell.
Usage
RotationDetect(vfdf)
Arguments
vfdf |
A data frame as returned by |
Value
A data frame as returned by DispField,
DispFieldST, or DispFieldSTall, with three
additional columns. The first additional column is called Pattern in which
the patterns around each focal cell are categorized as clockwise,
counter-clockwise, partial clockwise, partial counter-clockwise, or NA. The
second additional column, called SubPattern, indicates whether all arrows
point towards (convergence) or away (divergence) from the focal cell. The
third additional column is called PatternCt, which contains a one if all
four neighbourhood grid cells contain displacement estimates, and a NA
otherwise.
Examples
# creating rotation patterns
Mat1 <- matrix(rep(0,9*9), nrow = 9)
Mat1[c(1:3), 4] <- 1
Mat1[c(7:9), 6] <- 1
Mat1[4, c(7:9)] <- 1
Mat1[6, c(1:3)] <- 1
Mat1
Mat2 <- matrix(rep(0,9*9), nrow = 9)
Mat2[c(1:3), 5] <- 1
Mat2[c(7:9), 5] <- 1
Mat2[5, c(7:9)] <- 1
Mat2[5, c(1:3)] <- 1
Mat2
# rasterizing
rast1 <- terra::rast(Mat1)
terra::plot(rast1)
rast2 <- terra::rast(Mat2)
terra::plot(rast2)
# Detecting clockwise rotation
(VFdf1 <- DispField(rast1, rast2, factv1 = 3, facth1 = 3, restricted = TRUE))
(patdf1 <- RotationDetect(VFdf1))
# Detecting counter-clockwise rotation
(VFdf2 <- DispField(rast2, rast1, factv1 = 3, facth1 = 3, restricted = TRUE))
(patdf2 <- RotationDetect(VFdf2))