Chomolungma

Voici un exemple de chose que l’on peut faire avec quelques données topographiques et la fonction persp.

rm(list=ls())
setInternet2(TRUE)
url <- "collez ce lien entre les guillemets"
source(url)
# Charge *height*, une matrice [150, 150]
x <- 1:nrow(height)
y <- 1:ncol(height)
persp(x, y, height, zlim = c(0, 9e3), col = "lightsteelblue2", border = NA,
      shade = .2, phi = 25, theta = 30, axes = FALSE)

Et voilà :

Au cas où vous vous poseriez la question : oui, ce sont de vraies données ; ce que vous voyez ci-dessus, c’est le mont Everest en 3D.

Notez que comme mon zlim = c(0, 9e3) je suggère, la hauteur du graphique va du niveau de la mer à 9000 mètres.

Et si vous voulez vraiment vous faire plaisir (tout en découvrant à quoi servent theta et phi), essayez ça :

theta <- seq(30, 390, 5)
phi <- seq(0, 30, len = length(theta))

for(i in 1:length(theta)) {
      persp(x, y, height, zlim = c(0, 9e3), col = "lightsteelblue2",
            border = NA, shade = .2, phi = phi[i], theta = theta[i],
            axes = FALSE)
}

--- Edit

Après avoir installé le package rgl (install.packages("rgl")), exécutez ce qui suit (on suppose de height, x et y sont en mémoire) :

mx <- max(height)
xx <- drop(which(height == mx, TRUE, FALSE))
persp3d(x, y, height, col= "lightsteelblue2", zlim = c(0, 9e3), axes = FALSE,
      xlab = "", ylab = "", zlab = "")
points3d(xx[1], xx[2], mx, col = "red")
text3d(xx[1], xx[2], mx, "8840m", adj = c(.5, -1))

Vous obtiendrez le même type de graphique... mais interactif cette fois.

L'Everest, face du Kangshung, arrête Nord-Est, face Nord.

Aucun commentaire:

Enregistrer un commentaire