private static void GenerateNodes(Vector3 location, Vector3 cubeSize, int nodesCount, List <Vector3> nodes) { for (int i = 0; i < nodesCount; i++) { nodes.Add(GraphGeneratorHelper.GetRandomCartesianCoordinates(cubeSize)); } }
public Vector3[] GenerateNodeSpiralLocations(SpiralGraphProperties spiralGraphProperties, out int[][] edges) { if (spiralGraphProperties.FloorsNodesCounts == null) { int[] floorNodesCounts = GraphGeneratorHelper.GenerateFloorNodesCounts(spiralGraphProperties.FloorsCount, -1, spiralGraphProperties.FloorsCount); spiralGraphProperties.FloorsNodesCounts = floorNodesCounts; } int nodesCount = spiralGraphProperties.FloorsNodesCounts.Sum(a => a); connections = new Edge[nodesCount, nodesCount]; Vector3[] nodesLocations = _spiralGraphGenerator.GenerateGraph(spiralGraphProperties, out edges); return(nodesLocations); }
public Vector3[] GenerateNodeConicLocations(ConicGraphProperties conicGraphProperties, out int[][] edges) { if (conicGraphProperties.FloorsNodesCounts == null) { int[] floorNodesCounts = GraphGeneratorHelper.GenerateFloorNodesCounts(conicGraphProperties.FloorsCount, -1, conicGraphProperties.FloorsCount); conicGraphProperties.FloorsNodesCounts = floorNodesCounts; } int nodesCount = conicGraphProperties.FloorsNodesCounts.Sum(a => a); connections = new Edge[nodesCount, nodesCount]; Vector3[] nodesLocations = _conicGraphGenerator.GenerateGraph(conicGraphProperties, out edges); return(nodesLocations); }
public Vector3[] GenerateGraph(IGraphProperties graphProperties, out int[][] edges) { List <Vector3> nodes = new List <Vector3>(); List <int[]> edgesList = new List <int[]>(); Vector3[] lastNodesFloor = null; Vector3[] currentNodesFloor = null; SpiralGraphProperties spiralGraphProperties = graphProperties as SpiralGraphProperties; float topY = spiralGraphProperties.Location.y + spiralGraphProperties.Height; float floorHeight = spiralGraphProperties.Height / (spiralGraphProperties.FloorsCount - 1); for (int floorNo = 0; floorNo < spiralGraphProperties.FloorsCount; floorNo++) { float floorY = spiralGraphProperties.Location.y + floorNo * floorHeight; float newConeHeight = topY - floorY; float floorRadius = spiralGraphProperties.BaseRadius * newConeHeight / spiralGraphProperties.Height; if (floorNo > 0) { lastNodesFloor = new Vector3[currentNodesFloor.Length]; currentNodesFloor.CopyTo(lastNodesFloor, 0); } Vector3 partSize = new Vector3(floorRadius / 2, floorHeight, floorRadius / 2); Vector3 floorOrigin = new Vector3(spiralGraphProperties.Location.x, floorY, spiralGraphProperties.Location.z); currentNodesFloor = GraphGeneratorHelper.GenerateNodeLocationsOnCircle(floorOrigin, floorRadius, spiralGraphProperties.FloorsNodesCounts[floorNo], spiralGraphProperties.RandomizationPercentage, partSize); nodes.AddRange(currentNodesFloor); edgesList.AddRange(GraphGeneratorHelper.GetEdgesInCircle(currentNodesFloor, nodes, true)); if (floorNo > 0) { edgesList.Add(new[] { nodes.IndexOf(lastNodesFloor[lastNodesFloor.Length - 1]), nodes.IndexOf(currentNodesFloor[0]) }); edgesList.AddRange(GraphGeneratorHelper.GetEdgesBetweenTwoSetsAllToAll(lastNodesFloor, currentNodesFloor, nodes, spiralGraphProperties.EdgesProbability)); } } edges = edgesList.ToArray(); return(nodes.ToArray()); }
private static void GenerateNodes(Vector3 location, int partsCount, float randomizationPercentage, Vector3 partSize, Vector3[,,] nodesMesh, List <Vector3> nodes) { for (int i = 0; i < partsCount; i++) { for (int j = 0; j < partsCount; j++) { for (int k = 0; k < partsCount; k++) { Vector3 randomVector3 = GraphGeneratorHelper.GetRandomCartesianCoordinates(partSize, randomizationPercentage); Vector3 node = new Vector3(location.x + i * partSize.x, location.y + j * partSize.y, location.x + k * partSize.z) + randomVector3; nodesMesh[i, j, k] = node; nodes.Add(node); } } } }
public Vector3[] GenerateGraph(IGraphProperties graphProperties, out int[][] edges) { List <Vector3> nodes = new List <Vector3>(); List <int[]> edgesList = new List <int[]>(); Vector3[] lastNodesFloor = null; Vector3[] currentNodesFloor = null; SphericGraphProperties sphericGraphProperties = graphProperties as SphericGraphProperties; float radiusPart = sphericGraphProperties.Radius / sphericGraphProperties.FloorsCount; Vector3 partSize = new Vector3(radiusPart / 2, radiusPart / 2, radiusPart / 2); for (int floorNo = 0; floorNo < sphericGraphProperties.FloorsCount; floorNo++) { float radiusFrom = sphericGraphProperties.Location.y + floorNo * radiusPart; float radiusTo = sphericGraphProperties.Location.y + (floorNo + 1) * radiusPart; if (floorNo > 0) { lastNodesFloor = new Vector3[currentNodesFloor.Length]; currentNodesFloor.CopyTo(lastNodesFloor, 0); } currentNodesFloor = GraphGeneratorHelper.GenerateNodeLocationsInSphereSlice( sphericGraphProperties.Location, radiusFrom, radiusTo, sphericGraphProperties.FloorsNodesCounts[floorNo], sphericGraphProperties.RandomizationPercentage, partSize); nodes.AddRange(currentNodesFloor); edgesList.AddRange(GraphGeneratorHelper.GetEdgesInCircle(currentNodesFloor, nodes)); if (floorNo > 0) { edgesList.AddRange(GraphGeneratorHelper.GetEdgesBetweenTwoSetsAllToAll(lastNodesFloor, currentNodesFloor, nodes, sphericGraphProperties.EdgesProbability, 2 * radiusPart)); } } edges = edgesList.ToArray(); return(nodes.ToArray()); }