Skip to content

Instantly share code, notes, and snippets.

@hypercompetent
Created September 28, 2020 00:40
Show Gist options
  • Save hypercompetent/162a97f6afde5127946c9fd2b5952955 to your computer and use it in GitHub Desktop.
Save hypercompetent/162a97f6afde5127946c9fd2b5952955 to your computer and use it in GitHub Desktop.
library(rgl)
sl <- shapelist3d(cube3d(alpha = 1,
color = 'grey90',
specular = 'black',
lit = TRUE),
plot = FALSE)
create_next_level <- function(sl, level) {
scale <- 0.5
sla <- scale3d(sl, scale, scale, scale)
x <- 1.5^(level - 1)
multipliers <- rep(list(c(-1, 0, 1)), 3)
permutations <- expand.grid(multipliers)
too_many_zeros <- rowSums(permutations == 0) > 1
permutations <- permutations[!too_many_zeros,]
translation_list <- lapply(
1:nrow(permutations),
function(perm_row) {
translate3d(sla,
x*permutations[perm_row,1],
x*permutations[perm_row,2],
x*permutations[perm_row,3])
})
shapelist3d(translation_list,
plot = FALSE)
}
rgl::clear3d()
sl <- create_next_level(sl, level = 1)
sl <- create_next_level(sl, level = 2)
sl <- create_next_level(sl, level = 3)
shade3d(sl)
@hypercompetent
Copy link
Author

Trying to make a version of @coolbutuseless's Menger Sponge that doesn't explicitly list every combination.

Not sure it really ended up being more succinct, but I tried :)

Original tweet:
https://twitter.com/coolbutuseless/status/1310135325633777664

Blog post with code:
https://coolbutuseless.github.io/2020/09/27/a-level-3-menger-sponge-in-r/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment