public AzimuthCell ModifyOriginalData(AzimuthCell originalData) { originalData.DisCells.Clear(); DistanceCell cell1 = new DistanceCell { az = originalData.Angle, index = 100, el = 10, sumAM = 100000 }; //double height = Math.Sin(Tools.DegreeToRadian(cell1.el)) * cell1.Distance; DistanceCell cell2 = new DistanceCell { az = originalData.Angle, index = 200, el = 15, sumAM = 100000 }; originalData.DisCells.Add(100, cell1); originalData.DisCells.Add(200, cell2); return(originalData); }
public static bool Pass(AzimuthCell cell) { if (PassArea == null) { return(true); } return(PassArea.IsAngleInArea(cell.Angle)); }
public void SaveAzimuthCell(AzimuthCell data) //添加周期数据 { //data = _testDataGenerator.ModifyOriginalData(data); if (!AzimuthCellFilter.Pass(data)) { return; } _currentMatrixIndex = NextIndex(_currentMatrixIndex); Matrix[_currentMatrixIndex]?.Dispose(); Matrix[_currentMatrixIndex] = data; //保存周期数据 }
private bool ShouldSaveData(AzimuthCell data) { if (data.DisCells.Count == 0) //没有距离单元格,直接返回false { return(false); } bool isPreviousDataNull = Matrix[_currentMatrixIndex] == null; var isAngleNearPreviousData = !isPreviousDataNull && Math.Abs(data.Angle - Matrix[_currentMatrixIndex].Angle) < 0.175780; return(!isAngleNearPreviousData); }
public static List<TargetAreaEdge> GetAzCellTargetAreaEdges(AzimuthCell azCell) { List<TargetAreaEdge> ret = new List<TargetAreaEdge>(); foreach (var disCellIndex in azCell.DisCells.Keys) { if (azCell.DisCells[disCellIndex].Occupied) continue; TargetAreaEdge edge = GetDisCellTargetAreaEdge(azCell.DisCells[disCellIndex].index, azCell); if (edge != null) ret.Add(edge); } return ret; }
private AzimuthCell RemoveDistanceBelow(AzimuthCell cell, int dis) { Dictionary <int, DistanceCell> newCells = new Dictionary <int, DistanceCell>(); foreach (int key in cell.DisCells.Keys) { if (key > dis) { newCells.Add(key, cell.DisCells[key]); } } cell.DisCells = newCells; return(cell); }
public void GetTargetAreasTest() { AzimuthCell azCell = new AzimuthCell(); DistanceCell disCell1 = new DistanceCell { index = 10 }; DistanceCell disCell2 = new DistanceCell { index = 11 }; DistanceCell disCell3 = new DistanceCell { index = 12 }; DistanceCell disCell4 = new DistanceCell { index = 13 }; DistanceCell disCell5 = new DistanceCell { index = 15 }; DistanceCell disCell6 = new DistanceCell { index = 100 }; DistanceCell disCell7 = new DistanceCell { index = 101 }; DistanceCell disCell8 = new DistanceCell { index = 122 }; DistanceCell disCell9 = new DistanceCell { index = 132 }; azCell.DisCells.Add(10, disCell1); azCell.DisCells.Add(11, disCell2); azCell.DisCells.Add(12, disCell3); azCell.DisCells.Add(13, disCell4); azCell.DisCells.Add(15, disCell5); azCell.DisCells.Add(100, disCell6); azCell.DisCells.Add(101, disCell7); azCell.DisCells.Add(122, disCell8); azCell.DisCells.Add(132, disCell9); //List<TargetAreaEdge> ret = FourSevenClotter.GetTargetAreaEdges(azCell); Assert.IsTrue(true); }
public AzimuthCell ModifyOriginalData(AzimuthCell originalData) { originalData.DisCells.Clear(); AngleArea testAngleArea = new AngleArea(0f, 33.75f); AngleArea testAngleArea1 = new AngleArea(20f, 25f); //if (testAngleArea.IsAngleInArea(realData.Angle) /*|| testAngleArea1.IsAngleInArea(realData.Angle)*/) if (!testAngleArea1.IsAngleInArea(originalData.Angle)) { DistanceCell distanceCell = new DistanceCell() { index = 300, sumAM = 100000, az = originalData.Angle }; originalData.DisCells.Add(300, distanceCell); return(originalData); } return(null); }
public static TargetAreaEdge GetDisCellTargetAreaEdge(int distanceCellIndex, AzimuthCell azimuthCell) { int upperIndex = distanceCellIndex + 1; //fpga发送的数据是按距离从近至远排序的,所以只要搜索距离增长的相邻单元格 if (azimuthCell.DisCells[distanceCellIndex].Occupied) //当前单元格已被其他区域占用 return null; //返回空,表示没有区域 //当前单元格未被其他区域占用 azimuthCell.DisCells[distanceCellIndex].Occupied = true; //标记单元格被占用 List<DistanceCell> disCells = new List<DistanceCell>() { azimuthCell.DisCells[distanceCellIndex] }; TargetAreaEdge ret = new TargetAreaEdge(disCells); if (!azimuthCell.DisCells.ContainsKey(upperIndex)) //没有有相邻单元格 return ret; //有相邻单元格 if (!azimuthCell.DisCells[upperIndex].Occupied) //相邻单元格未被其他区域占用 ret = ret.Merge(GetDisCellTargetAreaEdge(upperIndex, azimuthCell)); //递归调用此函数,寻找相邻单元格的相邻单元格 //相邻单元格被其他区域占用 return ret; }
public AzimuthCell ModifyOriginalData(AzimuthCell originalData) { //AngleArea testAngleArea1 = new AngleArea(20f, 30f); if (!movementArea.IsAngleInArea(originalData.Angle)) { return(null); } originalData.DisCells.Clear(); TimeSpan interval = DateTime.Now - _lastRefreshTime; _lastRefreshTime = DateTime.Now; Distance += TargetSpeed * interval.TotalSeconds; //Console.WriteLine(Distance); int distanceCellIndex = (int)(Distance / 2.92f); DistanceCell distanceCell = new DistanceCell() { index = distanceCellIndex, sumAM = 100000, az = originalData.Angle }; originalData.DisCells.Add(distanceCellIndex, distanceCell); return(originalData); }
public void NotifyNewCycleData(byte[] rawData) { AzimuthCell cell = new AzimuthCell(rawData); SaveAzimuthCell(cell); }