|
|
|
|
Attention |
Topic was automatically imported from the old Question2Answer platform. |
|
Asked By |
SuperBlooper |
I am working with an ai for the game I am making in Godot, a 3d one, and as the title suggests I am looking for how to get a random position within a sphere to allow for randomized movement in the game (I have everything else set, I just need to know how to return a randomized point within a certain radius of a node.)
|
|
|
|
Reply From: |
Thomas Karcher |
You could create a vector for a random position on a unit sphere using one of the formulas described here and multiply this with a random scalar ranging from zero to your desired radius. Something like
func get_random_pos_in_sphere (radius : float) -> Vector3:
var x1 = rand_range (-1, 1)
var x2 = rand_range (-1, 1)
while x1*x1 + x2*x2 >= 1:
x1 = rand_range (-1, 1)
x2 = rand_range (-1, 1)
var random_pos_on_unit_sphere = Vector3 (
2 * x1 * sqrt (1 - x1*x1 - x2*x2),
2 * x2 * sqrt (1 - x1*x1 - x2*x2),
1 - 2 * (x1*x1 + x2*x2))
return random_pos_on_unit_sphere * rand_range (0, radius)
(Using Marsaglias method described in the article.)