#---------------------------------------------------------- # corde causali - scheletro di programma - # # GdA, febbraio 2011 #---------------------------------------------------------- library(tripack) # per 'circles' # function pausa pausa <- function() { cat ("\n >> Guarda il plot e dai enter per continuare\n") scan() } #----- addormenta lo script per un tempo t dormi <- function(t) { Sys.sleep(t) # funziona di sistema } # funzione per generare le corde genera.corde <- function(n, R) { corde <- NULL # prepara l'oggetto dove mettere i risulati #----------------------------------------------------------- # "genera le coordinate delle corde" # ATTENZIONE: in realta' NON genera delle corde, ma e' # solo per far vedere come si riempie l'oggetto con # le informazioni geometrice sulle corde # => RISCRIVERE QUESTA PARTE USANDO IL METODO PREFERITO x1 <- runif(n,-R*1.1,R*1.1) y1 <- runif(n,-R*1.1,R*1.1) x2 <- runif(n,-R*1.1,R*1.1) y2 <- runif(n,-R*1.1,R*1.1) #----------------------------------------------------------- corde$p1 <- cbind(x1,y1) corde$p2 <- cbind(x2,y2) # calcola le lunghezze delle "corde" corde$len <- sqrt( (corde$p2[,1]-corde$p1[,1])^2 + (corde$p2[,2]-corde$p1[,2])^2) # calcola i centri delle "corde" corde$mid <- cbind((corde$p2[,1]+corde$p1[,1])/2, (corde$p2[,2]+corde$p1[,2])/2) return(corde) } R = 1 # raggio del cerchio n = 100 # numero di corde da generare sl = TRUE # inserisce pause durante il tracciamento delle corde (o dei punti) # mettere FALSE ne caso di molti eventi sl.time = 0.05 # tempo di pausa, in secondi # chiamiamo la function e guardiamo/analizziamo corde <- genera.corde(n, R) # guardiamo cosa c'e' in corde: str(corde) # tracciamo il cerchio plot(0,0,xlim=c(-R*1.2,R*1.2), ylim=c(-R*1.2,R*1.2), pch="+", asp=1) circles(0,0,1) # aggiungiamo le corde (ricordiamo che questa versione di # genera.corde() in realta' genera segmenti a caso che # non sono necessariamente corde for (i in 1:n) { lines(c(corde$p1[i,1],corde$p2[i,1]), c(corde$p1[i,2],corde$p2[i,2]), col='red') if(sl) dormi(sl.time) } # pausa() # guardiamo anche i centri delle 'corde' plot(0,0,xlim=c(-R*1.2,R*1.2), ylim=c(-R*1.2,R*1.2), pch="+", asp=1) circles(0,0,1) for (i in 1:n) { points(corde$mid[i,1],corde$mid[i,2], col='red', cex=0.15) if(sl) dormi(sl.time) } # pausa() # guardiamo infine la distribuzione delle lunghezze delle corde hist(corde$len,nc=50)