Chipmunk
This demo:
Chipmunk
objectlibrary(chipmunkcore) library(ggplot2) set.seed(1) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Initialize a simulation space #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cm <- Chipmunk$new() #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Add fixed segments #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cm$add_static_segment(-20, 10, -5, 0) cm$add_static_segment( 20, 10, 5, 0) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Fetch all the segments. Use for plotting #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ segments_df <- cm$get_static_segments() #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Add some circles #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (i in 1:10) { cm$add_circle( x = runif(1, -20, 20), y = runif(1, 10, 50), vx = 10 * rnorm(1), vy = 10 * rnorm(1) ) } #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Get the current positions of the circles as a data.frame #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ circles <- cm$get_circles() circles
#> idx x y r
#> 1 1 -9.3796535 24.88496 1
#> 2 2 17.7870107 36.43191 1
#> 3 3 7.4809139 25.36415 1
#> 4 4 -4.7985928 41.09781 1
#> 5 5 -9.3111733 25.44456 1
#> 6 6 -0.7167954 33.98263 1
#> 7 7 11.7695944 14.31775 1
#> 8 8 11.3173105 32.12145 1
#> 9 9 9.2925495 37.70926 1
#> 10 10 -17.1728381 13.97865 1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Advance the simulation #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cm$advance(10) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Show me the circles in their new locations #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ circles <- cm$get_circles() circles
#> idx x y r
#> 1 1 -9.1697635 23.52691 1
#> 2 2 18.1165185 35.16144 1
#> 3 3 8.2192386 25.48993 1
#> 4 4 -3.2868117 41.03765 1
#> 5 5 -11.5521198 26.19191 1
#> 6 6 -0.7329856 34.47647 1
#> 7 7 12.3634958 14.78672 1
#> 8 8 11.3918755 29.68210 1
#> 9 9 9.2364208 37.10347 1
#> 10 10 -17.6509882 13.94659 1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Plot everything #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ggplot(circles) + geom_point(aes(x, y, colour = as.factor(idx)), size = 5) + geom_segment(data = segments_df, aes(x = x1, y = y1, xend = x2, yend = y2)) + coord_fixed(xlim=c(-25, 25), ylim = c(0, 50)) + theme_minimal() + theme(legend.position = 'none')
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Advance the simulation #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ cm$advance(10) #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Show me the circles in their new locations #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ circles <- cm$get_circles() circles
#> idx x y r
#> 1 1 -8.9861201 21.24129 1
#> 2 2 18.4460263 32.89097 1
#> 3 3 8.9575633 24.61571 1
#> 4 4 -1.7750305 39.97750 1
#> 5 5 -13.7668197 25.86684 1
#> 6 6 -0.7491759 33.97031 1
#> 7 7 12.9573971 14.25570 1
#> 8 8 11.4664405 26.24275 1
#> 9 9 9.1802921 35.49767 1
#> 10 10 -18.1291382 12.91453 1
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Plot everything #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ggplot(circles) + geom_point(aes(x, y, colour = as.factor(idx)), size = 5) + geom_segment(data = segments_df, aes(x = x1, y = y1, xend = x2, yend = y2)) + coord_fixed(xlim=c(-25, 25), ylim = c(0, 50)) + theme_minimal() + theme(legend.position = 'none')