wireframe.R

richard — Apr 10, 2014, 2:04 PM

library(lattice)
alpha <- seq(from = 0, to = 180, length = 20)
beta <- alpha
surfQ <- expand.grid(x = alpha, y = beta)
surfQ$z <- with(surfQ, {-cos((x-y)*pi/180)})
surfQ$key <- 0

head(surfQ)
       x y       z key
1  0.000 0 -1.0000   0
2  9.474 0 -0.9864   0
3 18.947 0 -0.9458   0
4 28.421 0 -0.8795   0
5 37.895 0 -0.7891   0
6 47.368 0 -0.6773   0
tail(surfQ)
        x   y       z key
395 132.6 180 -0.6773   0
396 142.1 180 -0.7891   0
397 151.6 180 -0.8795   0
398 161.1 180 -0.9458   0
399 170.5 180 -0.9864   0
400 180.0 180 -1.0000   0
nrow(surfQ)
[1] 400

alphaE <- c(0, 90)
betaE <- c(45, 135)
ptsQ <- expand.grid(x = alphaE, y = betaE)
ptsQ$z <- with(ptsQ, {-cos((x-y)*pi/180)})

ptsQ
   x   y       z
1  0  45 -0.7071
2 90  45 -0.7071
3  0 135  0.7071
4 90 135 -0.7071

ptsC <- ptsQ
ptsC$z <- with(ptsC, {- 1 + 2 * abs((x-y)/180)})

ptsC
   x   y    z
1  0  45 -0.5
2 90  45 -0.5
3  0 135  0.5
4 90 135 -0.5

pts <- rbind(ptsQ, ptsC)
pts$key <- c(rep(1, 4), rep(2, 4))
pts
   x   y       z key
1  0  45 -0.7071   1
2 90  45 -0.7071   1
3  0 135  0.7071   1
4 90 135 -0.7071   1
5  0  45 -0.5000   2
6 90  45 -0.5000   2
7  0 135  0.5000   2
8 90 135 -0.5000   2




wireframe(z ~ x * y, surfQ, aspect = c(1, .5),
          main = "Quantum surface (blue), quantum points (blue), classical points (red)",
          par.settings = simpleTheme(col=c("blue", "red"),
                                     pch=c(13,3,16), cex=2, lwd=1),
          scales = list(arrows = FALSE),
          pts = pts,
          groups = surfQ$key,
          panel.3d.wireframe =
          function(x, y, z,
                   xlim, ylim, zlim,
                   xlim.scaled, ylim.scaled, zlim.scaled,
                   pts,
                   ...) {
              panel.3dwire(x = x, y = y, z = z,
                           xlim = xlim,
                           ylim = ylim,
                           zlim = zlim,
                           xlim.scaled = xlim.scaled,
                           ylim.scaled = ylim.scaled,
                           zlim.scaled = zlim.scaled,
                           col = "blue",
                           ...)
              xx <-
                  xlim.scaled[1] + diff(xlim.scaled) *
                      (pts$x - xlim[1]) / diff(xlim)
              yy <-
                  ylim.scaled[1] + diff(ylim.scaled) *
                      (pts$y - ylim[1]) / diff(ylim)
              zz <-
                  zlim.scaled[1] + diff(zlim.scaled) *
                      (pts$z - zlim[1]) / diff(zlim)
              panel.3dscatter(x = xx,
                              y = yy,
                              z = zz,
                              xlim = xlim,
                              ylim = ylim,
                              zlim = zlim,
                              xlim.scaled = xlim.scaled,
                              ylim.scaled = ylim.scaled,
                              zlim.scaled = zlim.scaled,
                              groups = pts$key,
                              ...)
          })

plot of chunk unnamed-chunk-1


## and now the classical LHV model

surfC <- surfQ
surfC$z <- with(surfC, {- 1 + 2 * abs((x-y)/180)})




wireframe(z ~ x * y, surfC, aspect = c(1, .5),
          main = "Classical surface (red), classical points (red), quantum points (blue)",
          par.settings = simpleTheme(col=c("blue", "red"),
                                     pch=c(13,3,16), cex=2, lwd=1),
          scales = list(arrows = FALSE),
          pts = pts,
          groups = surfC$key,
          panel.3d.wireframe =
            function(x, y, z,
                     xlim, ylim, zlim,
                     xlim.scaled, ylim.scaled, zlim.scaled,
                     pts,
                     ...) {
              panel.3dwire(x = x, y = y, z = z,
                           xlim = xlim,
                           ylim = ylim,
                           zlim = zlim,
                           xlim.scaled = xlim.scaled,
                           ylim.scaled = ylim.scaled,
                           zlim.scaled = zlim.scaled,
                           col = "red",
                           ...)
              xx <-
                xlim.scaled[1] + diff(xlim.scaled) *
                (pts$x - xlim[1]) / diff(xlim)
              yy <-
                ylim.scaled[1] + diff(ylim.scaled) *
                (pts$y - ylim[1]) / diff(ylim)
              zz <-
                zlim.scaled[1] + diff(zlim.scaled) *
                (pts$z - zlim[1]) / diff(zlim)
              panel.3dscatter(x = xx,
                              y = yy,
                              z = zz,
                              xlim = xlim,
                              ylim = ylim,
                              zlim = zlim,
                              xlim.scaled = xlim.scaled,
                              ylim.scaled = ylim.scaled,
                              zlim.scaled = zlim.scaled,
                              groups = pts$key,
                              ...)
            })

plot of chunk unnamed-chunk-1