private static void sphere_recurse(Vector3 center, float radius, MeshNode node, Queue <KeyValuePair <MeshNode, MeshNode> > splitQueue) { List <MeshNode> edgesCopy = new List <MeshNode>(node.edges); node.visited = true; for (int i = 0; i < edgesCopy.Count; i++) { if (edgesCopy[i].visited == false && node.IsHypotenuse(edgesCopy[i])) { splitQueue.Enqueue(new KeyValuePair <MeshNode, MeshNode>(node, edgesCopy[i])); } } for (int i = 0; i < edgesCopy.Count; i++) { if (edgesCopy[i].visited == false) { sphere_recurse(center, radius, edgesCopy[i], splitQueue); } } }