В том же проекте доработайте файл VisualizerTask.cs, чтобы заработала визуализация.
- В методе KeyDown сделайте так манипулятор реагировал на клавиши QASW таким образом:
- по Q увеличивает угол Shoulder на небольшую величину, а по A — уменьшает;
- по W увеличивает угол Elbow на небольшую величину, а по S — уменьшает;
- при любых изменениях пересчитывает бы Wrist по формуле Wrist = — Alpha — Shoulder — Elbow;
- В методе MouseMove менял бы X и Y в соответствии со значением из события. Имейте в виду, что ось Y в окне направлена вниз, а в математике — вверх. Поэтому координаты мыши нужно преобразовывать из оконной системы координат в логическую, а при отрисовке наоборот. X и Y в итоге должны хранить логические координаты указателя мыши, относительно shoulderPos — координат единственного неподвижного сустава. Преобразовать оконные координаты в логические и наоборот можно с помощью пары готовых функций ConvertMathToWindow и ConvertWindowToMath.
- В методе MouseWheel добавить обработку прокрутки колеса мыши. Оно должно менять Alpha.
- В методе UpdateManipulator вызвать ManipulatorTask.MoveManipulatorTo и обновить значения Shoulder, Elbow и Wrist (это понадобится в последней задаче). UpdateManipulator нужно вызывать после каждого изменения X, Y или Alpha, то есть в методах MouseMove и MouseWheel.
- В методе DrawManipulator допишите рисование манипулятора. Нарисуйте каждый сегмент манипулятора отрезком прямой, а каждый сустав — окружностью. Координаты сустава получите методом AnglesToCoordinatesTask.GetJointPositions. Не забудьте преобразовать логические координаты в оконные.
При запуске проекта в результате вы сможете управлять углами сгиба суставов манипулятора с помощью клавиатуры. А после выполнения следующих заданий, манипулятор должен будет следовать за курсором мыши.
1 2 3 4 5 6 7 8 |
// Вставьте сюда финальное содержимое файла VisualizerTask.cs using System; using System.Drawing; using System.Linq; using System.Windows.Forms; namespace Manipulation { |
Стоимость решения этой задачи всего 100 рублей, купи решения у меня 🙂