타겟 추적 알고리즘 예제 소스

2021. 10. 10. 17:46프로그래밍

반응형

타겟 특정 후 이동 추적 알고리즘

private void BeginTargetTrace()
        {
            try
            {
                Point mp = Mouse.GetPosition(this);
                Rect bearingRect = new Rect(174 + 83, 8 + 17, 1350, 183 - 17);
                Rect attChIndicateRect = new Rect(174 + 83, 8 + 183 + 17, 1350, 176);
                if (UtilsManager.IsMasterPos(Bearing, mp, bearingRect))                 {
                    double dBearing = Bearing.GetChkAngleByPos(mp.X - bearingRect.Left);
                    switch (DataManagerUnit1.BDTSystemInfo.unSensorIndex[0])
                    {
                        case 0:                        case 1:                            PublisherWideBandTarget(1, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                        case 4:                        case 5:                            PublisherWideBandTarget(2, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                        case 10:                            PublisherWideBandTarget(3, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                        case 2:                            PublisherNarrowBandTarget(4, 5, byte.MaxValue, 2, dBearing, 1); break;
                        case 6:                            PublisherNarrowBandTarget(5, 5, byte.MaxValue, 2, dBearing, 1); break;
                        case 7:                        case 8:                            PublisherNarrowBandTarget(6, 5, byte.MaxValue, 2, dBearing, 1); break;
                    }
                }
                else if (UtilsManager.IsMasterPos(ATTChannelIndicationLine, mp, attChIndicateRect))                 {
                    double dBearing = ATTChannelIndicationLine.GetChkAngleByPos(mp.X - attChIndicateRect.Left);
                    if (attChIndicateRect.Top < mp.Y && mp.Y <= attChIndicateRect.Top + 22)                         PublisherWideBandTarget(1, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode);
                    else if (attChIndicateRect.Top + 22 < mp.Y && mp.Y <= attChIndicateRect.Top + 44)                          PublisherNarrowBandTarget(4, 5, byte.MaxValue, byte.MaxValue, dBearing, 1);
                    else if (attChIndicateRect.Top + 44 < mp.Y && mp.Y <= attChIndicateRect.Top + 66)                         PublisherWideBandTarget(3, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode);
                    else if (attChIndicateRect.Top + 66 < mp.Y && mp.Y <= attChIndicateRect.Top + 88)                         PublisherInterceptTarget(byte.MaxValue, 1, byte.MaxValue, dBearing, 1);
                    else if (attChIndicateRect.Top + 88 < mp.Y && mp.Y <= attChIndicateRect.Top + 110)                         PublisherWideBandTarget(2, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode);
                    else if (attChIndicateRect.Top + 110 < mp.Y && mp.Y <= attChIndicateRect.Top + 132)                         PublisherNarrowBandTarget(5, 5, byte.MaxValue, byte.MaxValue, dBearing, 1);
                    else if (attChIndicateRect.Top + 132 < mp.Y && mp.Y <= attChIndicateRect.Top + 154)                         PublisherNarrowBandTarget(6, 5, byte.MaxValue, byte.MaxValue, dBearing, 1);
                    else if (attChIndicateRect.Top + 154 < mp.Y && mp.Y <= attChIndicateRect.Top + 176)                     {
                        switch (DataManagerUnit1.BDTSystemInfo.unSensorIndex[0])
                        {
                            case 0:                            case 1:                                PublisherWideBandTarget(1, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                            case 4:                            case 5:                                PublisherWideBandTarget(2, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                            case 10:                                PublisherWideBandTarget(3, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                            case 2:                                PublisherNarrowBandTarget(4, 5, byte.MaxValue, 2, dBearing, 1); break;
                            case 6:                                PublisherNarrowBandTarget(5, 5, byte.MaxValue, 2, dBearing, 1); break;
                            case 7:                            case 8:                                PublisherNarrowBandTarget(6, 5, byte.MaxValue, 2, dBearing, 1); break;
                        }
                    }
                }
                else                 {
                    double dBearing = Bearing.GetChkAngleByPos(mp.X - bearingRect.Left);
                    if (DataManagerUnit1.BDTSystemInfo.unSensorIndex[1].Equals(13))                     {
                        if (UtilsManager.IsMasterPos(MainWaterfall, mp, MainWaterfall.Tag as Rect?))
                        {
                            switch (DataManagerUnit1.BDTSystemInfo.unSensorIndex[0])
                            {
                                case 0:                                case 1:                                    PublisherWideBandTarget(1, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 4:                                case 5:                                    PublisherWideBandTarget(2, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 10:                                    PublisherWideBandTarget(3, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 2:                                    PublisherNarrowBandTarget(4, 5, byte.MaxValue, 2, dBearing, 1); break;
                                case 6:                                    PublisherNarrowBandTarget(5, 5, byte.MaxValue, 2, dBearing, 1); break;
                                case 7:                                case 8:                                    PublisherNarrowBandTarget(6, 5, byte.MaxValue, 2, dBearing, 1); break;
                            }
                        }
                    }
                    else                     {
                        if (UtilsManager.IsMasterPos(CompareWaterfall, mp, CompareWaterfall.Tag as Rect?))
                        {
                            switch (DataManagerUnit1.BDTSystemInfo.unSensorIndex[0])
                            {
                                case 0:                                case 1:                                    PublisherWideBandTarget(1, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 4:                                case 5:                                    PublisherWideBandTarget(2, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 10:                                    PublisherWideBandTarget(3, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 2:                                    PublisherNarrowBandTarget(4, 5, byte.MaxValue, 2, dBearing, 1); break;
                                case 6:                                    PublisherNarrowBandTarget(5, 5, byte.MaxValue, 2, dBearing, 1); break;
                                case 7:                                case 8:                                    PublisherNarrowBandTarget(6, 5, byte.MaxValue, 2, dBearing, 1); break;
                            }
                        }
                        else if (UtilsManager.IsMasterPos(CompareWaterfall2, mp, CompareWaterfall2.Tag as Rect?))
                        {
                            switch (DataManagerUnit1.BDTSystemInfo.unSensorIndex[1])
                            {
                                case 0:                                case 1:                                    PublisherWideBandTarget(1, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 4:                                case 5:                                    PublisherWideBandTarget(2, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 10:                                    PublisherWideBandTarget(3, 1, byte.MaxValue, dBearing, 1, (byte)DataManager._CMSHCI_MGR_TARGET_DESIGNATION_MODE_SET_RESPONSE.unDesignationMode); break;
                                case 2:                                    PublisherNarrowBandTarget(4, 5, byte.MaxValue, 2, dBearing, 1); break;
                                case 6:                                    PublisherNarrowBandTarget(5, 5, byte.MaxValue, 2, dBearing, 1); break;
                                case 7:                                case 8:                                    PublisherNarrowBandTarget(6, 5, byte.MaxValue, 2, dBearing, 1); break;
                            }
                        }
                    }
                }
            }
            catch (Exception ee)
            {
                TraceManager.AddLog(string.Format("{0}r\n{1}", ee.StackTrace, ee.Message));
                System.Diagnostics.Debug.WriteLine(string.Format("{0}r\n{1}", ee.StackTrace, ee.Message));
            }
        }
반응형