Diameter of the circumscribing circle around patches
Arguments
- landscape
SpatRaster or matrix (with x, y, id columns)
- directions
The number of directions in which patches should be connected: 4 (rook's case) or 8 (queen's case).
- level
Either 'patch' or 'class' for the corresponding level.
Details
The diameter of the smallest circumscribing circle around a patch in the landscape is based on the maximum distance between the corners of each cell. This ensures that all cells of the patch are included in the patch.
References
Based on C++ code from Project Nayuki (https://www.nayuki.io/page/smallest-enclosing-circle).
Examples
landscape <- terra::rast(landscapemetrics::landscape)
# get circle around each patch
get_circumscribingcircle(landscape)
#> # A tibble: 28 × 7
#> layer level class id value center_x center_y
#> <int> <chr> <int> <int> <dbl> <dbl> <dbl>
#> 1 1 patch 1 1 1.41 0.5 29.5
#> 2 1 patch 1 2 4.12 0.5 21
#> 3 1 patch 1 3 15.5 7.38 13.7
#> 4 1 patch 1 4 1.41 5.5 0.5
#> 5 1 patch 1 5 1.41 11.5 3.5
#> 6 1 patch 1 6 16.6 19.5 22.5
#> 7 1 patch 1 7 6.71 17 8.5
#> 8 1 patch 1 8 3.61 20.5 1
#> 9 1 patch 1 9 3.61 26 2.5
#> 10 1 patch 2 10 10.8 3.73 25.1
#> # ℹ 18 more rows
# get circle around whole class
get_circumscribingcircle(landscape, level = "class")
#> # A tibble: 3 × 7
#> layer level class id value center_x center_y
#> <int> <chr> <int> <int> <dbl> <dbl> <dbl>
#> 1 1 class 1 NA 39.6 13.5 15.5
#> 2 1 class 2 NA 41.7 15 14.5
#> 3 1 class 3 NA 42.4 15 15