library(gifski)
## Warning: package 'gifski' was built under R version 4.3.2
x <- c(rep(0,500), seq(0,0, length.out = 1000), # vertical line: C
rep(0,500), seq(0,1, length.out = 1000), # 1st horizontal line: C
rep(0,500), seq(0,1, length.out = 1000), # 2nd horizontal line: C
rep(0,500), seq(2,2, length.out = 1000), # 1st vertical line: N
rep(0,500), seq(3,3, length.out = 1000), # diagonal: N
rep(0,500), seq(2,3, length.out = 1000)) # 2nd vertical line: N
y <- c(rep(0,500), seq(-1,1, length.out=1000), # vertical line: C
rep(0,500), seq(1,1, length.out = 1000), # 1st horizontal line: C
rep(0,500), seq(-1,-1, length.out = 1000), # 2nd horizontal line: C
rep(0,500), seq(-1,1, length.out=1000), # vertical line: N
rep(0,500), seq(-1,1, length.out = 1000), # first diagonal: N
rep(0,500), seq(1,-1, length.out = 1000)) # 2nd vertical line: N
z = rbind(x, y)
plot(y~x, xlim=c(-1,4), ylim=c(-2,2), col = "purple",
main = "My initials plot")

# 1) shear
for (val in seq(-4,4,length.out=40)) {
shear_matrix <- matrix(c(2, 0, val, 1), nrow=2, ncol=2)
shear_m <- apply(z, 2, function(x) x %*% shear_matrix)
plot(shear_m[2,] ~ shear_m[1,], xlim=c(-5, 5), ylim=c(-5, 5), col = "darkblue")}








































# 2) scaling
for (val in seq(-4,4,length.out=40)) {
scale_matrix <- matrix(c(val, 0, 0, val), nrow=2, ncol=2)
scale_m <- apply(z, 2, function(x) x %*% scale_matrix)
plot(scale_m[2,] ~ scale_m[1,], xlim=c(-5,5), ylim=c(-5,5), col = "lightblue")}








































#3) rotation
for (val in seq(-4,4,length.out=40)) {
rotate_z <- rbind(z, numeric(2000))
rotate_matrix <- matrix(c(cos(val), sin(val), 0, -sin(val), cos(val), 0, 0, 0, 1), nrow=3, ncol=3)
rotate_m <- apply(rotate_z, 2, function(x) x %*% rotate_matrix)
plot(rotate_m[2,] ~ rotate_m[1,], xlim=c(-5,5), ylim=c(-5,5), col = "green")}
## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)
## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)


# 4) projection in animated fashion
for (val in seq(-4,4,length.out=40)) {
projection_z <- rbind(z, numeric(2000))
projection_matrix <- matrix(c(val,0,0,0,1,0,0,0,1), nrow=3, ncol=3)
projection_m <- apply(projection_z, 2, function(x) x %*% projection_matrix)
plot(projection_m[2,] ~ projection_m[1,], xlim=c(-5,5), ylim=c(-5,5), col = "gray")}
## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)
## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

## Warning in rbind(z, numeric(2000)): number of columns of result is not a
## multiple of vector length (arg 2)

