Моделирование поведения спортсмена на дистанции в спортивной радиопеленгации (Часть 2) В предыдущей заметке были высказаны основные соображения по построению модели поведения спортсмена на дистанциях в спортивной радиопеленгации. Настала пора привести пример описания интерфейсов к классам реализующим функции объектов и субъектов рассматриваемой задачи. (Пример на языке Паскаль) unit uFoxObjects; //модуль описания классов //моделирующих поведение спортсмена на дистанции //в спортивной радиопеленгации interface uses uSportObjects, XKernelObjects, Types; type TFoxNumber = 1..5; //сектор обзора ISector = interface (XObject) ['{769B59DE-D6BA-4C18-A4D2-93AEBA8CB012}'] property Angle: real; //угол обзора property Diameter: real; //диаметр образующей end; //передатчик ITX = interface (XObject) ['{F6873B4D-E012-46F5-B611-32E02E932E43}'] //координаты property Place: TPoint; //мощность property Power: real; end; //пеленгатор IPelengator = interface (XObject) ['{662B5DCB-DEB4-40D5-90D1-BDDC28AC3D43}'] //напряжение в антенне создаваемое полем передатчика вольт function GetPower (aTX: ITX; aPlace: TPoint): real; //пеленг на передатчик (градусы) function GetPeleng (aTX: ITX; aPlace: TPoint): real; end; //отметка ISplit = interface (XObject) ['{1EB7AB5D-69B4-4F20-99B2-3B887AE183A1}'] property Number: TFoxNumber; property Time: TDateTime; end; //набор отметок ISplits = interface (XContainer) ['{B3952BF8-9F7° C-4892-B36B-B6007C7A9FF6}'] end; //контрольная карточка IChip = interface (XObject) ['{7DC3FE30-023D-4050-BED2-14C709A7F47D}'] procedure AddSplit (aSplit: ISplit); end; //пеленг IPeleng = interface (XObject) ['{6AF7EB90-091F-417D-88E1-442602723CFB}'] //номер property Number: TFoxNumber; //точка откуда нарисован property StartPlace: TPoint; //азимут property Angle: real; //сила сигнала property Power: real; end; //планшет IPlanshet = interface (XObject) ['{71169068-8961-4533-A464-8DB9254EE90B}'] //"нарисовать" пеленг procedure AddPeleng (aNumber: TFoxNumber; aPlace: TPoint; aAngle: real; aPower: real); //получить местоположение (оценку) передатчика function GetFoxPlace (aNumber: TFoxNumber): TPoint; end; IRadioSportsman = interface (ISportsMan) ['{EEA1FE4A-608B-40BE-AE90-28D4656A0EE9}'] //----свойства описывающие качества спортсмена--- //Нормальный темп бега (Скорость бега «в паузу») (мин/км) property NormalRate: real; //Максимальная скорость бега (Скорость бега во время сеанса обнаруживаемого КП) property MaxRate: real; //Точность движения по известному азимуту (дисперсия) property AzimutDispersion: real; //Точность движения на работающий передатчик во время сеанса (кривизна) //кривизна определяется коэффицентом — отношением длинны дуги к длинне хорды property Curves: real; //Размер и форма зоны обзора при поиске в паузу //зона обзора представляет сектор круга и определяется его диаметром и углом //единицы соответственно метры и градусы property SectorOfReview: ISector; //Навык оценки расстояния до лисы – умеет/не умеет property SkillDistance: boolean; //Точность оценки расстояния до лисы (дисперсия) property DistanceDispersion: real; //Навык определения (и измерения!) пеленга – умеет/не умеет property SkillPeleng: boolean; //Точность определения (и измерения!) пеленга property PelengDispersion: real; //Навык нанесения пеленга – умеет/не умеет property SkillGraph: boolean; //Точность нанесения пеленга property GraphDispersion: real; //Навык определения своего местонахождения на карте. //Будем характеризовать диаметром круглого «пятна» // в котором спортсмен представляет свое местоположение // во время преодоления дистанции по спортивной радиопеленгации. property PlaceDiameter: real; //--------------------------------- //----свойства описывающие состояние спортсмена--- //координаты спортсмена-реальные property Place: TPoint; //координаты спортсмена-в его понимании property ModelPlace: TPoint; //----объекты, которыми владеет спортсмен--- //пеленгатор property Pelengator: IPelengator; //контрольная карточка property Chip: IChip; //планшет property Planshet: IPlanshet; end; implementation end. Приведенный выше код подробно прокомментирован и не должен вызывать вопросов. Возможно, по мере дальнейшего описания модели поведения мы будем проводить рефакторинг и перерабатывать описанные классы. Как я уже писал в первой части — цель разработки — спрогнозировать (угадать) результат спортсмена на соревнованиях по спортивной радиопеленгации. «Прогнозирование — искусство возможного» (В. А. Цыбатов). Нам прогноз поможет не только предугадать результат, но и более точно определить расчетное время прохождения дистанции по спортивной радиопеленгации. Ну а для тех, кому все это неинтересно — можно предложить другой способ прогноза — с помощью толкования снов. Например, к чему снятся зубы? Прогнозировать на математической модели или смотреть сны и толковать их с помощью сонника — выбор за вами:P |