Задание 1. Построение схемы. Создайте в схеме, созданной на предыдущем занятии, макет кольцевой дороги и модель
Создайте в схеме, созданной на предыдущем занятии, макет кольцевой дороги и модель контролирующую действия обучаемого и обрабатывающую статистику.
1. Откройте проект, созданный на предыдущем занятии.
2. Нарисуйте макет кольцевой дороги. Сама дорога может быть произвольной формы, но должна образовывать замкнутое кольцо. Графические объекты, из которых состоит "проезжая часть" дороги, должны быть объединены в группу. Для этого необходимо нажать Ctrl-G и последовательно указать объекты, которые составят группу, для завершения нажать левую кнопку. Запомните номер получившейся группы (правая кнопка мышки на группе - Cвойства - Инфо - дескриптор). Объект, представляющий собой машинку, поместите на точку старта (её можно выбрать произвольно). Для того чтобы получить возможность определять, где он находится, укажите в его свойствах (правая кнопка мышки на группе - Свойства - положение) что это невыбираемый объект.
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.
4. Установите на схему имидж Lamp из системной библиотеки СONTROLS.LIB.
Установите цвета переменных Color - зеленый, BgColor - красный. Создайте связь к имиджу Имидж2. Соедините переменные Light и on.
5. Установите на схему имидж ScanObject из системной библиотеки GRAPH2D.LIB.
Создайте связь к имиджу Имидж2. Соедините соответственно переменные Hobject, x, y.
6. Добавьте имидж NumberView для отображения угла.
Форма отчета:Сохраните проект со своей работой и покажите преподавателю.
Выводы:Студенты должны научиться строить модели различной природы.
Вопросы к защите лабораторной работы
1.К какой библиотеки относится имидж ScanObject?
2. К какой библиотеке относится имидж Lamp?
- Лабораторная работа 13
Тема:Методы расчета полей. Механизм сообщений.
Цель: Краткое знакомство с работой сообщений в среде Stratum.
Общие сведения:
Сообщение посылается всем объектам с указанным именем или всем объектам указанного класса. Объект, отправляющий сообщение, называется источником сообщения, объекты, его получающие - приемниками сообщения.
При этом происходит копирование указанных переменных объекта источника сообщения в объект приемник, затем обработка модели объекта и копирование переменных обратно в объект источник. Если объектов приемников сообщений несколько, данная процедура повторяется.
Отправка сообщения объекту или группе объектов осуществляется функцией:
SendMessage(STRING ObjectName,STRING ClassName, [STRING VarName1, FLOAT VarName2...])
ObjectName | Задает имя объекта (объектов), получающего сообщение. Пустая строка, если данный параметр не специфицирован. |
ClassName* | Задает имя класса объекта (объектов), получающего сообщение. Пустая строка, если данный параметр не специфицирован. |
VarName1 | Имя связываемой переменной в объекте-отправителе сообщения. |
VarName2 | Имя связываемой переменной в объекте-получателе сообщения. |
* Если заданно только имя класса, то посылается сообщение всем имиджам данного класса.
Порядок выполнения лабораторной работы: