knitr::opts_chunk$set(echo = TRUE)
if (!require("ggplot2")) install.packages("ggplot2")
## Loading required package: ggplot2
library("ggplot2")
if (!require("rmarkdown")) install.packages("rmarkdown")
## Loading required package: rmarkdown
Este proyecto presenta la simulacion de n puntos que estan dentro de un circulo con radio 0.5 teniendo datos aleatorios con una distribucion uniforme
Creo una funcion para determinar si un punto esta o no dentro del circulo
ifInside <- function(row){
xx <- row['x']
yy <- row['y']
inside <- ((xx-0.5)**2 + (yy-0.5)**2)
result <- ifelse(inside<0.25, TRUE, FALSE)
return(result)
}
Desarrollo el ejercicio teniendo en cuenta recorriendo los posibles numeros de puntos
numberPoint <- list(1000,10000,100000)
for (numberPoints in numberPoint) {
x <- runif(numberPoints, 0, 1)
y <- runif(numberPoints, 0, 1)
#creo un grafico para ver como estan distribuidos en un plano
plot(x, y, col = 'blue', main = paste('Distribucion con ', numberPoints, ' puntos') , xlab = 'X', ylab = 'Y',type="p")
#demostracion que los datos generados en X y Y son mas o menos uniformes
hist(x)
title(paste('Distribucion con ', numberPoints, ' puntos'),outer=TRUE)
hist(y)
title(paste('Distribucion con ', numberPoints, ' puntos'),outer=TRUE)
#creo un df con la informacion de x y y
point <- data.frame(x,y)
#creo una columnda llamada isInside la cual tiene el calculo de la funcion que determina si esta o no dentro del circulo
point$isInside<-apply(point, MARGIN =1, FUN = ifInside)
#creo la grafica con los datos discriminando por la columna isInside
graphCircleInside <- ggplot(point, aes(x = x, y = y, colour = isInside)) +
geom_point() + ggtitle(paste('Visualizacion grafica con ', numberPoints, ' puntos'))
print(graphCircleInside)
##para saber cuantos puntos estan dentro del circulo, basta con agrupar por la columna isInside
df<- aggregate(point$isInside, by=list(point$isInside), FUN=length)
print('Numero de puntos adentro o afuera')
print(df)
#los elementos adentro del ciculo son:
totalInsidePoints <- as.integer(df[2,2])
cat(" -El total de puntos adentro del circulo es ", totalInsidePoints)
cat(" -La estimacion de PI es ", 4* (totalInsidePoints/numberPoints))
print('/ ---------------------------------------------------- ')
}
## [1] "Numero de puntos adentro o afuera"
## Group.1 x
## 1 FALSE 224
## 2 TRUE 776
## -El total de puntos adentro del circulo es 776 -La estimacion de PI es 3.104[1] "/ ---------------------------------------------------- "
## [1] "Numero de puntos adentro o afuera"
## Group.1 x
## 1 FALSE 2160
## 2 TRUE 7840
## -El total de puntos adentro del circulo es 7840 -La estimacion de PI es 3.136[1] "/ ---------------------------------------------------- "
## [1] "Numero de puntos adentro o afuera"
## Group.1 x
## 1 FALSE 21638
## 2 TRUE 78362
## -El total de puntos adentro del circulo es 78362 -La estimacion de PI es 3.13448[1] "/ ---------------------------------------------------- "
paged_table(df ,options = NULL)