Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

We've mentioned before how you can use R to design 3-D objects. Now, thanks to the latest version of the rgl package, you can produce real-world 3-D objects with R as well.

The rgl package has long made it possible to create virtual 3-D objects in R, and export them as animations like this:

But now, package author Duncan Murdoch has added the ability to export such 3-D objects in formats used by 3-D printers (such as STL, WebGL, PLY, and OBJ). Duncan used this feature to create the corresponding real-world sculpture below:

I ordered it from shapeways.com, a service bureau that does 3D printing in a variety of materials. (They're in NYC, and were shut down for a few days by Hurricane Sandy, but still managed to get my print to me a day earlier than they promised to ship it!)  Including shipping to Canada, the cost was \$22, and I had the print 11 days after I wrote the software.

The 3-D object file (in STL format) was created using just a few R commands and some elegant mathematics:

```## Install rgl from R-forge with
## install.packages("rgl", repos="http://R-Forge.R-project.org")

library(rgl)

theta <- seq(0, 6*pi, len=2048)
sawtooth <- function(x) sin(x) + sin(2*x)/2
dsawtooth <- function(x) cos(x) + cos(2*x)

fb <- 21+1/3
x1 <- sawtooth(fb*theta)
dx1 <- dsawtooth(fb*theta)

offset <- 3*pi/3
y1 <- sawtooth(fb*theta - offset )
dy1 <- dsawtooth(fb*theta - offset)

r1 <- 0.1
r2 <- 0.4

k <- cylinder3d(cbind(sin(theta)+2*sin(2*theta), 2*sin(3*theta), cos(theta)-2*cos(2*theta)),
e1=cbind(cos(theta)+4*cos(2*theta), 6*cos(3*theta), sin(theta)+4*sin(2*theta)),

knot <- attr(k, "vars")
center <- cbind(0, x1, y1)*r2
e1 <- cbind(1, dx1, dy1)*r2
e2 <- cbind(rep(0, length(theta)), 1, 0)
for (i in 1:length(theta)) {
trans <- cbind(knot\$e1[i,], knot\$e2[i,], knot\$e3[i,])
center[i,] <- knot\$center[i,] + trans %*% center[i,]
e1[i,] <- trans %*% e1[i,]
e2[i,] <- trans %*% e2[i,]
}

writeSTL("braid.stl") ```

Try it yourself! The package installed easily for me on a Mac running R 2.15.2, and I could also rotate the 3-D object interatively on-screen using the shade3d function. For more info, visit the rgl progect page linked below.

r-forge: rgl project page