This function allows you to calculate linear transformations of coordinates
in a long_grid object. You can either pass in a transformation matrix or a
trans object as produced by ggforce::linear_trans(...)
. The latter makes it
easy to stack multiple transformations into one, but require the ggforce
package.
trans_affine(x, y, ...)
rotate(angle = 0)
stretch(x0 = 0, y0 = 0)
shear(x0 = 0, y0 = 0)
translate(x0 = 0, y0 = 0)
reflect(x0 = 0, y0 = 0)
The coordinates to transform
A sequence of transformations
An angle in radians
the transformation magnitude in the x-direction
the transformation magnitude in the x-direction
The following transformation matrix constructors are supplied, but you can
also provide your own 3x3 matrices to translate()
rotate()
: Rotate coordinates by angle
(in radians) around the center
counter-clockwise.
stretch()
: Stretches the x and/or y dimension by multiplying it with
x0
/y0
.
shear()
: Shears the x and/or y dimension by x0
/y0
.
translate()
: Moves coordinates by x0
/y0
.
reflect()
: Reflects coordinates through the line that goes through 0, 0
and x0, y0
.
grid <- long_grid(seq(1, 10, length.out = 1000), seq(1, 10, length.out = 1000))
grid$trans <- trans_affine(grid$x, grid$y, rotate(pi/3), shear(-2), rotate(-pi/3))
grid$chess <- gen_checkerboard(grid$trans$x, grid$trans$y)
plot(grid, chess)