[R] 3d plot of earth with cut

Balint Radics b@||ntr@d|c@ @end|ng |rom gm@||@com
Fri Oct 23 00:00:13 CEST 2020


Hello,

this is very close to exactly what I need! I have tried it and it works
nicely, I just have to map some values onto to the polygon or 2D plane that
cuts into the 3D object.

Thanks!

Balint

On Thu 22. Oct 2020 at 21:28, Duncan Murdoch <murdoch.duncan using gmail.com>
wrote:

> On 21/10/2020 8:45 a.m., Balint Radics wrote:
> > Hello,
> >
> > Could someone suggest a package/way to make a 3D raster plot of the Earth
> > (with continent boundaries), and then make a "cut" or "slice" of it such
> > that one can also visualize some scalar quantity as a function of the
> > Radius/Depth across that given slice ?
> >
> > Formally, I would have a given, fixed longitude, and a list of vectors
> > {latitude, radius, Value}
> > that would show the distribution of the quantity "Value" at various
> depths
> > and latitudes in 3D.
>
> The rgl package has a full sphere of the Earth with (obsolete) political
> boundaries in example(persp3d).  To cut it in half along the plane
> through a given longitude (and that longitude + 180 deg), you could use
> clipPlanes3d, or clipObj3d.  For example,
>
> library(rgl)
> lat <- matrix(seq(90, -90, len = 50)*pi/180, 50, 50, byrow = TRUE)
> long <- matrix(seq(-180, 180, len = 50)*pi/180, 50, 50)
>
> r <- 6378.1 # radius of Earth in km
> x <- r*cos(lat)*cos(long)
> y <- r*cos(lat)*sin(long)
> z <- r*sin(lat)
>
> open3d()
> ids <- persp3d(x, y, z, col = "white",
>          texture = system.file("textures/worldsmall.png", package = "rgl"),
>          specular = "black", axes = FALSE, box = FALSE, xlab = "", ylab
> = "", zlab = "",
>          normal_x = x, normal_y = y, normal_z = z)
>
> clipFn <- function(coords) {
>    pmax(coords[,1], coords[,2]) # Just an example...
> }
> clipObj3d(ids["surface"], clipFn)
>
>
> Filling in the exposed surface could be done with polygon3d(), with some
> work to construct the polygon. Displaying the function across that
> surface could be done in a couple of ways, either by using a texture map
> (like for the map), or subdividing the polygon and setting colour by the
> coordinates of each vertex.
>
> Note that the clipObj3d function isn't on CRAN yet; there you'd have to
> use clipPlanes3d.  You can get the newer version from R-forge.
>
> Duncan Murdoch
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list