Skip to contents

Rotate a shape by a specified angle around the origin.

Usage

coo_rotate(x, ..., .cols = NULL, .ldk_col = 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.

theta

Numeric. Rotation angle in radians. Default is 0.

Value

  • If x is a single matrix: returns the rotated matrix

  • If x is a list: returns a list of rotated matrices

  • If x is a tibble: returns the tibble with specified coo columns rotated

See also

coo_rotate_around() for rotation around a specific point; coo_slide_angle() for rotating point order by angle

Examples

# Rotate by 45 degrees
coo_rotate(shapes$cat, theta = pi / 4)
#> <xy [120 x 2]>
#>       [,1]    [,2]   
#>  [1,]  97.581 185.262
#>  [2,]  98.995 178.191
#>  [3,] 101.823 181.019
#>  [4,] 107.480 183.848
#>  [5,] 113.844 181.726
#>  [6,] ...     ...    
#>  [7,] 123.037 186.676
#>  [8,] 117.380 183.848
#>  [9,] 109.602 184.555
#> [10,] 102.530 185.969
#> [11,]  96.874 188.798

# Rotate list of shapes
coo_rotate(bot$coo, theta = pi / 6)
#> $brahma
#> <xy [138 x 2]>
#>       [,1]     [,2]    
#>  [1,] -248.457  504.340
#>  [2,] -235.359  487.654
#>  [3,] -229.859  478.127
#>  [4,] -216.761  461.441
#>  [5,] -203.663  444.754
#>  [6,] ...      ...     
#>  [7,] -298.555  585.113
#>  [8,] -293.921  575.086
#>  [9,] -283.421  556.900
#> [10,] -272.055  539.213
#> [11,] -266.189  531.053
#> 
#> $caney
#> <xy [168 x 2]>
#>       [,1]     [,2]    
#>  [1,] -221.601  489.824
#>  [2,] -216.601  481.163
#>  [3,] -205.735  464.343
#>  [4,] -201.601  455.183
#>  [5,] -195.735  447.022
#>  [6,] ...      ...     
#>  [7,] -242.182  571.472
#>  [8,] -239.976  549.651
#>  [9,] -238.806  537.625
#> [10,] -236.405  527.465
#> [11,] -229.869  508.144
#> 
#> $chimay
#> <xy [189 x 2]>
#>       [,1]     [,2]    
#>  [1,] -124.065  312.886
#>  [2,] -120.065  305.958
#>  [3,] -116.565  299.896
#>  [4,] -111.699  293.468
#>  [5,] -107.699  286.540
#>  [6,] ...      ...     
#>  [7,] -138.405  357.724
#>  [8,] -138.735  348.295
#>  [9,] -137.833  340.733
#> [10,] -135.565  332.805
#> [11,] -132.431  325.377
#> 
#> $corona
#> <xy [129 x 2]>
#>       [,1]     [,2]    
#>  [1,] -134.192  414.427
#>  [2,] -129.192  405.767
#>  [3,] -119.558  387.080
#>  [4,] -113.692  378.920
#>  [5,] -108.192  369.394
#>  [6,] ...      ...     
#>  [7,] -150.809  497.209
#>  [8,] -147.737  475.888
#>  [9,] -147.567  465.594
#> [10,] -145.531  454.068
#> [11,] -142.094  434.113
#> 
#> $deusventrue
#> <xy [152 x 2]>
#>       [,1]     [,2]    
#>  [1,] -176.414  453.558
#>  [2,] -175.378  443.764
#>  [3,] -173.306  424.176
#>  [4,] -171.405  414.881
#>  [5,] -167.467  394.061
#>  [6,] ...      ...     
#>  [7,] -190.897  530.644
#>  [8,] -188.496  520.484
#>  [9,] -185.558  501.395
#> [10,] -183.656  492.101
#> [11,] -178.986  474.013
#> 
#> $duvel
#> <xy [161 x 2]>
#>       [,1]     [,2]    
#>  [1,] -104.672  303.298
#>  [2,]  -99.172  293.772
#>  [3,]  -93.672  284.245
#>  [4,]  -93.672  284.245
#>  [5,]  -88.172  274.719
#>  [6,] ...      ...     
#>  [7,] -120.414  356.563
#>  [8,] -119.244  344.537
#>  [9,] -117.708  333.877
#> [10,] -117.708  333.877
#> [11,] -113.940  323.351
#> 
#> $franziskaner
#> <xy [124 x 2]>
#>       [,1]     [,2]    
#>  [1,] -172.735  407.185
#>  [2,] -162.235  388.999
#>  [3,] -157.235  380.338
#>  [4,] -147.735  363.884
#>  [5,] -142.735  355.224
#>  [6,] ...      ...     
#>  [7,] -214.038  490.726
#>  [8,] -204.405  472.039
#>  [9,] -201.137  462.379
#> [10,] -193.235  442.692
#> [11,] -188.235  434.032
#> 
#> $grimbergen
#> <xy [126 x 2]>
#>       [,1]     [,2]    
#>  [1,] -165.627  370.874
#>  [2,] -162.359  361.214
#>  [3,] -151.859  343.027
#>  [4,] -146.359  333.501
#>  [5,] -141.359  324.841
#>  [6,] ...      ...     
#>  [7,] -179.414  458.754
#>  [8,] -181.538  434.434
#>  [9,] -181.235  421.908
#> [10,] -179.699  411.247
#> [11,] -174.395  390.061
#> 
#> $guiness
#> <xy [183 x 2]>
#>       [,1]     [,2]    
#>  [1,] -132.744  367.920
#>  [2,] -128.744  360.992
#>  [3,] -124.744  354.063
#>  [4,] -120.244  346.269
#>  [5,] -112.244  332.413
#>  [6,] ...      ...     
#>  [7,] -157.780  419.283
#>  [8,] -155.012  410.489
#>  [9,] -150.976  395.499
#> [10,] -146.110  389.070
#> [11,] -140.744  381.776
#> 
#> $hoegardeen
#> <xy [193 x 2]>
#>       [,1]     [,2]    
#>  [1,] -235.627  492.118
#>  [2,] -230.859  479.859
#>  [3,] -224.859  469.467
#>  [4,] -218.359  458.209
#>  [5,] -211.859  446.951
#>  [6,] ...      ...     
#>  [7,] -259.271  565.070
#>  [8,] -256.235  551.811
#>  [9,] -252.833  539.919
#> [10,] -249.797  526.661
#> [11,] -244.163  514.902
#> 
#> $jupiler
#> <xy [156 x 2]>
#>       [,1]     [,2]    
#>  [1,] -209.869  473.503
#>  [2,] -203.735  460.879
#>  [3,] -197.235  449.620
#>  [4,] -190.235  437.496
#>  [5,] -183.235  425.372
#>  [6,] ...      ...     
#>  [7,] -234.414  554.017
#>  [8,] -231.744  539.393
#>  [9,] -227.842  526.634
#> [10,] -224.306  512.510
#> [11,] -219.905  498.886
#> 
#> $kingfisher
#> <xy [182 x 2]>
#>       [,1]     [,2]    
#>  [1,] -130.512  368.054
#>  [2,] -125.512  359.394
#>  [3,] -121.012  351.599
#>  [4,] -116.012  342.939
#>  [5,] -111.012  334.279
#>  [6,] ...      ...     
#>  [7,] -150.852  423.283
#>  [8,] -148.950  413.989
#>  [9,] -145.682  404.329
#> [10,] -143.280  394.168
#> [11,] -138.280  385.508
#> 
#> $latrappe
#> <xy [136 x 2]>
#>       [,1]     [,2]    
#>  [1,] -171.983  349.884
#>  [2,] -166.849  338.992
#>  [3,] -160.349  327.733
#>  [4,] -154.349  317.341
#>  [5,] -147.849  306.083
#>  [6,] ...      ...     
#>  [7,] -207.751  415.836
#>  [8,] -203.849  403.077
#>  [9,] -196.983  393.185
#> [10,] -190.483  381.927
#> [11,] -184.483  371.535
#> 
#> $lindemanskriek
#> <xy [176 x 2]>
#>       [,1]     [,2]    
#>  [1,] -161.538  399.793
#>  [2,] -157.538  392.865
#>  [3,] -154.369  377.374
#>  [4,] -150.735  369.080
#>  [5,] -146.735  362.152
#>  [6,] ...      ...     
#>  [7,] -176.316  459.388
#>  [8,] -174.048  451.460
#>  [9,] -172.146  442.166
#> [10,] -169.878  434.238
#> [11,] -165.708  417.015
#> 
#> $nicechouffe
#> <xy [146 x 2]>
#>       [,1]     [,2]    
#>  [1,] -109.486  353.635
#>  [2,] -106.352  346.207
#>  [3,] -101.316  329.485
#>  [4,]  -96.816  321.690
#>  [5,]  -93.682  314.262
#>  [6,] ...      ...     
#>  [7,] -125.862  409.999
#>  [8,] -124.460  401.570
#>  [9,] -121.692  392.776
#> [10,] -119.924  385.714
#> [11,] -115.388  369.858
#> 
#> $pecheresse
#> <xy [129 x 2]>
#>       [,1]     [,2]    
#>  [1,] -192.940  460.183
#>  [2,] -185.172  442.728
#>  [3,] -180.672  434.934
#>  [4,] -171.538  417.113
#>  [5,] -163.771  399.659
#>  [6,] ...      ...     
#>  [7,] -215.522  545.295
#>  [8,] -213.120  535.134
#>  [9,] -208.450  517.046
#> [10,] -203.280  498.092
#> [11,] -200.512  489.297
#> 
#> $sierranevada
#> <xy [176 x 2]>
#>       [,1]     [,2]    
#>  [1,] -119.672  329.279
#>  [2,] -113.672  318.886
#>  [3,] -113.672  318.886
#>  [4,] -107.172  307.628
#>  [5,] -101.172  297.236
#>  [6,] ...      ...     
#>  [7,] -148.940  383.972
#>  [8,] -144.172  371.714
#>  [9,] -139.905  360.322
#> [10,] -132.172  350.929
#> [11,] -132.172  350.929
#> 
#> $tanglefoot
#> <xy [174 x 2]>
#>       [,1]     [,2]    
#>  [1,] -141.931  341.831
#>  [2,] -137.931  334.903
#>  [3,] -133.931  327.975
#>  [4,] -125.931  314.119
#>  [5,] -121.065  307.690
#>  [6,] ...      ...     
#>  [7,] -166.467  392.329
#>  [8,] -165.065  383.901
#>  [9,] -161.931  376.472
#> [10,] -154.797  362.116
#> [11,] -150.797  355.188
#> 
#> $tauro
#> <xy [174 x 2]>
#>       [,1]     [,2]    
#>  [1,] -209.003  474.003
#>  [2,] -204.735  462.611
#>  [3,] -198.735  452.218
#>  [4,] -192.235  440.960
#>  [5,] -186.235  430.568
#>  [6,] ...      ...     
#>  [7,] -232.012  543.857
#>  [8,] -228.610  531.965
#>  [9,] -226.940  519.072
#> [10,] -222.672  507.680
#> [11,] -217.905  495.422
#> 
#> $westmalle
#> <xy [141 x 2]>
#>       [,1]     [,2]    
#>  [1,] -136.378  376.214
#>  [2,] -132.378  369.286
#>  [3,] -126.476  353.063
#>  [4,] -122.476  346.135
#>  [5,] -114.842  330.913
#>  [6,] ...      ...     
#>  [7,] -156.022  442.238
#>  [8,] -154.120  432.943
#>  [9,] -148.718  417.587
#> [10,] -147.682  407.793
#> [11,] -141.414  392.936
#> 
#> $amrut
#> <xy [191 x 2]>
#>       [,1]     [,2]    
#>  [1,] -171.137  410.417
#>  [2,] -166.137  401.757
#>  [3,] -161.137  393.097
#>  [4,] -156.137  384.436
#>  [5,] -151.137  375.776
#>  [6,] ...      ...     
#>  [7,] -202.869  461.379
#>  [8,] -196.137  453.718
#>  [9,] -191.137  445.058
#> [10,] -186.137  436.398
#> [11,] -181.137  427.738
#> 
#> $ballantines
#> <xy [146 x 2]>
#>       [,1]     [,2]    
#>  [1,] -145.591  328.171
#>  [2,] -137.591  314.315
#>  [3,] -133.591  307.386
#>  [4,] -126.091  294.396
#>  [5,] -122.091  287.468
#>  [6,] ...      ...     
#>  [7,] -181.091  389.659
#>  [8,] -173.091  375.802
#>  [9,] -169.091  368.874
#> [10,] -161.091  355.018
#> [11,] -157.591  348.956
#> 
#> $bushmills
#> <xy [165 x 2]>
#>       [,1]     [,2]    
#>  [1,] -165.646  430.908
#>  [2,] -158.146  417.917
#>  [3,] -150.146  404.061
#>  [4,] -150.146  404.061
#>  [5,] -142.646  391.070
#>  [6,] ...      ...     
#>  [7,] -205.878  496.592
#>  [8,] -198.378  483.601
#>  [9,] -190.378  469.745
#> [10,] -190.378  469.745
#> [11,] -182.878  456.754
#> 
#> $chivas
#> <xy [164 x 2]>
#>       [,1]     [,2]    
#>  [1,] -189.921  394.953
#>  [2,] -187.653  387.025
#>  [3,] -180.885  371.302
#>  [4,] -176.885  364.374
#>  [5,] -168.885  350.518
#>  [6,] ...      ...     
#>  [7,] -180.852  475.245
#>  [8,] -184.280  465.183
#>  [9,] -189.637  442.460
#> [10,] -190.833  432.532
#> [11,] -191.859  412.310
#> 
#> $dalmore
#> <xy [155 x 2]>
#>       [,1]     [,2]    
#>  [1,] -140.467  347.295
#>  [2,] -138.797  334.403
#>  [3,] -134.895  321.645
#>  [4,] -130.627  310.252
#>  [5,] -124.627  299.860
#>  [6,] ...      ...     
#>  [7,] -126.665  423.391
#>  [8,] -126.665  423.391
#>  [9,] -132.424  407.365
#> [10,] -137.316  391.838
#> [11,] -139.976  376.446
#> 
#> $famousgrouse
#> <xy [169 x 2]>
#>       [,1]    [,2]   
#>  [1,] -70.763 320.566
#>  [2,] -65.763 311.906
#>  [3,] -61.263 304.111
#>  [4,] -56.263 295.451
#>  [5,] -56.263 295.451
#>  [6,] ...     ...    
#>  [7,] -96.496 361.135
#>  [8,] -91.496 352.475
#>  [9,] -91.496 352.475
#> [10,] -86.996 344.681
#> [11,] -81.996 336.020
#> 
#> $glendronach
#> <xy [197 x 2]>
#>       [,1]     [,2]    
#>  [1,] -154.280  413.221
#>  [2,] -148.280  402.829
#>  [3,] -141.414  392.936
#>  [4,] -141.414  392.936
#>  [5,] -135.414  382.544
#>  [6,] ...      ...     
#>  [7,] -185.146  464.683
#>  [8,] -179.146  454.290
#>  [9,] -172.280  444.398
#> [10,] -172.280  444.398
#> [11,] -166.280  434.006
#> 
#> $glenmorangie
#> <xy [179 x 2]>
#>       [,1]     [,2]    
#>  [1,] -213.101  475.101
#>  [2,] -203.735  460.879
#>  [3,] -203.735  460.879
#>  [4,] -195.735  447.022
#>  [5,] -186.369  432.800
#>  [6,] ...      ...     
#>  [7,] -245.806  549.749
#>  [8,] -241.771  534.759
#>  [9,] -236.735  518.036
#> [10,] -229.101  502.814
#> [11,] -229.101  502.814
#> 
#> $highlandpark
#> <xy [169 x 2]>
#>       [,1]     [,2]    
#>  [1,] -149.127  342.295
#>  [2,] -142.127  330.171
#>  [3,] -142.127  330.171
#>  [4,] -135.127  318.047
#>  [5,] -128.127  305.922
#>  [6,] ...      ...     
#>  [7,] -184.993  402.417
#>  [8,] -177.127  390.793
#>  [9,] -170.127  378.668
#> [10,] -163.127  366.544
#> [11,] -163.127  366.544
#> 
#> $jackdaniels
#> <xy [150 x 2]>
#>       [,1]     [,2]    
#>  [1,] -152.440  390.035
#>  [2,] -145.940  378.776
#>  [3,] -139.440  367.518
#>  [4,] -132.940  356.260
#>  [5,] -126.440  345.001
#>  [6,] ...      ...     
#>  [7,] -185.878  461.951
#>  [8,] -180.610  448.826
#>  [9,] -176.708  436.068
#> [10,] -171.074  424.310
#> [11,] -163.708  413.551
#> 
#> $jb
#> <xy [174 x 2]>
#>       [,1]     [,2]    
#>  [1,] -228.261  481.359
#>  [2,] -222.761  471.833
#>  [3,] -218.627  462.673
#>  [4,] -207.627  443.620
#>  [5,] -201.261  434.594
#>  [6,] ...      ...     
#>  [7,] -266.627  545.811
#>  [8,] -262.859  535.285
#>  [9,] -256.127  527.625
#> [10,] -244.261  509.072
#> [11,] -238.761  499.546
#> 
#> $johnniewalker
#> <xy [168 x 2]>
#>       [,1]    [,2]   
#>  [1,]  27.681 218.054
#>  [2,]  29.681 214.590
#>  [3,]  31.681 211.126
#>  [4,]  33.681 207.662
#>  [5,]  38.547 201.234
#>  [6,] ...     ...    
#>  [7,]  13.681 242.303
#>  [8,]  15.681 238.839
#>  [9,]  19.681 231.911
#> [10,]  21.681 228.447
#> [11,]  23.681 224.983
#> 
#> $magallan
#> <xy [141 x 2]>
#>       [,1]     [,2]    
#>  [1,] -130.950  382.812
#>  [2,] -123.450  369.822
#>  [3,] -118.218  364.760
#>  [4,] -111.218  352.635
#>  [5,] -102.852  340.145
#>  [6,] ...      ...     
#>  [7,] -166.048  437.604
#>  [8,] -162.548  431.542
#>  [9,] -155.548  419.417
#> [10,] -146.316  407.427
#> [11,] -142.816  401.365
#> 
#> $makersmark
#> <xy [177 x 2]>
#>       [,1]     [,2]    
#>  [1,] -189.153  389.623
#>  [2,] -190.081  375.231
#>  [3,] -190.144  361.338
#>  [4,] -190.144  361.338
#>  [5,] -185.742  347.714
#>  [6,] ...      ...     
#>  [7,] -175.084  461.254
#>  [8,] -172.414  446.630
#>  [9,] -173.976  435.336
#> [10,] -173.976  435.336
#> [11,] -181.101  419.676
#> 
#> $oban
#> <xy [179 x 2]>
#>       [,1]     [,2]    
#>  [1,] -164.414  432.774
#>  [2,] -159.914  424.979
#>  [3,] -151.414  410.257
#>  [4,] -147.414  403.329
#>  [5,] -142.914  395.535
#>  [6,] ...      ...     
#>  [7,] -196.146  483.735
#>  [8,] -190.780  476.441
#>  [9,] -186.780  469.513
#> [10,] -182.280  461.718
#> [11,] -173.780  446.996
#> 
#> $oldpotrero
#> <xy [131 x 2]>
#>       [,1]    [,2]   
#>  [1,] -81.620 307.370
#>  [2,] -82.816 297.442
#>  [3,] -84.012 287.513
#>  [4,] -82.440 268.791
#>  [5,] -80.538 259.497
#>  [6,] ...     ...    
#>  [7,] -79.943 376.465
#>  [8,] -77.675 368.537
#>  [9,] -77.505 358.243
#> [10,] -79.031 338.886
#> [11,] -79.728 328.092
#> 
#> $redbreast
#> <xy [177 x 2]>
#>       [,1]    [,2]   
#>  [1,] -25.567 254.284
#>  [2,] -24.799 248.954
#>  [3,] -24.531 244.490
#>  [4,] -22.130 234.329
#>  [5,] -20.130 230.865
#>  [6,] ...     ...    
#>  [7,] -11.855 294.533
#>  [8,] -14.185 288.569
#>  [9,] -16.515 282.604
#> [10,] -20.809 272.042
#> [11,] -23.139 266.078
#> 
#> $tamdhu
#> <xy [176 x 2]>
#>       [,1]     [,2]    
#>  [1,] -233.565  502.546
#>  [2,] -227.565  492.154
#>  [3,] -221.065  480.895
#>  [4,] -215.065  470.503
#>  [5,] -209.065  460.111
#>  [6,] ...      ...     
#>  [7,] -272.663  564.266
#>  [8,] -268.395  552.874
#>  [9,] -261.529  542.981
#> [10,] -254.663  533.089
#> [11,] -247.797  523.197
#> 
#> $wildturkey
#> <xy [185 x 2]>
#>       [,1]     [,2]    
#>  [1,] -268.912  501.768
#>  [2,] -261.912  489.644
#>  [3,] -254.912  477.520
#>  [4,] -247.912  465.395
#>  [5,] -240.912  453.271
#>  [6,] ...      ...     
#>  [7,] -308.179  573.783
#>  [8,] -303.412  561.524
#>  [9,] -299.510  548.766
#> [10,] -292.510  536.642
#> [11,] -285.510  524.517
#> 
#> $yoichi
#> <xy [123 x 2]>
#>       [,1]     [,2]    
#>  [1,] -132.244  367.054
#>  [2,] -124.744  354.063
#>  [3,] -117.744  341.939
#>  [4,] -110.244  328.949
#>  [5,] -102.744  315.958
#>  [6,] ...      ...     
#>  [7,] -169.610  429.774
#>  [8,] -166.110  423.711
#>  [9,] -158.610  410.721
#> [10,] -151.610  398.597
#> [11,] -143.244  386.106
#> 
#> attr(,"class")
#> [1] "out"  "coo"  "list"

# Rotate tibble shapes
coo_rotate(bot, theta = pi / 8)
#> # A tibble: 40 × 3
#>    coo       type   dummy
#>    <out>     <fct>  <fct>
#>  1 (138 x 2) whisky a    
#>  2 (168 x 2) whisky a    
#>  3 (189 x 2) whisky a    
#>  4 (129 x 2) whisky a    
#>  5 (152 x 2) whisky a    
#>  6 (161 x 2) whisky a    
#>  7 (124 x 2) whisky a    
#>  8 (126 x 2) whisky a    
#>  9 (183 x 2) whisky a    
#> 10 (193 x 2) whisky a    
#> # ℹ 30 more rows