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)