#----------------------------------------------------------------------
# Esperimento di affondamenti in acqua (FisAI 1/3/2023)
# 
#----------------------------------------------------------------------

pausa <- function() { cat ("\n >> press Enter to continue\n"); scan() }

# leggi i dati dal file
dati <- read.table("misure_affondamenti.dat", header=TRUE)

# mettiamoli in comodi 'vettori', 
# sottraendo ai valori la lettura prima dell'immersione
x  <- dati$x  - dati$x[1]
y1 <- dati$y1 - dati$y1[1]
y2 <- dati$y2 - dati$y2[1]
y3 <- dati$y3 - dati$y3[1]
y4 <- dati$y4 - dati$y4[1]
n  <- length(x)

print(dati)
plot(dati, col='blue', pch=19)

pausa()

plot(x, y1, xlab='affondamento (cm)', ty='b',
     ylab="massa d'acqua spostata (g)",
     pch=1, cex=1.5, col='darkblue',
     main="Massa d'acqua spostata in funzione dell'affondamento")
grid()
points(x, y2, pch=1, ty='b', cex=1.5, col='blue')
points(x, y3, pch=17, ty='b', cex=1.5, col='orange')
points(x, y4, pch=19, ty='b', cex=1.5, col='darkgray')
legend('topleft', legend=c("Cilindro 1", "Cilindro 2", "Prisma", "Cono"),
       lty=1, cex=1.5,
       col=c("darkblue", "blue","orange", "darkgray"),
       text.col=c("darkblue", "blue","orange", "darkgray"),
       box.col='gray')

pausa()

# per fare quattro plot nella finestra grafica
 par(mfrow= c(2,2) )

# soli dati dei cilindri (dipendenza lineare fra x e y)
plot(x, y1, xlab='affondamento (cm)', ylab="massa d'acqua spostata (g)",
     main='Cilindri', pch=1, cex=1.5, col='darkblue', xaxs = "i", yaxs = "i")
grid()
points(x, y2, pch=1, cex=1.5, col='blue')

# tracciamo rette che passano 'fra i punti',  
# imponendo loro il passaggio per l'origine
r1 <- lm(y1 ~ x + 0)
cat(sprintf("Cilindro 1: coef. di linearità: %f\n", as.vector(r1$coef)))
abline(r1, col='darkblue')

r2 <- lm(y2 ~ x + 0)
cat(sprintf("Cilindro 2: coef. di linearità: %f\n", as.vector(r2$coef)))
abline(r2, col='blue')

pausa()
# Prisma: plot in funzione di x^2, rinominata x2
x2 <- x^2
plot(x2, y3, xlab='affondamento^2 (cm^2)', ylab="massa d'acqua spostata (g)",
     main='Prisma', pch=17, cex=1.5, col='orange', xaxs = "i", yaxs = "i",
     xlim=c(0,40), ylim=c(0,20))
grid()
r3 <- lm(y3 ~ x2 + 0)
cat(sprintf("Prisma: coef. di linearità (vs x^2!): %f\n", as.vector(r3$coef)))
abline(r3, col='orange')

pausa()
# Prisma: plot in funzione di x^3, rinominata x3
x3 <- x^3
plot(x3, y4, xlab='affondamento^3  (cm^3)', ylab="massa d'acqua spostata  (g)",
     main='Cono', pch=17, cex=1.5, col='darkgray', xaxs = "i", yaxs = "i",
     xlim=c(0,150), ylim=c(0,10))
grid()
r4 <- lm(y4 ~ x3 + 0)
cat(sprintf("Cono: coef. di linearità (vs x^3!): %f\n", as.vector(r4$coef)))
abline(r4, col='darkgray')

# plot vuoto con i risultati dei coefficienti di linearità (slopes)
plot(NULL,  xaxt = 'n', yaxt = 'n', bty = 'n', pch = '',
     ylab = '', xlab = '', xlim=c(0,10), ylim=c(0,10))
text(-0.5, 7.5, sprintf("Slopes:\n"), cex=1.8, col='black', pos=4)
text(0.5, 6, sprintf("Cilindro 1:   %.3f   g/cm \n", as.vector(r1$coef)),
     cex=1.8, col='darkblue', pos=4)
text(0.5, 5, sprintf("Cilindro 2:   %.3f   g/cm \n", as.vector(r2$coef)),
     cex=1.8, col='blue', pos=4)
text(0.5, 4, sprintf("Prisma:       %.3f   g/cm^2 \n", as.vector(r3$coef)),
     cex=1.8, col='orange', pos=4)
text(0.5, 3, sprintf("Cono:          %.3f   g/cm^3\n", as.vector(r4$coef)),
     cex=1.8, col='darkgray', pos=4)

pausa()
text(-0.5, 1, sprintf("Attenzione alle cifre significative!\n"),
     cex=1.7, col='red', pos=4)
text(-0.5, 0, sprintf("[ Quali cifre sono veramente significative?\n"),
     cex=1.5, col='gray', pos=4)
text(-0.5, -0.7, sprintf("  ---> analisi incertezze di misura! ]\n!"),
     cex=1.5, col='gray', pos=4)

# resettiamo a un solo plot nella finestra grafica 
par(mfrow= c(1,1) )

pausa()

# ripetiamo il plot con i quattro andamenti sperimentali
# aggiungendo anche il risultato di 'lm()'
plot(x, y1, xlab='affondamento (cm)', ty='b',
     ylab="massa d'acqua spostata (g)",
     pch=1, cex=1.5, col='darkblue',
     main="Massa d'acqua spostata in funzione dell'affondamento")
grid()
pausa()
xi <- seq(0, 6, by=0.1)
points(xi,  as.vector(r1$coef)*xi, ty='l', lty=2, col='darkblue')
pausa()
points(x, y2, pch=1, ty='b', cex=1.5, col='blue')
pausa()
points(xi,  as.vector(r2$coef)*xi, ty='l', lty=2, col='blue')
pausa()
points(x, y3, pch=17, ty='b', cex=1.5, col='orange')
pausa()
points(xi,  as.vector(r3$coef)*xi^2, ty='l', lty=2, col='orange')
pausa()
points(x, y4, pch=19, ty='b', cex=1.5, col='darkgray')
pausa()
points(xi,  as.vector(r4$coef)*xi^3, ty='l', lty=2, col='darkgray')
legend('topleft', legend=c("Cilindro 1", "Cilindro 2", "Prisma", "Cono"),
       lty=1, cex=1.5,
       col=c("darkblue", "blue","orange", "darkgray"),
       text.col=c("darkblue", "blue","orange", "darkgray"),
       box.col='gray')
