1

Using R, I would like to plot a sphere with latitude and longitude lines, but without any visibility of hidden part of the sphere. And, ideally, I'd like to have the initial view start out with a specific tilt (but that's down the road).

This matlab question gets to the idea Plotting a wireframe sphere in Python hidding backward meridians and parallels ... but it's matlab. The closest solution that stackoverflow suggested Plot Sphere with custom gridlines in R doesn't help with the hidden line aspect.

The closest I got was editting a sphereplot routine:

library(sphereplot)

matt.rgl.sphgrid <- function (radius = 1, col.long = "red", col.lat = "blue", deggap = 15, 
          longtype = "H", add = FALSE, radaxis = TRUE, radlab = "Radius") 
{
  if (add == F) {
    open3d(userMatrix = rotationMatrix((90)*pi/180, 1, 0, 0)) #changed
  }
  for (lat in seq(-90, 90, by = deggap)) {
    if (lat == 0) {
      col.grid = "grey50"
    }
    else {
      col.grid = "grey"
    }
#create an array here using the sph2car call below, then rotate those and
#set the appropriate ones to NA before passing that array to this call
#ditto for the next plot3d call as well
    plot3d(sph2car(long = seq(0, 360, len = 100), lat = lat, 
                   radius = radius, deg = T), 
           col = col.grid, add = T,
           type = "l")
  }
  for (long in seq(0, 360 - deggap, by = deggap)) {
    if (long == 0) {
      col.grid = "grey50"
    }
    else {
      col.grid = "grey"
    }
    plot3d(sph2car(long = long, lat = seq(-90, 90, len = 100), 
                   radius = radius, deg = T), 
           col = col.grid, add = T,
           type = "l")
  }
  if (longtype == "H") {
    scale = 15
  }
  if (longtype == "D") {
    scale = 1
  }
#  rgl.sphtext(long = 0, lat = seq(-90, 90, by = deggap), radius = radius, 
#              text = seq(-90, 90, by = deggap), deg = TRUE, col = col.lat)
#  rgl.sphtext(long = seq(0, 360 - deggap, by = deggap), lat = 0, 
#              radius = radius, text = seq(0, 360 - deggap, by = deggap)/scale, 
#              deg = TRUE, col = col.long)
}
matt.rgl.sphgrid(radaxis=FALSE)

But I can't figure out how to hide the lines.

Any pointers or examples I've overlooked?

SOLUTION: Just prior to the plot3d calls, set any negative values in "y" (in this case, given a first rotation of 90 degrees) to NA

mconsidine
  • 69
  • 3

0 Answers0