예제 #1
0
        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);
        }
예제 #2
0
 public static bool Pass(AzimuthCell cell)
 {
     if (PassArea == null)
     {
         return(true);
     }
     return(PassArea.IsAngleInArea(cell.Angle));
 }
예제 #3
0
 public void SaveAzimuthCell(AzimuthCell data)   //添加周期数据
 {
     //data = _testDataGenerator.ModifyOriginalData(data);
     if (!AzimuthCellFilter.Pass(data))
     {
         return;
     }
     _currentMatrixIndex = NextIndex(_currentMatrixIndex);
     Matrix[_currentMatrixIndex]?.Dispose();
     Matrix[_currentMatrixIndex] = data;           //保存周期数据
 }
예제 #4
0
        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);
        }
예제 #5
0
        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;
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
        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);
        }
예제 #9
0
        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;
        }
예제 #10
0
        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);
        }
예제 #11
0
        public void NotifyNewCycleData(byte[] rawData)
        {
            AzimuthCell cell = new AzimuthCell(rawData);

            SaveAzimuthCell(cell);
        }