コード例 #1
0
ファイル: Voronoi.cs プロジェクト: ReDDarKwh/fortress-invader
        public static Voronoi relax(Voronoi voronoi, List <Point> toRelax = null)
        {
            var regions = voronoi.partioning();

            var points = new List <Point>(voronoi.points);

            foreach (var p in voronoi.frame)
            {
                points.Remove(p);
            }

            if (toRelax == null)
            {
                toRelax = voronoi.points;
            }
            foreach (var r in regions)
            {
                if (toRelax.Contains(r.seed))
                {
                    points.Remove(r.seed);
                    points.Add(r.center());
                }
            }

            return(build(points));
        }
コード例 #2
0
ファイル: Voronoi.cs プロジェクト: ReDDarKwh/fortress-invader
        public static Voronoi build(List <Point> vertices)
        {
            var minx = 1e+10;
            var miny = 1e+10;
            var maxx = -1e+9;
            var maxy = -1e+9;

            foreach (var v in vertices)
            {
                if (v.x < minx)
                {
                    minx = v.x;
                }
                if (v.y < miny)
                {
                    miny = v.y;
                }
                if (v.x > maxx)
                {
                    maxx = v.x;
                }
                if (v.y > maxy)
                {
                    maxy = v.y;
                }
            }
            var dx = (maxx - minx) * 0.5;
            var dy = (maxy - miny) * 0.5;

            var voronoi = new Voronoi(
                (float)(minx - dx / 2),
                (float)(miny - dy / 2),
                (float)(maxx + dx / 2),
                (float)(maxy + dy / 2));

            foreach (var v in vertices)
            {
                voronoi.addPoint(v);
            }

            return(voronoi);
        }