Пример #1
0
        /// <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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        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;
                    }
                }
            }
        }
Пример #4
0
        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);
            }
        }