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(); }
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); } }
/** * 搜索算法 */ 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); }
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(); }
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); }
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); }