# Sampling with multidimensional transformations

1. Apr 18, 2013

### Cbas

I am not sure if I have the title right, but here is my problem:
I have a ray which 'should be' shot vertically from a point p, but depending on the situation it can: 1) either be shot in any direction in the hemisphere above p 2) shot with an angle of no more than σ off the vertical 3) shot with an angle of no more than σ off the vertical by with a Gaussian distribution
(See http://imgur.com/BMqWjoQ)
http://imgur.com/BMqWjoQ

First:
I wish to generate a point uniformly distributed on a hemisphere. I did some derivations and I came up with:
θ = acos(R1)
∅= 2∏R2
x = sinθcos∅=cos(2∏R2)sqrt(1-R12)
y = sinθsin∅=sin(2∏R2)sqrt(1-R12)
z=cosθ=R1
I confirmed this wit a text book, So Im pretty sure its right---
Second:
I want to generate a point uniformly but only within a small solid angle subtended by angle σ
Similar derivation as before but the values for theta and phi are
θ=acos(1-(1-cos(σ)*R1))
∅= 2∏R2
Im pretty sure this is also right

Third:
(now this is where I need help)
Instead of using a uniform distribution I would like to use a Gaussian distribution. I know Box Muller is one way of generating random number with a normal distribution (given a set of canonical numbers) but how do I use that now to generate ray directions that are normally distributed?

2. Apr 18, 2013

### Staff: Mentor

Can you do rejection sampling? The "best" implementation would depend on details of the parameters. "Use the second algorithm and reject the point with probablility 1-(value of gaussian)" should give reasonable results if the gaussian is not too narrow.

Alternatively, generate a random number based on the modified distribution f(θ)=sin(θ)*gaussian

3. Apr 18, 2013

### Cbas

What do you mean by "gaussian"? Is that one of my gaussian random numbers?
I assume sin(theta) is measure of area
Area = ∫0σ0sin(θ) Z1dθd∅

sin(θ) is (proportional to) the length of a circle around the vertical axis. It is just a weight for the gaussian distribution. I don't know if you want that gaussian as function of θ, or the projection on the floor, or whatever, just use what you like there. As function of θ, it gets $$f(\theta)=\sin(\theta)\exp\left(\frac{-\theta^2}{2\sigma^2}\right)$$