/// <summary> /// Apodize the pulse /// </summary> /// <param name="symmetryPulse">The input pulse which has been symmetrized</param> public void Apodize(double[] symmetryPulse) { var centerBurst = symmetryPulse.Length / 2; var rampArray = RampGenerator.Ramp(symmetryPulse.Length, centerBurst); Functions.MultiplyInPlace(symmetryPulse, rampArray); }
public void Process(Map map, MapInfo info) { var generator = new RampGenerator(info.MapId); foreach (var startingPosition in info.StartingPositions) { if (!info.IsCancellationRequested) { //data.FlattenedAreas.Add(new Math.Circle(map.CoordinatesToPosition(startingPosition), data.BaseRadius * Map.TileWidth)); generator.GenerateFlatArea(map, startingPosition, map.HeightMap[startingPosition.X, startingPosition.Y], info.BaseRadius, Radius * Map.TileWidth); } } }
public void Process(Map map, MapInfo info) { this.map = map; this.info = info; this.rampGenerator = new RampGenerator(info.MapId); var crossroads = from n in info.Roads.Nodes where n.Neighbors.Count > 2 select n; foreach (var crossroad in crossroads) { var coordinates = map.PositionToCoordinates(crossroad.Position); rampGenerator.GenerateFlatArea(map, coordinates, map.HeightMap[coordinates.X, coordinates.Y], crossroadFlatteningRadius, 15); } rampGenerator.RandomOffsetSeed = null; var visited = new List <RoadGraphNode>(); var nodes = from n in info.Roads.Nodes let coordinates = map.PositionToCoordinates(n.Position) orderby map.HeightMap[coordinates.X, coordinates.Y] select n; foreach (var node in nodes) { if (info.IsCancellationRequested) { return; } foreach (var neighbor in node.Neighbors.Except(visited)) { FlattenRoad(node, neighbor); } visited.Add(node); } // try to fix visual artifacts for (int x = 0; x < info.Tiles.Width; x++) { for (int y = 0; y < info.Tiles.Height; y++) { if (map.HeightMap[x, y] > 1 && info.Tiles[x, y].HasFlag(TileInfo.Road)) { map.HeightMap[x, y] -= 2; } } } }
public void Process(Map map, MapInfo info) { var graph = new TileGraph(info.Tiles, TileInfo.Free); var generator = new RampGenerator(info.MapId); foreach (var area in info.FlattenedAreas) { if (info.IsCancellationRequested) { return; } var coordinates = map.PositionToCoordinates(area.Center); var height = (byte)graph.GetNeighbors(coordinates, (int)(area.Radius / Map.TileWidth) + 3, true, true).Average(c => map.HeightMap[c.X, c.Y]); generator.GenerateFlatArea(map, coordinates, height, (int)(area.Radius / Map.TileWidth), area.Radius); } }