This package is a curation made based on the poly package found on http://www.netlib.org/polyhedra/ (Original Help message), and the polyhedra database found on http://dmccooey.com/polyhedra, both of which provide polyhedra databases on its own format. As such, Rpolyhedra provides with the following:
For final users, the package provides a common interface for accesing public polyhedra databases, analize properties, compare and visualize them with RGL.
For advanced users, the package provides a simplified set of R6 objects to scrape and compare polyhedra databases.
Once the original files had been processed, a simple call to getAvailablePolyhedra()
retrieves a list of the available polyhedra with properties and status in the polyhedra database:
## source scraped.name symbol vertices
## 1 netlib tetrahedron {3,3}\t@Y sub 3 @ 4
## 31 netlib square pyramid (j1) \t@Y sub 4 @ 5
## 42 netlib triangular dipyramid (j12) \t@Y sub 3 @ 5
## 9 netlib triangular prism \t@P sub 3 @ 6
## 32 netlib pentagonal pyramid (j2) \t@Y sub 5 @ 6
## 3 netlib octahedron {3,4}\t@S sub 3 @ 6
## 37 netlib elongated triangular pyramid (j7) \t@Y sub 3 @ 7
## 74 netlib augmented triangular prism (j49) \t@Y sub 4 @ 7
## 43 netlib pentagonal dipyramid (j13) \t@Y sub 5 @ 7
## 2 netlib cube {4,3}\t@P sub 4 @ 8
## faces status
## 1 4 scraped
## 31 5 scraped
## 42 6 scraped
## 9 5 scraped
## 32 6 scraped
## 3 8 scraped
## 37 7 scraped
## 74 8 scraped
## 43 10 scraped
## 2 6 scraped
The access to a particular polyhedron can be done with a call to getPolyhedron(<<source>>, <<polyhedron.name>>)
, which returns a Polyhedron object. For example, to retrieve a cube from the netlib database, the call would be:
To try package funcionality, a simple demo can be executed which shows the 5 regular polyhedra.
polyhedra.2.draw <- getAvailablePolyhedra(source = "netlib")
polyhedra.2.draw <- polyhedra.2.draw[polyhedra.2.draw$scraped.name %in%
c("tetrahedron",
"octahedron",
"cube",
"icosahedron",
"dodecahedron"),]
n <- nrow(polyhedra.2.draw)
polyhedron.colors <- rainbow(n)
polyhedron.scale <- 5
open3d()
## glX
## 1
par3d(FOV = 1)
rgl.bg( sphere =FALSE, fogtype = "none", color=c("black"))
rgl.viewpoint(theta = 0,phi=0,zoom=0.8,fov=1)
for (i in seq_len(n)) {
polyhedron.row <- polyhedra.2.draw[i,]
polyhedron.name <- polyhedron.row$scraped.name
polyhedron <- getPolyhedron(source = polyhedron.row$source, polyhedron.name)
current.angle <- i/n * 2 * pi
tm <- rotationMatrix(current.angle, 1,0,0)
x.pos <- round(polyhedron.scale * sin(current.angle), 2)
y.pos <- round(polyhedron.scale * cos(current.angle), 2)
tm <- tm %*% translationMatrix(x.pos,y.pos,0)
print(paste("Drawing ",polyhedron.name," rotated ", round(current.angle,2),
" in (1,0,0) axis. Translated to (",x.pos,",",y.pos,",0)",
" with color ",polyhedron.colors[i], sep = ""))
shape.rgl <- polyhedron$getRGLModel(transformation.matrix = tm)
shade3d(shape.rgl, color = polyhedron.colors[i])
}
## [1] "Drawing tetrahedron rotated 1.26 in (1,0,0) axis. Translated to (4.76,1.55,0) with color #FF0000FF"
## [1] "Drawing octahedron rotated 2.51 in (1,0,0) axis. Translated to (2.94,-4.05,0) with color #CCFF00FF"
## [1] "Drawing cube rotated 3.77 in (1,0,0) axis. Translated to (-2.94,-4.05,0) with color #00FF66FF"
## [1] "Drawing icosahedron rotated 5.03 in (1,0,0) axis. Translated to (-4.76,1.55,0) with color #0066FFFF"
## [1] "Drawing dodecahedron rotated 6.28 in (1,0,0) axis. Translated to (0,5,0) with color #CC00FFFF"
You must enable Javascript to view this page properly.