From 9a5db2ff8e745151f15281f40ab78fa55fa8ee6d Mon Sep 17 00:00:00 2001 From: rkrahn Date: Thu, 15 Feb 2024 14:51:55 -0800 Subject: [PATCH 1/2] Add NextUnitCircleVector2 extension method Adds the NextUnitCircleVector2 extension method which produces a Vector2 on a unit circle with a magnitude equal to the radius. --- Source/Engine/Utilities/Extensions.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/Source/Engine/Utilities/Extensions.cs b/Source/Engine/Utilities/Extensions.cs index a1834624e..dde5eb5c7 100644 --- a/Source/Engine/Utilities/Extensions.cs +++ b/Source/Engine/Utilities/Extensions.cs @@ -300,6 +300,18 @@ namespace FlaxEngine.Utilities var randomRadius = (float)random.NextDouble() * radius; return new Vector2((float)Math.Cos(random.NextDouble()) * randomRadius, (float)Math.Sin(random.NextDouble()) * randomRadius); } + + /// + /// Generates a random point on a circle of a given radius. + /// + /// An instance of . + /// Radius of circle. Default 1.0f./>. + /// A random . + public static Vector2 NextUnitCircleVector2(this Random random, float radius = 1.0f) + { + double randomDegree = random.NextDouble() * 360; + return new Vector2((float)Math.Cos(randomDegree) * radius, (float)Math.Sin(randomDegree) * radius); + } /// /// Generates a uniformly distributed random unit length vector point on a unit sphere. From 8aaf7417cc796f856cc811f9d3e8c2fef2b9f3f2 Mon Sep 17 00:00:00 2001 From: rkrahn Date: Mon, 19 Feb 2024 13:04:26 -0800 Subject: [PATCH 2/2] Fix NextUnitCircleVector2 degree to radian Fixes the use of degrees when radians should be used. --- Source/Engine/Utilities/Extensions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Utilities/Extensions.cs b/Source/Engine/Utilities/Extensions.cs index dde5eb5c7..5530673fc 100644 --- a/Source/Engine/Utilities/Extensions.cs +++ b/Source/Engine/Utilities/Extensions.cs @@ -309,8 +309,8 @@ namespace FlaxEngine.Utilities /// A random . public static Vector2 NextUnitCircleVector2(this Random random, float radius = 1.0f) { - double randomDegree = random.NextDouble() * 360; - return new Vector2((float)Math.Cos(randomDegree) * radius, (float)Math.Sin(randomDegree) * radius); + double randomRadian = random.NextDouble() * Mathf.RevolutionsToRadians; + return new Vector2((float)Math.Cos(randomRadian) * radius, (float)Math.Sin(randomRadian) * radius); } ///