Sample point on a circle with given radius
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(rng_t), | intent(inout) | :: | self | |||
| real(kind=dp), | intent(in) | :: | radius |
function circle(self, radius) result(xy) class(rng_t), intent(inout) :: self real(dp), intent(in) :: radius real(dp) :: rands(2), xy(2) real(dp) :: sum_sq ! Method for uniform sampling on circle do rands(1) = 2 * self%unif_01() - 1 rands(2) = 2 * self%unif_01() - 1 sum_sq = sum(rands**2) if (sum_sq <= 1) exit end do xy(1) = (rands(1)**2 - rands(2)**2) / sum_sq xy(2) = 2 * rands(1) * rands(2) / sum_sq xy = xy * radius end function circle