Guest User

Untitled

a guest
Feb 20th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.98 KB | None | 0 0
  1. library(rgl)
  2.  
  3. # vertices ####
  4. phi <- (1+sqrt(5))/2
  5. a <- 1/sqrt(3)
  6. b <- a/phi
  7. c <- a*phi
  8. vertices <-
  9. rbind(
  10. c( a, a, a),
  11. c( a, a, -a),
  12. c( a, -a, a),
  13. c(-a, -a, a),
  14. c(-a, a, -a),
  15. c(-a, a, a),
  16. c( 0, b, -c),
  17. c( 0, -b, -c),
  18. c( 0, -b, c),
  19. c( c, 0, -b),
  20. c(-c, 0, -b),
  21. c(-c, 0, b),
  22. c( b, c, 0),
  23. c( b, -c, 0),
  24. c(-b, -c, 0),
  25. c(-b, c, 0),
  26. c( 0, b, c),
  27. c( a, -a, -a),
  28. c( c, 0, b),
  29. c(-a, -a, -a)
  30. )
  31.  
  32. # tetrahedra vertices indices ####
  33. alltetraIdxs <-
  34. rbind(
  35. c( 1,13,16),c(13,10,16),c(13, 1,10),c( 1,16,10),
  36. c( 3, 0,17),c( 0, 4,17),c( 3,17, 4),c( 0, 3, 4),
  37. c(14, 5,18),c( 5, 6,18),c( 6,14,18),c( 5,14, 6),
  38. c(11,12, 2),c(12, 7, 2),c(12,11, 7),c( 2, 7,11),
  39. c( 9,15,19),c(15, 8,19),c(15, 9, 8),c( 8, 9,19),
  40. c( 8,12,17),c( 8,10,12),c(10,17,12),c(10, 8,17),
  41. c( 1, 2, 5),c( 1,19, 2),c(19, 1, 5),c(19, 5, 2),
  42. c(18, 3,15),c(18, 7, 3),c(18,15, 7),c( 7,15, 3),
  43. c( 0,13,11),c( 0, 6,13),c( 6,11,13),c(11, 6, 0),
  44. c( 4,14, 9),c( 4,16,14),c(16, 9,14),c( 4, 9,16)
  45. ) + 1
  46. tetraIdxs <- lapply(split(1:40, gl(10,4)),
  47. function(is) alltetraIdxs[is,])
  48.  
  49. # tetrahedra vertices ####
  50. tetrahedra <- lapply(tetraIdxs,
  51. function(t) plyr::alply(t, 1,
  52. function(idxs) vertices[idxs,]))
  53.  
  54. # rgl - compound of tetrahedra ####
  55. colors <- rainbow(10)
  56. lapply(1:10,
  57. function(i) lapply(tetrahedra[[i]],
  58. function(face) triangles3d(face, color=colors[i])))
  59.  
  60.  
  61. # edges vertices indices ####
  62. alledgesIdxs <-
  63. rbind(
  64. c( 1,13),c(13,16),c(16, 1),c(13,10),c(10,16),c( 1,10),
  65. c( 3, 0),c( 0,17),c(17, 3),c( 0, 4),c( 4,17),c( 4, 3),
  66. c(14, 5),c( 5,18),c(18,14),c( 5, 6),c( 6,18),c( 6,14),
  67. c(11,12),c(12, 2),c( 2,11),c(12, 7),c( 7, 2),c(11, 7),
  68. c( 9,15),c(15,19),c(19, 9),c(15, 8),c( 8,19),c( 9, 8),
  69. c( 8,12),c(12,17),c(17, 8),c( 8,10),c(10,12),c(10,17),
  70. c( 1, 2),c( 2, 5),c( 5, 1),c( 1,19),c(19, 2),c( 5,19),
  71. c(18, 3),c( 3,15),c(15,18),c(18, 7),c( 7, 3),c(15, 7),
  72. c( 0,13),c(13,11),c(11, 0),c( 0, 6),c( 6,13),c( 6,11),
  73. c( 4,14),c(14, 9),c( 9, 4),c( 4,16),c(16,14),c(16, 9)
  74. ) + 1
  75. edgesIdxs <- lapply(split(1:60, gl(10,6)),
  76. function(is) alledgesIdxs[is,])
  77.  
  78. # edges vertices ####
  79. edges <- lapply(edgesIdxs,
  80. function(vs) plyr::alply(vs, 1,
  81. function(idxs) vertices[idxs,]))
  82.  
  83. # vertices per tetrahedron ####
  84. verticesIdxs <- lapply(edgesIdxs, function(idxs) unique(c(idxs)))
  85. vs <- lapply(verticesIdxs, function(idxs) vertices[idxs,])
  86.  
  87. # rgl - interlocked tetrahedra ####
  88. nicesegment3d <- function(p1p2, radius=0.05, col="black"){
  89. shade3d(cylinder3d(p1p2, radius=radius, sides=30), color=col)
  90. }
  91. # edges
  92. lapply(1:10,
  93. function(i) lapply(edges[[i]],
  94. function(v1v2) nicesegment3d(v1v2, col=colors[i])))
  95. # vertices
  96. lapply(1:10,
  97. function(i) spheres3d(vs[[i]], radius=0.05, col=colors[i]))
Add Comment
Please, Sign In to add comment