Exemple #1
0
        public void Execute(TestParameters testParameters, TimeSpan duration, Action <double> fpsResult)
        {
            int pointCount  = testParameters.PointCount;
            int seriesCount = testParameters.PointCount;

            DataSeries = null;

            // Generate Data and mark time
            XyData[] xyData = new XyData[seriesCount];
            var      random = new Random();

            for (int i = 0; i < seriesCount; i++)
            {
                var generator = new RandomWalkGenerator(random.Next(0, int.MaxValue));
                xyData[i] = generator.GetRandomWalkSeries(pointCount);
            }

            // Append to SciChartSurface
            var allDataSeries = new IDataSeries[seriesCount];

            for (int i = 0; i < seriesCount; i++)
            {
                var dataSeries = new XyDataSeries <double, double>();
                dataSeries.Append(xyData[i].XData, xyData[i].YData);
                allDataSeries[i] = dataSeries;
            }
            DataSeries = allDataSeries;

            // Run test (just refresh)
            _testRunner        = new DispatcherTimerRunner(duration, () => this.sciChart.InvalidateElement(), fpsResult);
            sciChart.Rendered += _testRunner.OnSciChartRendered;
            _testRunner.Run();
        }
Exemple #2
0
        public void AddHitPercentageTrendPlot(string pilotName, string plotName, string tourTypeFilter, SortableList <StatsDomainObject> statsList)
        {
            Registry.GetPilotStats(pilotName).FighterScoresList.SortList("TourNumber", ListSortDirection.Ascending);
            var xy = new XyData(pilotName, plotName, null, null, Color.DarkOrange, statsList);

            _plots.Add(xy);

            // hmmm, im not 100% convinced this will add the data in the correct order??
            foreach (var score in
                     Registry.GetPilotStats(pilotName)
                     .FighterScoresList
                     .Where(score => score.TourType == tourTypeFilter))
            {
                xy.YData.Add((double)score.VsEnemyHitPercentageScore);
            }
        }
Exemple #3
0
    /**
     * 搜索算法
     */
    public static List <APoint> Search()
    {
        MinHeap heap = new MinHeap();     // 用最小堆来记录扩展的点

        XyData[] directs = new XyData[4]; // 可以扩展的四个方向
        //[{ x: 1, y: 0}, { x: 0, y: 1}, { x: -1, y: 0}, { x: 0, y: -1}];
        directs[0] = new XyData(1, 0);
        directs[1] = new XyData(0, 1);
        directs[2] = new XyData(-1, 0);
        directs[3] = new XyData(0, -1);

        heap.add(new PointData(Astar.mStartPos, 0, 0, null)); // 把起始点放入堆
        PointData lastData = null;                            // 找到的最后一个点的数据,用来反推路径

        for (bool finish = false; !finish && !heap.isEmpty();)
        {
            PointData data  = heap.getAndRemoveMin(); // 取出f值最小的点
            APoint    point = data.point;


            if (MapMgr.width <= point.x)
            {
                continue;
            }

            if (Astar.mRoadPointArr[point.x] == null)
            {
                continue;
            }

            if (Astar.mRoadPointArr[point.x][point.y] == TILEDMAP_TYPE.SPACE) // 将取出的点标识为已访问点
            {
                Astar.mRoadPointArr[point.x][point.y] = TILEDMAP_TYPE.VISITED;
            }

            for (int i = 0; i < directs.Length; ++i) // 遍历四个方向的点
            {
                APoint newPnt = new APoint(point.x + directs[i].x, point.y + directs[i].y);
                if (newPnt.x >= 0 && newPnt.x < MapMgr.width && newPnt.y >= 0 &&
                    newPnt.y < MapMgr.height)
                {
                    TILEDMAP_TYPE e = Astar.mRoadPointArr[newPnt.x][newPnt.y];
                    if (Astar.mEndPos.equals(newPnt)) // 如果是终点,则跳出循环,不用再找
                    {
                        lastData = data;
                        finish   = true;
                        break;
                    }
                    if (e != TILEDMAP_TYPE.SPACE) // 如果不是空地,就不需要再扩展
                    {
                        continue;
                    }

                    PointData inQueueData = heap.find(newPnt);
                    if (inQueueData != null) // 如果在堆里,则更新g值
                    {
                        if (inQueueData.g > data.g + 1)
                        {
                            inQueueData.g      = data.g + 1;
                            inQueueData.parent = data;
                        }
                    }
                    else // 如果不在堆里,则放入堆中
                    {
                        float     h       = Astar.h(newPnt);
                        PointData newData = new PointData(newPnt, data.g + 1, h, data);
                        heap.add(newData);
                    }
                }
            }
        }

        List <APoint> arr = new List <APoint>();

        // 反向找出路径
        for (PointData pathData = lastData; pathData != null;)
        {
            APoint pnt = pathData.point;
            if (Astar.mRoadPointArr[pnt.x][pnt.y] == TILEDMAP_TYPE.VISITED)
            {
                Astar.mRoadPointArr[pnt.x][pnt.y] = TILEDMAP_TYPE.ON_PATH;
                arr.Add(pnt);
            }
            pathData = pathData.parent;
        }
        return(arr);
    }
Exemple #4
0
        public void Execute(TestParameters testParameters, TimeSpan duration, Action <double> fpsResult)
        {
            int pointCount  = testParameters.PointCount;
            int seriesCount = testParameters.PointCount;

            DataSeries = null;

            using (sciChart.SuspendUpdates())
            {
                // Generate Data and mark time
                XyData[] xyData = new XyData[seriesCount];
                var      random = new Random();
                for (int i = 0; i < seriesCount; i++)
                {
                    var generator = new RandomWalkGenerator(random.Next(0, int.MaxValue));
                    xyData[i] = generator.GetRandomWalkSeries(pointCount);
                }

                // Append to SciChartSurface
                var allDataSeries = new IDataSeries[seriesCount];
                for (int i = 0; i < seriesCount; i++)
                {
                    var dataSeries = new XyDataSeries <double, double>()
                    {
                        DataDistributionCalculator = d
                    };
                    dataSeries.Append(xyData[i].XData, xyData[i].YData);
                    allDataSeries[i] = dataSeries;
                }
                DataSeries = allDataSeries;
                LineSeriesSource.SetStrokeThickness(sciChart, testParameters.StrokeThickness);
                LineSeriesSource.SetAntiAliasing(sciChart, testParameters.AntiAliasing);
                LineSeriesSource.SetDataSeries(sciChart, allDataSeries);

                sciChart.ZoomExtents();

                // Run test (just refresh)
                //int inc = 1;
            }

            System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
            sw.Restart();

            if (testParameters.TestRunner == TestRunnerType.Composition)
            {
                _testRunner = new CompositionTestRunner(duration, () =>
                {
                    // Make small changes to the YAxis Visible Range to trigger an update and cause some rescaling
                    //var currentRange = this.sciChart.YAxis.VisibleRange.AsDoubleRange();

                    double dY = (double)sw.ElapsedMilliseconds / 1000.0;
                    this.sciChart.YAxis.VisibleRange = new DoubleRange(-40 - dY, 40 + dY);
                    //this.sciChart.YAxis.VisibleRange.SetMinMax(-1 - dY, 1 + dY);
                    //inc = -inc;
                }, fpsResult);
            }
            else
            {
                _testRunner = new DispatcherTimerRunner(duration, () =>
                {
                    // Make small changes to the YAxis Visible Range to trigger an update and cause some rescaling
                    //var currentRange = this.sciChart.YAxis.VisibleRange.AsDoubleRange();
                    //this.sciChart.YAxis.VisibleRange = new DoubleRange(currentRange.Min - RangeIncrement, currentRange.Max + RangeIncrement);

                    //If not setting large scale enough, SciChart crashes randomly. (-30 ... 30) is not enough
                    double dY = (double)sw.ElapsedMilliseconds / 1000.0;
                    this.sciChart.YAxis.VisibleRange = new DoubleRange(-40 - dY, 40 + dY);
                    //inc = -inc;
                }, fpsResult);
            }


            sciChart.Rendered += _testRunner.OnSciChartRendered;
            _testRunner.Run();
        }
Exemple #5
0
        public void AddSimpleTrendPlot(string pilotName, string plotName, string statName, Color lineColour, SortableList <StatsDomainObject> statsList)
        {
            var xy = new XyData(pilotName, plotName, statName, null, lineColour, statsList);

            _plots.Add(xy);
        }
Exemple #6
0
        public void AddRatioTrendPlot(string pilotName, string plotName, string statNameDividend, string statNameDivisor, Color lineColour, SortableList <StatsDomainObject> statsList)
        {
            var xy = new XyData(pilotName, plotName, statNameDividend, statNameDivisor, lineColour, statsList);

            _plots.Add(xy);
        }