Apply an affine transformation (rotation, scaling, shearing, etc.) to a shape using a 2x2 transformation matrix.
Value
If
xis a single matrix: returns the transformed matrixIf
xis a list: returns a list of transformed matricesIf
xis a tibble: returns the tibble with specified coo columns transformed
Details
The transformation is applied as: x_new = x %*% mat
Common transformation matrices:
Rotation by angle θ:
matrix(c(cos(θ), sin(θ), -sin(θ), cos(θ)), nrow = 2)Scaling by sx, sy:
matrix(c(sx, 0, 0, sy), nrow = 2)Shear in x:
matrix(c(1, 0, k, 1), nrow = 2)
See also
coo_rotate() for rotation; coo_shear_x() for shearing; coo_flip_xaxis() for flipping
Examples
# Rotation matrix
rot_mat <- matrix(c(cos(pi/4), sin(pi/4), -sin(pi/4), cos(pi/4)), nrow = 2)
coo_affine(shapes$cat, rot_mat)
#> <xy [120 x 2]>
#> [,1] [,2]
#> [1,] 185.262 -97.581
#> [2,] 178.191 -98.995
#> [3,] 181.019 -101.823
#> [4,] 183.848 -107.480
#> [5,] 181.726 -113.844
#> [6,] ... ...
#> [7,] 186.676 -123.037
#> [8,] 183.848 -117.380
#> [9,] 184.555 -109.602
#> [10,] 185.969 -102.530
#> [11,] 188.798 -96.874
# Scaling matrix
scale_mat <- matrix(c(2, 0, 0, 2), nrow = 2)
coo_affine(bot$coo, scale_mat)
#> $brahma
#> <xy [138 x 2]>
#> [,1] [,2]
#> [1,] 74 1122
#> [2,] 80 1080
#> [3,] 80 1058
#> [4,] 86 1016
#> [5,] 92 974
#> [6,] ... ...
#> [7,] 68 1312
#> [8,] 66 1290
#> [9,] 66 1248
#> [10,] 68 1206
#> [11,] 70 1186
#>
#> $caney
#> <xy [168 x 2]>
#> [,1] [,2]
#> [1,] 106 1070
#> [2,] 106 1050
#> [3,] 108 1010
#> [4,] 106 990
#> [5,] 108 970
#> [6,] ... ...
#> [7,] 152 1232
#> [8,] 134 1192
#> [9,] 124 1170
#> [10,] 118 1150
#> [11,] 110 1110
#>
#> $chimay
#> <xy [189 x 2]>
#> [,1] [,2]
#> [1,] 98 666
#> [2,] 98 650
#> [3,] 98 636
#> [4,] 100 620
#> [5,] 100 604
#> [6,] ... ...
#> [7,] 118 758
#> [8,] 108 742
#> [9,] 102 728
#> [10,] 98 712
#> [11,] 96 696
#>
#> $corona
#> <xy [129 x 2]>
#> [,1] [,2]
#> [1,] 182 852
#> [2,] 182 832
#> [3,] 180 790
#> [4,] 182 770
#> [5,] 182 748
#> [6,] ... ...
#> [7,] 236 1012
#> [8,] 220 972
#> [9,] 210 954
#> [10,] 202 932
#> [11,] 188 894
#>
#> $deusventrue
#> <xy [152 x 2]>
#> [,1] [,2]
#> [1,] 148 962
#> [2,] 140 944
#> [3,] 124 908
#> [4,] 118 890
#> [5,] 104 850
#> [6,] ... ...
#> [7,] 200 1110
#> [8,] 194 1090
#> [9,] 180 1054
#> [10,] 174 1036
#> [11,] 164 1000
#>
#> $duvel
#> <xy [161 x 2]>
#> [,1] [,2]
#> [1,] 122 630
#> [2,] 122 608
#> [3,] 122 586
#> [4,] 122 586
#> [5,] 122 564
#> [6,] ... ...
#> [7,] 148 738
#> [8,] 138 716
#> [9,] 130 696
#> [10,] 130 696
#> [11,] 126 674
#>
#> $franziskaner
#> <xy [124 x 2]>
#> [,1] [,2]
#> [1,] 108 878
#> [2,] 108 836
#> [3,] 108 816
#> [4,] 108 778
#> [5,] 108 758
#> [6,] ... ...
#> [7,] 120 1064
#> [8,] 118 1022
#> [9,] 114 1002
#> [10,] 108 960
#> [11,] 108 940
#>
#> $grimbergen
#> <xy [126 x 2]>
#> [,1] [,2]
#> [1,] 84 808
#> [2,] 80 788
#> [3,] 80 746
#> [4,] 80 724
#> [5,] 80 704
#> [6,] ... ...
#> [7,] 148 974
#> [8,] 120 934
#> [9,] 108 912
#> [10,] 100 892
#> [11,] 88 850
#>
#> $guiness
#> <xy [183 x 2]>
#> [,1] [,2]
#> [1,] 138 770
#> [2,] 138 754
#> [3,] 138 738
#> [4,] 138 720
#> [5,] 138 688
#> [6,] ... ...
#> [7,] 146 884
#> [8,] 142 866
#> [9,] 134 836
#> [10,] 136 820
#> [11,] 138 802
#>
#> $hoegardeen
#> <xy [193 x 2]>
#> [,1] [,2]
#> [1,] 84 1088
#> [2,] 80 1062
#> [3,] 80 1038
#> [4,] 80 1012
#> [5,] 80 986
#> [6,] ... ...
#> [7,] 116 1238
#> [8,] 108 1212
#> [9,] 102 1188
#> [10,] 94 1162
#> [11,] 92 1136
#>
#> $jupiler
#> <xy [156 x 2]>
#> [,1] [,2]
#> [1,] 110 1030
#> [2,] 108 1002
#> [3,] 108 976
#> [4,] 108 948
#> [5,] 108 920
#> [6,] ... ...
#> [7,] 148 1194
#> [8,] 138 1166
#> [9,] 132 1140
#> [10,] 124 1112
#> [11,] 118 1084
#>
#> $kingfisher
#> <xy [182 x 2]>
#> [,1] [,2]
#> [1,] 142 768
#> [2,] 142 748
#> [3,] 142 730
#> [4,] 142 710
#> [5,] 142 690
#> [6,] ... ...
#> [7,] 162 884
#> [8,] 156 866
#> [9,] 152 846
#> [10,] 146 826
#> [11,] 146 806
#>
#> $latrappe
#> <xy [136 x 2]>
#> [,1] [,2]
#> [1,] 52 778
#> [2,] 50 754
#> [3,] 50 728
#> [4,] 50 704
#> [5,] 50 678
#> [6,] ... ...
#> [7,] 56 928
#> [8,] 50 902
#> [9,] 52 878
#> [10,] 52 852
#> [11,] 52 828
#>
#> $lindemanskriek
#> <xy [176 x 2]>
#> [,1] [,2]
#> [1,] 120 854
#> [2,] 120 838
#> [3,] 110 808
#> [4,] 108 790
#> [5,] 108 774
#> [6,] ... ...
#> [7,] 154 972
#> [8,] 150 956
#> [9,] 144 938
#> [10,] 140 922
#> [11,] 130 888
#>
#> $nicechouffe
#> <xy [146 x 2]>
#> [,1] [,2]
#> [1,] 164 722
#> [2,] 162 706
#> [3,] 154 672
#> [4,] 154 654
#> [5,] 152 638
#> [6,] ... ...
#> [7,] 192 836
#> [8,] 186 820
#> [9,] 182 802
#> [10,] 178 788
#> [11,] 170 756
#>
#> $pecheresse
#> <xy [129 x 2]>
#> [,1] [,2]
#> [1,] 126 990
#> [2,] 122 952
#> [3,] 122 934
#> [4,] 120 894
#> [5,] 116 856
#> [6,] ... ...
#> [7,] 172 1160
#> [8,] 166 1140
#> [9,] 156 1104
#> [10,] 146 1066
#> [11,] 142 1048
#>
#> $sierranevada
#> <xy [176 x 2]>
#> [,1] [,2]
#> [1,] 122 690
#> [2,] 122 666
#> [3,] 122 666
#> [4,] 122 640
#> [5,] 122 616
#> [6,] ... ...
#> [7,] 126 814
#> [8,] 122 788
#> [9,] 118 764
#> [10,] 122 740
#> [11,] 122 740
#>
#> $tanglefoot
#> <xy [174 x 2]>
#> [,1] [,2]
#> [1,] 96 734
#> [2,] 96 718
#> [3,] 96 702
#> [4,] 96 670
#> [5,] 98 654
#> [6,] ... ...
#> [7,] 104 846
#> [8,] 98 830
#> [9,] 96 814
#> [10,] 94 782
#> [11,] 94 766
#>
#> $tauro
#> <xy [174 x 2]>
#> [,1] [,2]
#> [1,] 112 1030
#> [2,] 108 1006
#> [3,] 108 982
#> [4,] 108 956
#> [5,] 108 932
#> [6,] ... ...
#> [7,] 142 1174
#> [8,] 136 1150
#> [9,] 126 1126
#> [10,] 122 1102
#> [11,] 118 1076
#>
#> $westmalle
#> <xy [141 x 2]>
#> [,1] [,2]
#> [1,] 140 788
#> [2,] 140 772
#> [3,] 134 738
#> [4,] 134 722
#> [5,] 132 688
#> [6,] ... ...
#> [7,] 172 922
#> [8,] 166 904
#> [9,] 160 872
#> [10,] 152 854
#> [11,] 148 822
#>
#> $amrut
#> <xy [191 x 2]>
#> [,1] [,2]
#> [1,] 114 882
#> [2,] 114 862
#> [3,] 114 842
#> [4,] 114 822
#> [5,] 114 802
#> [6,] ... ...
#> [7,] 110 1002
#> [8,] 114 982
#> [9,] 114 962
#> [10,] 114 942
#> [11,] 114 922
#>
#> $ballantines
#> <xy [146 x 2]>
#> [,1] [,2]
#> [1,] 76 714
#> [2,] 76 682
#> [3,] 76 666
#> [4,] 76 636
#> [5,] 76 620
#> [6,] ... ...
#> [7,] 76 856
#> [8,] 76 824
#> [9,] 76 808
#> [10,] 76 776
#> [11,] 76 762
#>
#> $bushmills
#> <xy [165 x 2]>
#> [,1] [,2]
#> [1,] 144 912
#> [2,] 144 882
#> [3,] 144 850
#> [4,] 144 850
#> [5,] 144 820
#> [6,] ... ...
#> [7,] 140 1066
#> [8,] 140 1036
#> [9,] 140 1004
#> [10,] 140 1004
#> [11,] 140 974
#>
#> $chivas
#> <xy [164 x 2]>
#> [,1] [,2]
#> [1,] 66 874
#> [2,] 62 858
#> [3,] 58 824
#> [4,] 58 808
#> [5,] 58 776
#> [6,] ... ...
#> [7,] 162 1004
#> [8,] 146 990
#> [9,] 114 956
#> [10,] 102 940
#> [11,] 80 906
#>
#> $dalmore
#> <xy [155 x 2]>
#> [,1] [,2]
#> [1,] 104 742
#> [2,] 94 718
#> [3,] 88 692
#> [4,] 84 668
#> [5,] 84 644
#> [6,] ... ...
#> [7,] 204 860
#> [8,] 204 860
#> [9,] 178 838
#> [10,] 154 816
#> [11,] 134 792
#>
#> $famousgrouse
#> <xy [169 x 2]>
#> [,1] [,2]
#> [1,] 198 626
#> [2,] 198 606
#> [3,] 198 588
#> [4,] 198 568
#> [5,] 198 568
#> [6,] ... ...
#> [7,] 194 722
#> [8,] 194 702
#> [9,] 194 702
#> [10,] 194 684
#> [11,] 194 664
#>
#> $glendronach
#> <xy [197 x 2]>
#> [,1] [,2]
#> [1,] 146 870
#> [2,] 146 846
#> [3,] 148 822
#> [4,] 148 822
#> [5,] 148 798
#> [6,] ... ...
#> [7,] 144 990
#> [8,] 144 966
#> [9,] 146 942
#> [10,] 146 942
#> [11,] 146 918
#>
#> $glenmorangie
#> <xy [179 x 2]>
#> [,1] [,2]
#> [1,] 106 1036
#> [2,] 108 1002
#> [3,] 108 1002
#> [4,] 108 970
#> [5,] 110 936
#> [6,] ... ...
#> [7,] 124 1198
#> [8,] 116 1168
#> [9,] 108 1134
#> [10,] 106 1100
#> [11,] 106 1100
#>
#> $highlandpark
#> <xy [169 x 2]>
#> [,1] [,2]
#> [1,] 84 742
#> [2,] 84 714
#> [3,] 84 714
#> [4,] 84 686
#> [5,] 84 658
#> [6,] ... ...
#> [7,] 82 882
#> [8,] 84 854
#> [9,] 84 826
#> [10,] 84 798
#> [11,] 84 798
#>
#> $jackdaniels
#> <xy [150 x 2]>
#> [,1] [,2]
#> [1,] 126 828
#> [2,] 126 802
#> [3,] 126 776
#> [4,] 126 750
#> [5,] 126 724
#> [6,] ... ...
#> [7,] 140 986
#> [8,] 136 958
#> [9,] 130 932
#> [10,] 128 906
#> [11,] 130 880
#>
#> $jb
#> <xy [174 x 2]>
#> [,1] [,2]
#> [1,] 86 1062
#> [2,] 86 1040
#> [3,] 84 1020
#> [4,] 84 976
#> [5,] 86 954
#> [6,] ... ...
#> [7,] 84 1212
#> [8,] 80 1190
#> [9,] 84 1170
#> [10,] 86 1126
#> [11,] 86 1104
#>
#> $johnniewalker
#> <xy [168 x 2]>
#> [,1] [,2]
#> [1,] 266 350
#> [2,] 266 342
#> [3,] 266 334
#> [4,] 266 326
#> [5,] 268 310
#> [6,] ... ...
#> [7,] 266 406
#> [8,] 266 398
#> [9,] 266 382
#> [10,] 266 374
#> [11,] 266 366
#>
#> $magallan
#> <xy [141 x 2]>
#> [,1] [,2]
#> [1,] 156 794
#> [2,] 156 764
#> [3,] 160 750
#> [4,] 160 722
#> [5,] 162 692
#> [6,] ... ...
#> [7,] 150 924
#> [8,] 150 910
#> [9,] 150 882
#> [10,] 154 852
#> [11,] 154 838
#>
#> $makersmark
#> <xy [177 x 2]>
#> [,1] [,2]
#> [1,] 62 864
#> [2,] 46 840
#> [3,] 32 816
#> [4,] 32 816
#> [5,] 26 788
#> [6,] ... ...
#> [7,] 158 974
#> [8,] 148 946
#> [9,] 134 928
#> [10,] 134 928
#> [11,] 106 908
#>
#> $oban
#> <xy [179 x 2]>
#> [,1] [,2]
#> [1,] 148 914
#> [2,] 148 896
#> [3,] 148 862
#> [4,] 148 846
#> [5,] 148 828
#> [6,] ... ...
#> [7,] 144 1034
#> [8,] 146 1016
#> [9,] 146 1000
#> [10,] 146 982
#> [11,] 146 948
#>
#> $oldpotrero
#> <xy [131 x 2]>
#> [,1] [,2]
#> [1,] 166 614
#> [2,] 154 598
#> [3,] 142 582
#> [4,] 126 548
#> [5,] 120 530
#> [6,] ... ...
#> [7,] 238 732
#> [8,] 234 716
#> [9,] 224 698
#> [10,] 202 666
#> [11,] 190 648
#>
#> $redbreast
#> <xy [177 x 2]>
#> [,1] [,2]
#> [1,] 210 466
#> [2,] 206 456
#> [3,] 202 448
#> [4,] 196 428
#> [5,] 196 420
#> [6,] ... ...
#> [7,] 274 522
#> [8,] 264 514
#> [9,] 254 506
#> [10,] 236 492
#> [11,] 226 484
#>
#> $tamdhu
#> <xy [176 x 2]>
#> [,1] [,2]
#> [1,] 98 1104
#> [2,] 98 1080
#> [3,] 98 1054
#> [4,] 98 1030
#> [5,] 98 1006
#> [6,] ... ...
#> [7,] 92 1250
#> [8,] 88 1226
#> [9,] 90 1202
#> [10,] 92 1178
#> [11,] 94 1154
#>
#> $wildturkey
#> <xy [185 x 2]>
#> [,1] [,2]
#> [1,] 36 1138
#> [2,] 36 1110
#> [3,] 36 1082
#> [4,] 36 1054
#> [5,] 36 1026
#> [6,] ... ...
#> [7,] 40 1302
#> [8,] 36 1276
#> [9,] 30 1250
#> [10,] 30 1222
#> [11,] 30 1194
#>
#> $yoichi
#> <xy [123 x 2]>
#> [,1] [,2]
#> [1,] 138 768
#> [2,] 138 738
#> [3,] 138 710
#> [4,] 138 680
#> [5,] 138 650
#> [6,] ... ...
#> [7,] 136 914
#> [8,] 136 900
#> [9,] 136 870
#> [10,] 136 842
#> [11,] 138 812
#>
#> attr(,"class")
#> [1] "out" "coo" "list"
