private static void circle_recurse(Vector3 center, Vector3 circleCenter, float radius, MeshNode node) { List <MeshNode> edgesCopy = new List <MeshNode>(node.edges); node.visited = true; for (int i = 0; i < edgesCopy.Count; i++) { if (edgesCopy[i].visited == false) { Vector3 position = node.GetEdgeCenter(edgesCopy[i]); position = circleCenter + (position - circleCenter) * Mathf.Abs(radius / ((position - circleCenter).magnitude)); node.SplitEdge(edgesCopy[i], position, position - center).visited = true; } } for (int i = 0; i < edgesCopy.Count; i++) { if (edgesCopy[i].visited == false) { circle_recurse(center, circleCenter, radius, edgesCopy[i]); } } }