Example #1
0
        public void Run(List <FortuneSite> sites, PoolLinkedList <VEdge> edges, double minX, double minY, double maxX, double maxY)
        {
            eventQueue.Initialize(5 * sites.Count);
            beachLine.Clear();
            deleted.Clear();

            foreach (var s in sites)
            {
                var fEvent = ObjectPool <FortuneSiteEvent> .Get();

                fEvent.Initialize(s);
                eventQueue.Insert(fEvent);
            }

            //init edge list
            while (eventQueue.Count != 0)
            {
                var fEvent = eventQueue.Pop();
                if (fEvent is FortuneSiteEvent)
                {
                    beachLine.AddBeachSection((FortuneSiteEvent)fEvent, eventQueue, deleted, edges);
                    ObjectPool <FortuneSiteEvent> .Recycle((FortuneSiteEvent)fEvent);
                }
                else
                {
                    if (deleted.Contains((FortuneCircleEvent)fEvent))
                    {
                        deleted.Remove((FortuneCircleEvent)fEvent);
                    }
                    else
                    {
                        beachLine.RemoveBeachSection((FortuneCircleEvent)fEvent, eventQueue, deleted, edges);
                    }
                    ObjectPool <FortuneCircleEvent> .Recycle((FortuneCircleEvent)fEvent);
                }
            }


            //clip edges
            var edgeNode = edges.First;

            while (edgeNode != null)
            {
                var edge = edgeNode.Value;
                var next = edgeNode.Next;

                var valid = ClipEdge(edge, minX, minY, maxX, maxY);
                if (!valid)
                {
                    edges.Remove(edgeNode);
                    if (edgeNode.Value.Neighbor != null)
                    {
                        ObjectPool <VEdge> .Recycle(edgeNode.Value.Neighbor);
                    }
                    ObjectPool <VEdge> .Recycle(edgeNode.Value);
                }
                //advance
                edgeNode = next;
            }
        }
Example #2
0
        public static void Main(string[] args)
        {
            var r       = new Random();
            var watch   = new Stopwatch();
            var times   = new long[MAX_N, SAMPLES];
            var fortune = new FortunesAlgorithm();

            var output = new PoolLinkedList <VEdge>();

            for (var point = 1; point *INC <= MAX_N; point++)
            {
                var numPoints = point * INC;
                Console.WriteLine($"Running for n = {numPoints}");
                for (var sample = 1; sample <= SAMPLES; sample++)
                {
                    Console.WriteLine($"\tRunning sample {sample}");
                    watch.Reset();
                    var points = GenPoints(numPoints, r);
                    watch.Start();
                    fortune.Run(points, output, 0, 0, WIDTH, HEIGHT);
                    watch.Stop();
                    output.Clear((edge) =>
                    {
                        if (edge.Neighbor != null)
                        {
                            ObjectPool <VEdge> .Recycle(edge.Neighbor);
                        }
                        ObjectPool <VEdge> .Recycle(edge);
                    });
                    times[point - 1, sample - 1] = watch.ElapsedMilliseconds;
                }
            }

            var outFile   = File.CreateText("timings.csv");
            var excelFile = File.CreateText("excelTimings.csv");

            outFile.Write("N, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10" + Environment.NewLine);
            excelFile.Write("N, T (ms)" + Environment.NewLine);
            for (var i = 1; i *INC <= MAX_N; i++)
            {
                var s = i * INC + ", ";
                for (var j = 0; j < SAMPLES - 1; j++)
                {
                    s += times[i - 1, j] + ", ";
                }
                s += times[i - 1, SAMPLES - 1] + Environment.NewLine;
                outFile.Write(s);

                for (var j = 1; j <= SAMPLES; j++)
                {
                    excelFile.Write(i * INC + ", " + times[i - 1, j - 1] + Environment.NewLine);
                }
            }
            outFile.Dispose();
            excelFile.Dispose();
        }
Example #3
0
 protected override void Initialize()
 {
     //set full screen
     graphics.PreferredBackBufferHeight = graphics.GraphicsDevice.DisplayMode.Height;
     graphics.PreferredBackBufferWidth  = graphics.GraphicsDevice.DisplayMode.Width;
     graphics.ToggleFullScreen();
     IsMouseVisible = true;
     points         = new List <FortuneSite>();
     edges          = new PoolLinkedList <VEdge>();
     delaunay       = new List <Tuple <Vector2, Vector2> >();
     keyboard       = Keyboard.GetState();
     mouse          = Mouse.GetState();
     fortune        = new FortunesAlgorithm();
     r         = new Random(100);
     help      = new Rectangle(0, 0, 285, 180);
     helpColor = new Color(Color.Black, (float).5);
     base.Initialize();
 }