/// <summary> /// Constructs a <see cref="CryEngine.BoundingSphere"/> that is the as large as the total combined area of the two specified spheres. /// </summary> /// <param name="value1">The first sphere to merge.</param> /// <param name="value2">The second sphere to merge.</param> /// <param name="result">When the method completes, contains the newly constructed bounding sphere.</param> public static void Merge(ref BoundingSphere value1, ref BoundingSphere value2, out BoundingSphere result) { Vec3 difference = value2.Center - value1.Center; float length = difference.Length; float radius = value1.Radius; float radius2 = value2.Radius; if (radius + radius2 >= length) { if (radius - radius2 >= length) { result = value1; return; } if (radius2 - radius >= length) { result = value2; return; } } Vec3 vector = difference * (1.0f / length); float min = MathHelpers.Min(-radius, length - radius2); float max = (MathHelpers.Max(radius, length + radius2) - min) * 0.5f; result.Center = value1.Center + vector * (max + min); result.Radius = max; }