示例#1
0
        public INoise GetLandFormFct()
        {
            //INoise Temperature_fractal = new ScaleOffset(new Voronoi2(_seed, _freq, 0.8, new FractalFbm(new Perlin(7894), 2, 0.8)), 0.5, 0);
            INoise Temperature_fractal = new Voronoi2(_seed, _freq, 0.8);
            INoise ClampedValue        = new Clamp(Temperature_fractal, 0, 1);

            return(Temperature_fractal);
        }
示例#2
0
文件: Map.cs 项目: remy22/dx11
        private void BuildGraph(IEnumerable<Vector2> points, Voronoi2.Voronoi voronoi)
        {
            var libEdges = voronoi.Edges;
            var centerLookup = new Dictionary<Vector2, Center>();

            foreach (var point in points) {
                var p = new Center {
                    Index = _centers.Count,
                    Point = point,
                    Neighbors = new List<Center>(),
                    Borders = new List<Edge>(),
                    Corners = new List<Corner>()
                };
                _centers.Add(p);
                centerLookup[point] = p;
            }
            foreach (var p in _centers) {
                voronoi.Region(p.Point);
            }
            _cornerMap = new Dictionary<int, List<Corner>>();

            foreach (var libEdge in libEdges) {
                var dedge = libEdge.DelaunayLine();
                var vedge = libEdge.VoronoiEdge();

                var edge = new Edge {
                    Index = _edges.Count,
                    River = 0,
                    Midpoint = vedge.P0.HasValue && vedge.P1.HasValue ? Vector2.Lerp(vedge.P0.Value, vedge.P1.Value, 0.5f) : (Vector2?) null
                };
                _edges.Add(edge);

                edge.V0 = MakeCorner(vedge.P0);
                edge.V1 = MakeCorner(vedge.P1);
                edge.D0 = dedge.P0.HasValue ? centerLookup[dedge.P0.Value] : null;
                edge.D1 = dedge.P1.HasValue ? centerLookup[dedge.P1.Value] : null;

                if (edge.D0 != null) {edge.D0.Borders.Add(edge);}
                if (edge.D1 != null) {  edge.D1.Borders.Add(edge);}
                if (edge.V0 != null) {  edge.V0.Protrudes.Add(edge);}
                if (edge.V1 != null) {  edge.V1.Protrudes.Add(edge);}

                if (edge.D0 != null && edge.D1 != null) {
                    AddToCenterList(edge.D0.Neighbors, edge.D1);
                    AddToCenterList(edge.D1.Neighbors, edge.D0);
                }
                if (edge.V0 != null && edge.V1 != null) {
                    AddToCornersList(edge.V0.Adjacent, edge.V1);
                    AddToCornersList(edge.V1.Adjacent, edge.V0);
                }
                if (edge.D0 != null) {
                    AddToCornersList(edge.D0.Corners, edge.V0);
                    AddToCornersList(edge.D0.Corners, edge.V1);
                }
                if (edge.D1 != null) {
                    AddToCornersList(edge.D1.Corners, edge.V0);
                    AddToCornersList(edge.D1.Corners, edge.V1);
                }

                if (edge.V0 != null) {
                    AddToCenterList(edge.V0.Touches, edge.D0);
                    AddToCenterList(edge.V0.Touches, edge.D1);
                }
                if (edge.V1 != null) {
                    AddToCenterList(edge.V1.Touches, edge.D0);
                    AddToCenterList(edge.V1.Touches, edge.D1);
                }
            }
        }