otocenyStvorec <- function(){
  x0 <- runif(1, min = 0, max = sqrt(2))
  y0 <- runif(1, min = 0, max = sqrt(2))
  x <- (x0 + y0)/sqrt(2) - 1
  y <- (x0 - y0)/sqrt(2)
  return(c(x,y))
}

replicate(5, otocenyStvorec())

body <- replicate(1000, otocenyStvorec())
plot(t(body), asp = 1)

otocenyStvorec2 <- function(){
  while(1){
    x0 <- runif(1, -1, 1)
    y0 <- runif(1, -1, 1)
    if(abs(x0) + abs(y0) <= 1) return(c(x0, y0))
  }
}

otocenyStvorec2()  

body <- replicate(1000, otocenyStvorec2())
plot(t(body), asp = 1)

mb4 <- microbenchmark(replicate(1000, otocenyStvorec()),
               replicate(1000, otocenyStvorec2()))
boxplot(mb4)

############################################################

sim <- function(){
  phi <- runif(1, 0, 2*pi)
  r <- runif(1, 0, 1)
  return(c(r*cos(phi), r*sin(phi)))
}

body <- replicate(10000, sim())
plot(t(body), asp = 1)

sim <- function(){
  phi <- runif(1, 0, 2*pi)
  r <- sqrt(runif(1, 0, 1))
  return(c(r*cos(phi), r*sin(phi)))
}

body <- replicate(10000, sim())
plot(t(body), asp = 1)

###############################

kruh1 <- function(){
  phi <- runif(1, 0, 2*pi)
  r <- sqrt(runif(1, 0, 1))
  return(c(r*cos(phi), r*sin(phi)))
}

kruh2 <- function(){
  while(1){
    x0 <- runif(1, -1, 1)
    y0 <- runif(1, -1, 1)
    if(x0^2 + y0^2 <= 1) return(c(x0, y0))
  }
}

body <- replicate(10000, kruh2())
plot(t(body), asp = 1)

mb5 <- microbenchmark(replicate(10000, kruh1()), replicate(10000, kruh2()))
boxplot(mb5)
