java - Generating uniform random numbers on a sphere/circle filled with a cube/square -
i trying generate random points on sphere filled cube. because had no idea how started 2d. (a circle filled quadrat.)
what trying do: generating random points inside outer circle, outside green square.
basically in blue areas.
the square located @ (-1|-1),(1|-1),(1|1),(-1|1)
.
circle has radius of r = sqrt(2)
, centered @ (0|0)
.
i have scripts to:
generate random point on circle (uniformly):
float = 2 * mathutils.pi * mathutils.random(1f); // angle between 0 , 2pi float r = radius * math.sqrt(mathutils.random(0, 1f) float x = r * mathutils.cos(a); float y = r * mathutils.sin(a);
calculating radius given angle form square:
float r = (1/math.sqrt(2)) / mathutils.cos(((a+45)%90-45)/180*mathutils.pi);
with
(1/math.sqrt(2))
being half side length of square
before asks: know re-generate points inside green square until 1 outside, don't want way.
i appreciate help. thank :)
it rather hard generate points in region of sphere outside cube (caps , wedges), rejecting method looks reasonable.
but can diminish number of useless points, generating points in ring only in 2d case , in spherical shell in 3d case.
so pseudocode might
//2d squaredr = randomuniforminrange(0.5, 1) r = sqrt(squaredr) //3d cubedr = randomuniforminrange(pow(3, -3/2), 1) r = pow(cubedr, 1/3) //generate point on circle or on sphere radius r if abs(x) > sqrt(2)/2 or sqrt(3)/3 , on - reject
having r, can generate point on sphere using approach here
Comments
Post a Comment