ЗАДАНИЕ XIII

Выполняется совместно с лабораторной работой ХII.

Тема: Конструирование блока контроля над действиями обучаемого
Цель: Построение модели следящей за действиями обучаемого и обрабатывающей статистику

Перед началом работы необходимо:

владение основными приемами работы в MS Windows;
владение основными приемами работы в Stratum 2000.
выполнить лабораторную работу N XII.

Задание 1

Создайте в схеме, созданной на предыдущем занятии макет кольцевой дороги ,модель контролирующую действия обучаемого и обрабатывающую статистику. При отсутствии предыдущей лабораторной работы Вы имеете возможность загрузить ее.

  1. Откройте проект, созданный на предыдущем занятии.
  2. Нарисуйте макет кольцевой дороги. Сама дорога может быть произвольной формы, но должна образовывать замкнутое кольцо. Графические объекты, из которых состоит "проезжая часть" дороги, должны быть объединены в группу. Для этого необходимо нажать Ctrl-G и последовательно указать объекты, которые составят группу, для завершения нажать левую кнопку. Запомните номер получившейся группы (правая кнопка мышки на группе - Свойства - Инфо - дескриптор). Объект, представляющий собой машинку, поместите на точку старта (её можно выбрать произвольно), для того чтобы получить возможность определять где он находится, укажите в его свойствах (правая кнопка мышки на группе - Свойства - положение) что это невыбираемый объект.
  3. Создайте новый имидж (например Имидж2) с текстом:

    HANDLE HObject
    if (~f1 || ~f2)
    object := Float(HObject) // определяем номер объекта в текущих координатах
    on := (HObject == #46) // устанавливаем флаг если объект над проезжей частью

    s1 := s1 + not(~on) // подсчитываем сумму ошибок местоположения объекта
    s2 := s2 + ~f1- ~f2 // подсчитываем сумму движений по повороту объекта
    s3 := s3 + 1 // подсчитываем общее время

    b := GetAngleByXY(~x - ~xc,~yc - ~y) // находим угол объекта относительно центра дороги
    a := abs(~b - b) // определяем относительное изменение угла

    if ((a > 0) && (a < 1)) // если приращение существует
    angle := angle + a // вычисляем абсолютное приращение угла
    endif

    if (~angle > 2*PI) // если объект сделал круг
    q1 := round(~s1/s3,2)*100 // находим показатель нарушений движения
    q2 := round(~s2/s3,2)*100 // находим показатель плавности движения
    q3 := s3 // находим общее время
    oc := 5 - trunc(0.03*~q1 + min(0.05*(100-~q2) + 0.01*~q3/100000,1)) // вычисляем суммарную оценку

    str := "коэффициент нарушений : "+ String(~q1) +"%"+ chr(13) // строка для вывода
    str :=~str + "коэффициент плавности : " + String(~q2) +"%"+ chr(13)
    str :=~str + "время : " + String(~q3) + chr(13) + chr(13)
    str :=~str + "оценка : " + String(~oc)
    r := MessageBox(~str,"круг пройден",1) // выводим результаты

    Stop(1) // останавливаем схему
    endif
    endif


Задайте в переменных xc, yc примерный центр дороги, вместо "#63" , номер графической группы, составляющей проезжую часть. Создайте связь к имиджу машинки (1) созданному в предыдущем проекте и соедините соответственно переменные x c x0, y c y0, f1 c f1, f2 c f2.

  1. Установите на схему имидж Lamp из системной библиотеки СONTROLS.LIB.
    Установите цвета переменных Color - зеленый, BgColor - красный. Создайте связь к имиджу Имидж2. Соедините переменные Light и on.
  2. Установите на схему имидж ScanObject из системной библиотеки GRAPH2D.LIB.
    Создайте связь к имиджу Имидж2. Соедините соответственно переменные Hobject, x, y.
  3. Добавьте имидж NumberView для отображения угла.

lab013.gif (17122 bytes)