--- title: "R Notebook" output: html_notebook --- ```{r} library(tidyverse) library(animation) ``` # Get some robots out ```{r} df.start <- tibble(point = 1:20) %>% mutate(startangle = point / max(point) * 2 * pi, x = 20 * cos(startangle), y = 20 * sin(startangle), direction = startangle - pi / 2) %>% # Turn the robots perpendicular / 90 degrees / pi/2 radians to their position on the circle select(-startangle) df.start %>% ggplot(aes(x, y, xend = x + 1 * cos(direction), yend = y + 1 * sin(direction))) + geom_segment(arrow = arrow(length = unit(0.2, 'cm'))) + coord_equal() ``` # Generate the full sequence ```{r} df <- df.start df.steps <- tibble() for (step in 1:360) { df <- df %>% mutate(x = x + 0.5 * cos(direction), # <- Change the stepsize here y = y + 0.5 * sin(direction), # <- Change the stepsize here direction = direction - (1 / 360) * pi * 2) # Turn one degree df.steps <- rbind(df.steps, df %>% mutate(step = step)) } ``` # Animation ```{r} animation_stepsize <- 4 saveGIF({ radius = 40 # max(df.steps$x) for(i in seq(1, 360, by = animation_stepsize)) { p <- df.steps %>% filter(step == i) %>% ggplot(aes(x, y, color = case_when(point == 1 ~ 'red', TRUE ~ 'black'), xend = x + 1 * cos(direction), yend = y + 1 * sin(direction))) + geom_segment(arrow = arrow(length = unit(0.2, 'cm'))) + #geom_segment(data = df.steps %>% # <- uncomment this to plot the red robot's path # filter(point %in% c(1))) + scale_color_identity() + coord_equal(xlim = c(-radius, radius), ylim = c(-radius, radius)) print(p) } }, outdir = getwd(), interval = 3 / (360 / animation_stepsize)) ``` # The paths of the robots, making a beautiful donut shape ```{r} df.steps %>% ggplot(aes(x, y, color = case_when(point == 1 ~ 'red', TRUE ~ 'black'), xend = x + 1 * cos(direction), yend = y + 1 * sin(direction))) + geom_segment() + scale_color_identity() + coord_equal() ``` # The radius of the circle over time ```{r} df.steps %>% mutate(r = sqrt(x*x + y * y)) %>% group_by(step) %>% summarize(r = max(r)) %>% ggplot(aes(step, r)) + geom_line() ```