Разработчик, банкиром можешь ты не быть, но математиком – обязан!
Делал тут как-то курс по страхованию.
Дошел до такого слайда.
Естественно надо сделать какое-то проверочное задание.
Работнику проходящему этот курс считать ничего не надо (есть один человек, который все посчитает, построит график и «узаконит» его для всей компании. Остальные будут использовать его для анализа). Надо только понимать, какой риск, в какую область попадет, и принять соответствующее решение.
Ну и воспроизвожу тот же график, и прошу разбросать нужным образом точки.
А как организовать проверку? И понял, как мне повезло, что «Линия толерантности» прямая, хотя и под углом. А ведь могла быть и какая-нибудь кривулина типа такой
Для прямой все просто: берем Область нажатия, поворачиваем ее на нужный угол, лишнее прикрываем «заплатками».
Но ведь все время везти не может, поэтому решил «лучше день потерять, а потом за час долететь».
Проблема в том, что CourseLab все объекты «видит» прямоугольными. Даже круг из Автофигур без заливки для редактора – непрозрачный прямоугольник. И использовать стандартные объекты для «кривых» областей нельзя.
Значит надо использовать возможность возвращать координаты левого верхнего угла объекта ($OBJ_ID.x и $OBJ_ID.y) и сравнивать их с точками графика.
Следующий шаг – определение функции, по которой этот график построен, а точнее то что получилось на слайде.
Уравнение прямой: y=kx-b.
Угловой коэффициент: k=(y2-y1)/(x2-x1).
(x1,y1) – координаты левой верхней точки объекта (я использовал Линию из Автофигур).
(x2,y2)=(x1,y1) + размеры объекта.
Чтобы узнать свободный член – сделал копию моей прямой и вытянул ее до х=0, получилось y=-10.
В итоге: y=0,67x+10. Но b я отбросил – поправка на то, что пользователь попытается поставить точку на саму линию.
Внимание: следует помнить, что чем точка выше на слайде, тем координата y меньше!
Остается настроить действия!
Я там немного схитрил – поставил ограничения (если точку бросить вне плоскости графика, она вернется в исходное положение) и заблокировал возможность перетаскивания после помещения ее на плоскость (та что перетаскивалась скрывается, а из-за «границы» прилетает другая – статичная).
Этот метод еще хорош тем, что при выполнении задания позволяет безболезненно класть одну «точку» на другую (конфликта с перекрытием областей не возникает).
Но есть и минус этого метода. Привязываясь к координатам, страдает «ремонтопригодность» курса. Если после настройки придется переформатировать слайд и график сместиться, то придется все пересчитывать и перенастраивать.
Посмотреть, что получилось можно здесь, а скачать исходный проект в CourseLab 2,7 здесь.
Пожалуй, единственный существенный недостаток этого метода заключается в том, что работник, который рассчитывает «Линию толерантности», использует Excel или еще более мощные и специализированные программы. Я же, как разработчик курса, вынужден считать «в уме». Получается, что разработчик курса должен быть «сильнее» в этом компоненте, чем тот самый работник, и тем более чем те, которые будут проходить этот курс.
А может, я слишком усложняю?
Может, есть более простой способ оценки событий в нестандартных по форме областях на слайде в CourseLab?
Что скажите, коллеги?