# Un esempio di GEOMETRIA 3D:
# Clicca vicino al bordo per ruotare la figura nel verso che
# vuoi.  Clicca verso il centro, un po' in alto, per aumentare
# la distanza dell'occhio, un po' in basso per diminuirla
#
#    SELEZIONA tutto e INCOLLA in R
#
# Per altre immagini, arresta il tracciamento con ESC e scrivi
# animaz(teta,fi,di)  dove teta,fi,di indicano la posizione dell'
# occio: teta (direzione nel piano xy: 90 da un punto del piano
# verticale che passa per l'asse x, 180 per l'asse y), fi (in-
# clinazione: 0 se l'occhio sta nel piano xy, 90 se sta sopra O,
# -90 se sta sotto) e di (indicatore di distanza: varia, ma non
# coincide, con la distanza dell'occhio da O)  che vuoi.
#        (con O abbiamo indicato il centro del box)
#
u <- c(0,0,0,0); z <- array(u,dim=c(2,2)) # in u metto i valori minimi di z
x <- c(-2,2); y <- c(-2,2)
thphdi <- function(t,p,di) {
 par( mai = c(0.2,0.2,0.5,0.3) ) # riduco i margini
 F <- persp(x,y,z,theta=t,phi=p,scale=FALSE,zlim=c(0,2),
   xlim=x,ylim=y,d=di)
  lines(trans3d(c(-1,-1,1,1,-1),c(-1,1,1,-1,-1),c(0,0,0,0,0),pmat=F))
  lines(trans3d(c(-1,-1),c(-1,-1),c(0,1),pmat=F))
  lines(trans3d(c(1,1),c(-1,-1),c(0,1),pmat=F))
  lines(trans3d(c(1,1),c(1,1),c(0,1),pmat=F))
  lines(trans3d(c(-1,-1),c(1,1),c(0,1),pmat=F))
  lines(trans3d(c(-1,-1),c(-1,1),c(1,1),pmat=F))
  lines(trans3d(c(1,1),c(-1,1),c(1,1),pmat=F))
  lines(trans3d(c(1,0),c(1,1),c(1,1.5),pmat=F))
  lines(trans3d(c(-1,0),c(1,1),c(1,1.5),pmat=F))
  lines(trans3d(c(-1,0),c(-1,-1),c(1,1.5),pmat=F))
  lines(trans3d(c(1,0),c(-1,-1),c(1,1.5),pmat=F))
  lines(trans3d(c(0,0),c(1,-1),c(1.5,1.5),pmat=F))
  lines(trans3d(c(0,0),c(1,-1),c(1.5,1.5),pmat=F))
  lines(trans3d(c(-0.5,-0.5),c(-1,-1),c(0,0.5),pmat=F))
  lines(trans3d(c(0.5,0.5),c(-1,-1),c(0,0.5),pmat=F))
  lines(trans3d(c(-0.5,0.5),c(-1,-1),c(0.5,0.5),pmat=F))
  lines(trans3d(c(1,1),c(-1,100000),c(0,0),pmat=F),col="red",lty=3)
  lines(trans3d(c(1,1),c(-1,100000),c(1,1),pmat=F),col="red",lty=3)
  lines(trans3d(c(-1,-1),c(-1,100000),c(1,1),pmat=F),col="red",lty=3)
  lines(trans3d(c(-1,-1),c(-1,100000),c(0,0),pmat=F),col="red",lty=3)
  lines(trans3d(c(0,0),c(-1,100000),c(1.5,1.5),pmat=F),col="red",lty=3)
 }
animaz <- function(teta,fi,di) {
 while(1 < 2) { thphdi(teta,fi,di); title(paste("teta",teta,"°  ","fi",fi,"° ","ind.dist.",di))
  l <- locator(1);   a <- c(l$x,l$y)
  fi2 <- ifelse(a[2] > 0.15,fi-1,ifelse(a[2] < -0.15,fi+1,fi))
  teta2 <- ifelse(a[1] > 0.15,teta-1,ifelse(a[1] < -0.15,teta+1,teta));
  di2 <- ifelse(abs(a[2]) < 0.2 & abs(a[1]) < 0.2 & a[2] > 0,di*2,di);
  di2 <- ifelse(abs(a[2]) < 0.2 & abs(a[1]) < 0.2 & a[2] < 0,di2/2,di2);
  if (di2 == di) {fi <- fi2; teta <- teta2}
  di <- di2
  title(paste("teta",teta,"°  ","fi",fi,"° ","ind.dist.",di))}
}
animaz(30,40,0.5)