Вы можете сделать это в 2D, сгенерировав радиальные и полярные координаты
Вдоль линии:
Pi = 3.1415926
cx = 20
cy = 100
r = sqrt( -2*log(1-U(0,1)) )
a = 2*Pi*U(0,1)
x = scale*r*cos(a)
y = scale*r*sin(a)
return (x + cx, y + cy)
, где scale
- это параметр, который превращает его из единичного гауссова в некоторую единицуприменимо к вашей проблеме.U(0,1)
является равномерным по [0 ... 1) случайному значению.
Ссылка: Выборка Бокса-Мюллера .
Если вы хотите использовать универсальный 2D гауссов, то есть эллипсв 2D, вам придется использовать разные шкалы для X и Y, и повернуть (x, y) вектор на заранее определенный угол, используя хорошо известную матрицу вращения