simulations <- 10000 # number of simulations
perimeter <- 1
# randomly generate a point and check if it is in circle
f_point_in_circle <- function(perimeter=1){
x <- runif(n=1, min=-perimeter, max=perimeter)
y <- runif(n=1, min=-perimeter, max=perimeter)
return(list(x=x,
y=y,
in_circle=x^2 + y^2 <= perimeter^2))
}
# Monte Carlo simulations
set.seed(123)
pi_df <- data.frame(x=rep(NA, simulations),
y=rep(NA, simulations),
in_circle=rep(NA, simulations))
for (i in seq(simulations)){
my_simulation <- f_point_in_circle()
pi_df$in_circle[i] <- my_simulation$in_circle
pi_df$x[i] <- my_simulation$x
pi_df$y[i] <- my_simulation$y
}
my_pi <- 4 * sum(pi_df$in_circle) / nrow(pi_df)
library(ggplot2)
ggplot(pi_df, aes(x=x, y=y, color=as.factor(in_circle))) +
geom_point() +
theme(legend.position='none')
