# Uomo alto 1.80; retta tratteggiata blu orizzontale alla quota 0.30
u <- c(0,0,0,0); z <- array(u,dim=c(2,2)); x <- c(-1,1); y <- c(-1,1)
# t: angolo theta; p: angolo phi; di: distanza
thphdi <- function(t,p,di) {
 F <- persp(x,y,z,theta=t,phi=p,scale=FALSE,zlim=c(0,1.8),xlim=c(-1,1),
             ylim=c(-1,1),d=di,box=FALSE,lty=3,col="yellow")
 x1 <- 0; i <- seq(0,2*pi,2*pi/20); y1 <- cos(i)/8; z1 <- sin(i)/8+1.675
 lines(trans3d(x1,y1,z1,pmat=F))
 y1 <- 0; i <- seq(0,2*pi,2*pi/20); x1 <- cos(i)/8; z1 <- sin(i)/8+1.675
 lines(trans3d(x1,y1,z1,pmat=F))
 z1 <- 1.675; i <- seq(0,2*pi,2*pi/20); x1 <- cos(i)/8; y1 <- sin(i)/8
 lines(trans3d(x1,y1,z1,pmat=F))
 x1 <- c(0,0,-1/10,0,1/10); y1 <- 0; z1 <- c(1.675-1/8,0.9,0,0.9,0)
 lines(trans3d(x1,y1,z1,pmat=F),col="brown")
 x1 <- c(-1/5,-1/5,1/5,1/5); y1 <- 0;
 z1 <- c(0.8,1.675-1/8-0.1,1.675-1/8-0.1,0.8)
 lines(trans3d(x1,y1,z1,pmat=F),col="blue")
 lines(trans3d(c(1/4,1/4),c(-1,100000),c(0,0),pmat=F),col="red",lty=3)
 lines(trans3d(c(-1/4,-1/4),c(-1,100000),c(0,0),pmat=F),col="red",lty=3)
 lines(trans3d(c(1/2,1/2),c(-1,100000),c(0,0),pmat=F),col="red",lty=3)
 lines(trans3d(c(-1/2,-1/2),c(-1,100000),c(0,0),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(-1,-1),c(-1,100000),c(0,0),pmat=F),col="red",lty=3)
 lines(trans3d(c(-1,1),c(0,0),c(0.3,0.3),pmat=F),col="blue",lty=3) 
 }
# riduco i margini bianchi attorno alla figura
par( mai=c(0.2,0.2,0.5,0.2) )
# un punto di vista dall'alto a 5 m di distanza
thphdi(0,30,5)
# un punto di vista che mira al bacino (alla stessa distanza)
thphdi(0,0,5)
# un punto di vista tale che il punto all'infinito corrisponda alla
# altezza di 30 cm dai piedi dell'uomo (tratteggio blu)
thphdi(0,-2.95,5)
# una animazione
ang <- seq(-90,270,0.2)
for(a in ang) {thphdi(0,a,5); title(a); if(a/10==floor(a/10)) locator(1)}