Skip to contents

Recursively compute convex hulls, removing outer layers until few points remain.

Usage

get_chull_onion(x, ..., .cols = NULL)

Arguments

x

A matrix (nx2), list of matrices, or tibble with coo columns.

...

Additional arguments (reserved for future use).

.cols

Column name(s) to process when x is a tibble. If NULL, automatically detects columns containing coo objects.

n

Integer. Minimum number of points to stop peeling. Default is 3.

Value

  • If x is a single matrix: returns a list of matrices (one per layer)

  • If x is a list: returns a list of lists

  • If x is a tibble: returns a list extracted from coo column

Details

Computes convex hull layers (onion peeling):

  1. Compute convex hull

  2. Remove hull points

  3. Repeat until ≤ n points remain

Returns a list where each element is a convex hull layer, from outer to inner. This is not a scalar, so cannot be used with measure().

See also

Examples

get_chull_onion(shapes$cat)
#> [[1]]
#>       [,1] [,2]
#>  [1,]  232   55
#>  [2,]  230   49
#>  [3,]  208   19
#>  [4,]  202   15
#>  [5,]  190   11
#>  [6,]  178    9
#>  [7,]  166    9
#>  [8,]  154   11
#>  [9,]  149   13
#> [10,]  143   16
#> [11,]  137   21
#> [12,]  133   27
#> [13,]  130   33
#> [14,]  130   45
#> [15,]  133  104
#> [16,]  134  116
#> [17,]  136  122
#> [18,]  144  139
#> [19,]  148  145
#> [20,]  197  205
#> [21,]  216  226
#> [22,]  221  231
#> [23,]  225  226
#> [24,]  249  195
#> 
#> [[2]]
#>       [,1] [,2]
#>  [1,]  230   60
#>  [2,]  224   45
#>  [3,]  196   13
#>  [4,]  184   10
#>  [5,]  172    9
#>  [6,]  160   10
#>  [7,]  130   39
#>  [8,]  133   98
#>  [9,]  134  110
#> [10,]  139  128
#> [11,]  142  134
#> [12,]  153  151
#> [13,]  203  210
#> [14,]  212  220
#> [15,]  226  220
#> [16,]  244  199
#> [17,]  248  189
#> 
#> [[3]]
#>       [,1] [,2]
#>  [1,]  224   62
#>  [2,]  219   45
#>  [3,]  203   22
#>  [4,]  180   19
#>  [5,]  174   19
#>  [6,]  162   21
#>  [7,]  150   25
#>  [8,]  145   30
#>  [9,]  132   51
#> [10,]  133   92
#> [11,]  159  157
#> [12,]  194  199
#> [13,]  209  214
#> [14,]  226  215
#> [15,]  239  204
#> [16,]  244  183
#> [17,]  237  138
#> 
#> [[4]]
#>       [,1] [,2]
#>  [1,]  222   67
#>  [2,]  213   47
#>  [3,]  198   22
#>  [4,]  186   20
#>  [5,]  168   20
#>  [6,]  156   23
#>  [7,]  142   36
#>  [8,]  135   57
#>  [9,]  134   80
#> [10,]  134   86
#> [11,]  165  160
#> [12,]  192  193
#> [13,]  228  211
#> [14,]  234  208
#> [15,]  238  178
#> [16,]  237  144
#> [17,]  235  132
#> 
#> [[5]]
#>       [,1] [,2]
#>  [1,]  221   73
#>  [2,]  209   48
#>  [3,]  192   21
#>  [4,]  143   41
#>  [5,]  136   63
#>  [6,]  135   74
#>  [7,]  171  162
#>  [8,]  191  187
#>  [9,]  235  173
#> [10,]  237  156
#> [11,]  237  150
#> 
#> [[6]]
#>       [,1] [,2]
#>  [1,]  221   79
#>  [2,]  205   43
#>  [3,]  194   42
#>  [4,]  182   42
#>  [5,]  152   43
#>  [6,]  146   44
#>  [7,]  136   69
#>  [8,]  177  165
#>  [9,]  191  182
#> [10,]  235  167
#> [11,]  236  162
#> [12,]  231  126
#> 
#> [[7]]
#>      [,1] [,2]
#> [1,]  221   85
#> [2,]  208   53
#> [3,]  200   43
#> [4,]  188   42
#> [5,]  158   43
#> [6,]  183  170
#> [7,]  188  176
#> [8,]  227  120
#> 
#> [[8]]
#>      [,1] [,2]
#> [1,]  206   54
#> [2,]  176   43
#> [3,]  164   43
#> [4,]  224  114
#> [5,]  221   91
#> 
#> [[9]]
#>      [,1] [,2]
#> [1,]  204   59
#> [2,]  200   56
#> [3,]  170   43
#> [4,]  222  108
#> [5,]  221   97
#> 
#> [[10]]
#>      [,1] [,2]
#> [1,]  202   65
#> [2,]  196   56
#> [3,]  221  102
#> 
#> [[11]]
#>      [,1] [,2]
#> [1,]  200   62
#> 
get_chull_onion(shapes$cat, n = 5)
#> [[1]]
#>       [,1] [,2]
#>  [1,]  232   55
#>  [2,]  230   49
#>  [3,]  208   19
#>  [4,]  202   15
#>  [5,]  190   11
#>  [6,]  178    9
#>  [7,]  166    9
#>  [8,]  154   11
#>  [9,]  149   13
#> [10,]  143   16
#> [11,]  137   21
#> [12,]  133   27
#> [13,]  130   33
#> [14,]  130   45
#> [15,]  133  104
#> [16,]  134  116
#> [17,]  136  122
#> [18,]  144  139
#> [19,]  148  145
#> [20,]  197  205
#> [21,]  216  226
#> [22,]  221  231
#> [23,]  225  226
#> [24,]  249  195
#> 
#> [[2]]
#>       [,1] [,2]
#>  [1,]  230   60
#>  [2,]  224   45
#>  [3,]  196   13
#>  [4,]  184   10
#>  [5,]  172    9
#>  [6,]  160   10
#>  [7,]  130   39
#>  [8,]  133   98
#>  [9,]  134  110
#> [10,]  139  128
#> [11,]  142  134
#> [12,]  153  151
#> [13,]  203  210
#> [14,]  212  220
#> [15,]  226  220
#> [16,]  244  199
#> [17,]  248  189
#> 
#> [[3]]
#>       [,1] [,2]
#>  [1,]  224   62
#>  [2,]  219   45
#>  [3,]  203   22
#>  [4,]  180   19
#>  [5,]  174   19
#>  [6,]  162   21
#>  [7,]  150   25
#>  [8,]  145   30
#>  [9,]  132   51
#> [10,]  133   92
#> [11,]  159  157
#> [12,]  194  199
#> [13,]  209  214
#> [14,]  226  215
#> [15,]  239  204
#> [16,]  244  183
#> [17,]  237  138
#> 
#> [[4]]
#>       [,1] [,2]
#>  [1,]  222   67
#>  [2,]  213   47
#>  [3,]  198   22
#>  [4,]  186   20
#>  [5,]  168   20
#>  [6,]  156   23
#>  [7,]  142   36
#>  [8,]  135   57
#>  [9,]  134   80
#> [10,]  134   86
#> [11,]  165  160
#> [12,]  192  193
#> [13,]  228  211
#> [14,]  234  208
#> [15,]  238  178
#> [16,]  237  144
#> [17,]  235  132
#> 
#> [[5]]
#>       [,1] [,2]
#>  [1,]  221   73
#>  [2,]  209   48
#>  [3,]  192   21
#>  [4,]  143   41
#>  [5,]  136   63
#>  [6,]  135   74
#>  [7,]  171  162
#>  [8,]  191  187
#>  [9,]  235  173
#> [10,]  237  156
#> [11,]  237  150
#> 
#> [[6]]
#>       [,1] [,2]
#>  [1,]  221   79
#>  [2,]  205   43
#>  [3,]  194   42
#>  [4,]  182   42
#>  [5,]  152   43
#>  [6,]  146   44
#>  [7,]  136   69
#>  [8,]  177  165
#>  [9,]  191  182
#> [10,]  235  167
#> [11,]  236  162
#> [12,]  231  126
#> 
#> [[7]]
#>      [,1] [,2]
#> [1,]  221   85
#> [2,]  208   53
#> [3,]  200   43
#> [4,]  188   42
#> [5,]  158   43
#> [6,]  183  170
#> [7,]  188  176
#> [8,]  227  120
#> 
#> [[8]]
#>      [,1] [,2]
#> [1,]  206   54
#> [2,]  176   43
#> [3,]  164   43
#> [4,]  224  114
#> [5,]  221   91
#> 
#> [[9]]
#>      [,1] [,2]
#> [1,]  204   59
#> [2,]  200   56
#> [3,]  170   43
#> [4,]  222  108
#> [5,]  221   97
#> 
#> [[10]]
#>      [,1] [,2]
#> [1,]  200   62
#> [2,]  196   56
#> [3,]  221  102
#> [4,]  202   65
#>