Skip to contents

Rotate shape so the first point is exactly on an axis.

Usage

coo_untilt_x(x, ..., .cols = NULL, .ldk_col = NULL)

coo_untilt_y(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 columns.

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 rotated coo column(s)

Details

coo_untilt_x(): Rotates around centroid so first point is on x-axis (y=0).

coo_untilt_y(): Rotates around centroid so first point is on y-axis (x=0), choosing the nearest y-axis (positive or negative).

Works best when shapes are centered.

See also

coo_rotate() for arbitrary rotation; coo_align() for principal axis alignment

Examples

# Untilt to x-axis
coo_untilt_x(shapes$cat)
#> <xy [120 x 2]>
#>       [,1]    [,2]   
#>  [1,]  11.032 209.099
#>  [2,]  15.277 203.270
#>  [3,]  16.661 207.023
#>  [4,]  20.613 211.960
#>  [5,]  27.281 212.699
#>  [6,] ...     ...    
#>  [7,]  33.556 221.043
#>  [8,]  29.603 216.106
#>  [9,]  22.244 213.491
#> [10,]  15.230 211.814
#> [11,]   8.909 212.013

# Untilt to y-axis
coo_untilt_y(bot$coo)
#> $brahma
#> <xy [138 x 2]>
#>       [,1]    [,2]   
#>  [1,] 561.287  32.362
#>  [2,] 540.816  26.798
#>  [3,] 529.900  25.444
#>  [4,] 509.429  19.881
#>  [5,] 488.958  14.318
#>  [6,] ...     ...    
#>  [7,] 655.194  47.037
#>  [8,] 644.155  46.675
#>  [9,] 623.315  44.089
#> [10,] 602.598  40.510
#> [11,] 592.797  38.287
#> 
#> $caney
#> <xy [168 x 2]>
#>       [,1]    [,2]   
#>  [1,] 534.470  58.104
#>  [2,] 524.683  56.048
#>  [3,] 505.316  50.959
#>  [4,] 495.324  49.882
#>  [5,] 485.743  46.848
#>  [6,] ...     ...    
#>  [7,] 618.468  52.245
#>  [8,] 597.045  56.942
#>  [9,] 585.252  59.574
#> [10,] 574.849  60.454
#> [11,] 554.454  60.258
#> 
#> $chimay
#> <xy [189 x 2]>
#>       [,1]    [,2]   
#>  [1,] 336.583   1.457
#>  [2,] 328.673   0.259
#>  [3,] 321.752  -0.790
#>  [4,] 313.992  -2.978
#>  [5,] 306.083  -4.177
#>  [6,] ...     ...    
#>  [7,] 383.562  -1.536
#>  [8,] 374.903   2.209
#>  [9,] 367.532   4.126
#> [10,] 359.323   4.904
#> [11,] 351.263   4.694
#> 
#> $corona
#> <xy [129 x 2]>
#>       [,1]    [,2]   
#>  [1,] 435.572  -5.846
#>  [2,] 425.765  -7.804
#>  [3,] 404.976 -10.934
#>  [4,] 395.365 -13.872
#>  [5,] 384.578 -16.026
#>  [6,] ...     ...    
#>  [7,] 519.309 -16.663
#>  [8,] 498.130 -12.733
#>  [9,] 488.326  -9.592
#> [10,] 476.756  -7.822
#> [11,] 456.753  -4.677
#> 
#> $deusventrue
#> <xy [152 x 2]>
#>       [,1]    [,2]   
#>  [1,] 486.528 -11.310
#>  [2,] 477.087  -8.505
#>  [3,] 458.205  -2.895
#>  [4,] 448.893  -1.081
#>  [5,] 428.157   3.279
#>  [6,] ...     ...    
#>  [7,] 563.264 -27.543
#>  [8,] 552.961 -25.859
#>  [9,] 534.208 -21.240
#> [10,] 524.896 -19.427
#> [11,] 506.401 -16.791
#> 
#> $duvel
#> <xy [161 x 2]>
#>       [,1]    [,2]   
#>  [1,] 320.592  12.920
#>  [2,] 309.885  10.396
#>  [3,] 299.179   7.871
#>  [4,] 299.179   7.871
#>  [5,] 288.473   5.347
#>  [6,] ...     ...    
#>  [7,] 376.134  12.660
#>  [8,] 364.280  15.002
#>  [9,] 353.629  16.600
#> [10,] 353.629  16.600
#> [11,] 342.464  16.022
#> 
#> $franziskaner
#> <xy [124 x 2]>
#>       [,1]    [,2]   
#>  [1,] 442.184  10.490
#>  [2,] 421.408   7.433
#>  [3,] 411.515   5.977
#>  [4,] 392.717   3.211
#>  [5,] 382.824   1.755
#>  [6,] ...     ...    
#>  [7,] 535.067  18.094
#>  [8,] 514.145  16.026
#>  [9,] 503.960  16.549
#> [10,] 482.747  16.460
#> [11,] 472.854  15.004
#> 
#> $grimbergen
#> <xy [126 x 2]>
#>       [,1]    [,2]   
#>  [1,] 405.989 -12.383
#>  [2,] 395.869 -11.118
#>  [3,] 374.925 -12.652
#>  [4,] 363.955 -13.455
#>  [5,] 353.981 -14.186
#>  [6,] ...     ...    
#>  [7,] 491.104 -38.236
#>  [8,] 470.135 -25.734
#>  [9,] 458.726 -20.553
#> [10,] 448.461 -17.294
#> [11,] 427.078 -12.844
#> 
#> $guiness
#> <xy [183 x 2]>
#>       [,1]    [,2]   
#>  [1,] 390.347 -24.811
#>  [2,] 382.398 -25.720
#>  [3,] 374.450 -26.629
#>  [4,] 365.508 -27.652
#>  [5,] 349.612 -29.469
#>  [6,] ...     ...    
#>  [7,] 447.432 -22.309
#>  [8,] 438.263 -21.345
#>  [9,] 422.906 -19.075
#> [10,] 415.071 -20.977
#> [11,] 406.243 -22.993
#> 
#> $hoegardeen
#> <xy [193 x 2]>
#>       [,1]    [,2]   
#>  [1,] 544.873  28.519
#>  [2,] 531.724  28.826
#>  [3,] 519.824  27.278
#>  [4,] 506.933  25.601
#>  [5,] 494.041  23.924
#>  [6,] ...     ...    
#>  [7,] 621.310  22.327
#>  [8,] 607.903  24.617
#>  [9,] 595.616  26.044
#> [10,] 582.209  28.334
#> [11,] 569.189  27.648
#> 
#> $jupiler
#> <xy [156 x 2]>
#>       [,1]    [,2]   
#>  [1,] 516.548 -37.789
#>  [2,] 502.523 -37.256
#>  [3,] 489.530 -37.690
#>  [4,] 475.538 -38.157
#>  [5,] 461.545 -38.624
#>  [6,] ...     ...    
#>  [7,] 599.136 -54.042
#>  [8,] 584.977 -49.512
#>  [9,] 571.885 -46.948
#> [10,] 557.759 -43.417
#> [11,] 543.667 -40.886
#> 
#> $kingfisher
#> <xy [182 x 2]>
#>       [,1]    [,2]   
#>  [1,] 390.423   8.191
#>  [2,] 380.630   6.167
#>  [3,] 371.816   4.345
#>  [4,] 362.023   2.321
#>  [5,] 352.230   0.297
#>  [6,] ...     ...    
#>  [7,] 449.246  10.137
#>  [8,] 439.825  11.254
#>  [9,] 429.628  11.188
#> [10,] 419.227  12.102
#> [11,] 409.434  10.078
#> 
#> $latrappe
#> <xy [136 x 2]>
#>       [,1]    [,2]   
#>  [1,] 380.079  86.815
#>  [2,] 368.297  84.327
#>  [3,] 355.845  80.593
#>  [4,] 344.351  77.147
#>  [5,] 331.898  73.413
#>  [6,] ...     ...    
#>  [7,] 452.494 106.439
#>  [8,] 439.180 105.579
#>  [9,] 427.973 101.175
#> [10,] 415.520  97.441
#> [11,] 404.026  93.995
#> 
#> $lindemanskriek
#> <xy [176 x 2]>
#>       [,1]    [,2]   
#>  [1,] 430.276  28.133
#>  [2,] 422.443  26.505
#>  [3,] 406.740  28.348
#>  [4,] 397.725  27.496
#>  [5,] 389.892  25.869
#>  [6,] ...     ...    
#>  [7,] 491.501  23.492
#>  [8,] 483.261  23.823
#>  [9,] 473.839  24.929
#> [10,] 465.600  25.259
#> [11,] 447.938  26.696
#> 
#> $nicechouffe
#> <xy [146 x 2]>
#>       [,1]    [,2]   
#>  [1,] 370.035  10.901
#>  [2,] 362.040   9.868
#>  [3,] 344.579   9.489
#>  [4,] 335.865   7.238
#>  [5,] 327.870   6.205
#>  [6,] ...     ...    
#>  [7,] 428.725  11.603
#>  [8,] 420.229  12.506
#>  [9,] 411.015  12.192
#> [10,] 403.737  12.377
#> [11,] 387.245  12.248
#> 
#> $pecheresse
#> <xy [129 x 2]>
#>       [,1]    [,2]   
#>  [1,] 497.480 -38.831
#>  [2,] 478.405 -37.758
#>  [3,] 469.416 -38.196
#>  [4,] 449.391 -38.171
#>  [5,] 430.316 -37.098
#>  [6,] ...     ...    
#>  [7,] 583.499 -57.666
#>  [8,] 573.364 -55.157
#>  [9,] 555.142 -51.039
#> [10,] 535.922 -46.969
#> [11,] 526.835 -45.410
#> 
#> $sierranevada
#> <xy [176 x 2]>
#>       [,1]    [,2]   
#>  [1,] 349.562 -23.507
#>  [2,] 337.631 -24.799
#>  [3,] 337.631 -24.799
#>  [4,] 324.707 -26.198
#>  [5,] 312.777 -27.490
#>  [6,] ...     ...    
#>  [7,] 411.417 -18.821
#>  [8,] 398.277 -18.232
#>  [9,] 386.131 -17.536
#> [10,] 374.416 -20.816
#> [11,] 374.416 -20.816
#> 
#> $tanglefoot
#> <xy [174 x 2]>
#>       [,1]    [,2]   
#>  [1,] 369.924  12.219
#>  [2,] 362.030  10.920
#>  [3,] 354.136   9.622
#>  [4,] 338.348   7.024
#>  [5,] 330.617   4.739
#>  [6,] ...     ...    
#>  [7,] 425.830  17.364
#>  [8,] 417.449  19.025
#>  [9,] 409.393  18.713
#> [10,] 393.443  17.102
#> [11,] 385.549  15.804
#> 
#> $tauro
#> <xy [174 x 2]>
#>       [,1]    [,2]   
#>  [1,] 516.327 -42.043
#>  [2,] 504.277 -40.368
#>  [3,] 492.281 -40.693
#>  [4,] 479.286 -41.045
#>  [5,] 467.291 -41.370
#>  [6,] ...     ...    
#>  [7,] 588.706 -55.089
#>  [8,] 576.630 -52.415
#>  [9,] 564.499 -47.741
#> [10,] 552.449 -46.067
#> [11,] 539.400 -44.419
#> 
#> $westmalle
#> <xy [141 x 2]>
#>       [,1]    [,2]   
#>  [1,] 399.530 -22.624
#>  [2,] 391.587 -23.576
#>  [3,] 374.351 -22.620
#>  [4,] 366.407 -23.572
#>  [5,] 349.409 -24.601
#>  [6,] ...     ...    
#>  [7,] 467.958 -30.538
#>  [8,] 458.665 -28.631
#>  [9,] 442.421 -27.556
#> [10,] 433.009 -24.655
#> [11,] 416.885 -24.573
#> 
#> $amrut
#> <xy [191 x 2]>
#>       [,1]    [,2]   
#>  [1,] 443.803  27.725
#>  [2,] 433.985  25.828
#>  [3,] 424.167  23.930
#>  [4,] 414.348  22.032
#>  [5,] 404.530  20.135
#>  [6,] ...     ...    
#>  [7,] 502.333  41.075
#>  [8,] 492.895  37.214
#>  [9,] 483.076  35.316
#> [10,] 473.258  33.419
#> [11,] 463.440  31.521
#> 
#> $ballantines
#> <xy [146 x 2]>
#>       [,1]    [,2]   
#>  [1,] 357.460  33.394
#>  [2,] 341.777  30.228
#>  [3,] 333.935  28.645
#>  [4,] 319.231  25.677
#>  [5,] 311.390  24.094
#>  [6,] ...     ...    
#>  [7,] 427.056  47.443
#>  [8,] 411.373  44.277
#>  [9,] 403.531  42.694
#> [10,] 387.847  39.528
#> [11,] 380.986  38.143
#> 
#> $bushmills
#> <xy [165 x 2]>
#>       [,1]    [,2]   
#>  [1,] 460.894  26.396
#>  [2,] 446.236  23.213
#>  [3,] 430.600  19.818
#>  [4,] 430.600  19.818
#>  [5,] 415.941  16.636
#>  [6,] ...     ...    
#>  [7,] 535.716  44.689
#>  [8,] 521.058  41.506
#>  [9,] 505.422  38.111
#> [10,] 505.422  38.111
#> [11,] 490.764  34.928
#> 
#> $chivas
#> <xy [164 x 2]>
#>       [,1]    [,2]   
#>  [1,] 434.470  57.389
#>  [2,] 426.230  57.705
#>  [3,] 409.182  56.173
#>  [4,] 401.352  54.532
#>  [5,] 385.692  51.248
#>  [6,] ...     ...    
#>  [7,] 507.938  23.751
#>  [8,] 499.445  30.144
#>  [9,] 479.523  42.315
#> [10,] 470.462  46.545
#> [11,] 451.566  53.822
#> 
#> $dalmore
#> <xy [155 x 2]>
#>       [,1]    [,2]   
#>  [1,] 367.659  71.914
#>  [2,] 354.685  72.724
#>  [3,] 341.417  71.317
#>  [4,] 329.422  69.292
#>  [5,] 318.079  65.376
#>  [6,] ...     ...    
#>  [7,] 439.746  43.904
#>  [8,] 439.746  43.904
#>  [9,] 425.106  52.603
#> [10,] 410.792  60.356
#> [11,] 396.186  65.893
#> 
#> $famousgrouse
#> <xy [169 x 2]>
#>       [,1]    [,2]   
#>  [1,] 325.734 -40.836
#>  [2,] 315.898 -42.643
#>  [3,] 307.046 -44.268
#>  [4,] 297.211 -46.074
#>  [5,] 297.211 -46.074
#>  [6,] ...     ...    
#>  [7,] 372.583 -30.199
#>  [8,] 362.747 -32.006
#>  [9,] 362.747 -32.006
#> [10,] 353.895 -33.631
#> [11,] 344.060 -35.437
#> 
#> $glendronach
#> <xy [197 x 2]>
#>       [,1]    [,2]   
#>  [1,] 439.552  36.717
#>  [2,] 427.924  33.753
#>  [3,] 416.543  29.820
#>  [4,] 416.543  29.820
#>  [5,] 404.915  26.855
#>  [6,] ...     ...    
#>  [7,] 497.445  52.508
#>  [8,] 485.817  49.543
#>  [9,] 474.436  45.610
#> [10,] 474.436  45.610
#> [11,] 462.808  42.646
#> 
#> $glenmorangie
#> <xy [179 x 2]>
#>       [,1]    [,2]   
#>  [1,] 518.629  46.448
#>  [2,] 502.129  42.235
#>  [3,] 502.129  42.235
#>  [4,] 486.421  39.193
#>  [5,] 469.921  34.979
#>  [6,] ...     ...    
#>  [7,] 599.862  53.012
#>  [8,] 584.375  54.088
#>  [9,] 566.925  54.783
#> [10,] 550.045  52.532
#> [11,] 550.045  52.532
#> 
#> $highlandpark
#> <xy [169 x 2]>
#>       [,1]    [,2]   
#>  [1,] 372.202  29.507
#>  [2,] 358.459  26.838
#>  [3,] 358.459  26.838
#>  [4,] 344.716  24.169
#>  [5,] 330.972  21.499
#>  [6,] ...     ...    
#>  [7,] 440.727  43.836
#>  [8,] 427.175  40.185
#>  [9,] 413.432  37.515
#> [10,] 399.688  34.846
#> [11,] 399.688  34.846
#> 
#> $jackdaniels
#> <xy [150 x 2]>
#>       [,1]    [,2]   
#>  [1,] 417.896  26.975
#>  [2,] 405.197  24.195
#>  [3,] 392.498  21.416
#>  [4,] 379.798  18.636
#>  [5,] 367.099  15.857
#>  [6,] ...     ...    
#>  [7,] 496.566  37.028
#>  [8,] 482.462  35.988
#>  [9,] 469.121  36.139
#> [10,] 456.208  34.337
#> [11,] 443.723  30.580
#> 
#> $jb
#> <xy [174 x 2]>
#>       [,1]    [,2]   
#>  [1,] 530.710  46.441
#>  [2,] 519.865  44.601
#>  [3,] 509.839  43.914
#>  [4,] 488.149  40.233
#>  [5,] 477.471  37.407
#>  [6,] ...     ...    
#>  [7,] 604.486  59.974
#>  [8,] 593.306  60.106
#>  [9,] 583.782  56.461
#> [10,] 562.259  51.795
#> [11,] 551.414  49.954
#> 
#> $johnniewalker
#> <xy [168 x 2]>
#>       [,1]    [,2]   
#>  [1,] 200.132 -90.890
#>  [2,] 196.232 -91.777
#>  [3,] 192.331 -92.664
#>  [4,] 188.431 -93.551
#>  [5,] 180.852 -96.300
#>  [6,] ...     ...    
#>  [7,] 227.435 -84.682
#>  [8,] 223.535 -85.569
#>  [9,] 215.734 -87.343
#> [10,] 211.834 -88.230
#> [11,] 207.933 -89.117
#> 
#> $magallan
#> <xy [141 x 2]>
#>       [,1]    [,2]   
#>  [1,] 402.418 -41.864
#>  [2,] 387.479 -43.217
#>  [3,] 380.688 -45.841
#>  [4,] 366.745 -47.104
#>  [5,] 351.897 -49.453
#>  [6,] ...     ...    
#>  [7,] 466.882 -33.012
#>  [8,] 459.911 -33.643
#>  [9,] 445.968 -34.906
#> [10,] 431.210 -38.251
#> [11,] 424.238 -38.883
#> 
#> $makersmark
#> <xy [177 x 2]>
#>       [,1]    [,2]   
#>  [1,] 429.638  54.741
#>  [2,] 416.296  60.220
#>  [3,] 403.152  64.717
#>  [4,] 403.152  64.717
#>  [5,] 388.835  64.900
#>  [6,] ...     ...    
#>  [7,] 493.018  18.521
#>  [8,] 478.307  20.664
#>  [9,] 468.104  25.753
#> [10,] 468.104  25.753
#> [11,] 455.542  37.508
#> 
#> $oban
#> <xy [179 x 2]>
#>       [,1]    [,2]   
#>  [1,] 461.831 -32.208
#>  [2,] 452.868 -33.025
#>  [3,] 435.938 -34.568
#>  [4,] 427.971 -35.294
#>  [5,] 419.008 -36.111
#>  [6,] ...     ...    
#>  [7,] 521.401 -24.769
#>  [8,] 512.529 -26.582
#>  [9,] 504.562 -27.308
#> [10,] 495.600 -28.125
#> [11,] 478.670 -29.669
#> 
#> $oldpotrero
#> <xy [131 x 2]>
#>       [,1]    [,2]   
#>  [1,] 318.021  -0.645
#>  [2,] 308.740   3.078
#>  [3,] 299.459   6.801
#>  [4,] 280.967  10.124
#>  [5,] 271.497  10.691
#>  [6,] ...     ...    
#>  [7,] 384.333 -20.134
#>  [8,] 376.088 -20.274
#>  [9,] 366.100 -17.776
#> [10,] 347.796 -11.296
#> [11,] 337.549  -7.832
#> 
#> $redbreast
#> <xy [177 x 2]>
#>       [,1]    [,2]   
#>  [1,] 255.523  -4.674
#>  [2,] 250.140  -4.806
#>  [3,] 245.675  -4.544
#>  [4,] 235.302  -5.728
#>  [5,] 231.626  -7.305
#>  [6,] ...     ...    
#>  [7,] 293.869 -23.049
#>  [8,] 288.222 -20.030
#>  [9,] 282.575 -17.011
#> [10,] 272.595 -11.498
#> [11,] 266.948  -8.479
#> 
#> $tamdhu
#> <xy [176 x 2]>
#>       [,1]    [,2]   
#>  [1,] 552.327  45.162
#>  [2,] 540.501  43.130
#>  [3,] 527.688  40.929
#>  [4,] 515.861  38.898
#>  [5,] 504.035  36.866
#>  [6,] ...     ...    
#>  [7,] 623.766  60.477
#>  [8,] 611.600  60.417
#>  [9,] 599.943  57.400
#> [10,] 588.285  54.383
#> [11,] 576.628  51.365
#> 
#> $wildturkey
#> <xy [185 x 2]>
#>       [,1]    [,2]   
#>  [1,] 561.272  95.179
#>  [2,] 547.550  92.404
#>  [3,] 533.828  89.628
#>  [4,] 520.106  86.852
#>  [5,] 506.384  84.076
#>  [6,] ...     ...    
#>  [7,] 642.040 109.478
#>  [8,] 628.902 108.861
#>  [9,] 615.565 109.224
#> [10,] 601.843 106.448
#> [11,] 588.121 103.672
#> 
#> $yoichi
#> <xy [123 x 2]>
#>       [,1]    [,2]   
#>  [1,] 390.047   8.951
#>  [2,] 375.348   5.960
#>  [3,] 361.630   3.169
#>  [4,] 346.931   0.178
#>  [5,] 332.232  -2.813
#>  [6,] ...     ...    
#>  [7,] 461.382  24.487
#>  [8,] 454.523  23.091
#>  [9,] 439.824  20.100
#> [10,] 426.105  17.309
#> [11,] 411.606  13.338
#> 
#> attr(,"class")
#> [1] "out"  "coo"  "list"

# Works better after centering
shapes$cat %>% coo_center() %>% coo_untilt_x()
#> <xy [120 x 2]>
#>       [,1]   [,2]  
#>  [1,] 34.320  0.000
#>  [2,] 38.565 -5.829
#>  [3,] 39.949 -2.076
#>  [4,] 43.902  2.861
#>  [5,] 50.569  3.600
#>  [6,] ...    ...   
#>  [7,] 56.844 11.944
#>  [8,] 52.891  7.007
#>  [9,] 45.532  4.392
#> [10,] 38.519  2.715
#> [11,] 32.197  2.914