Решения задачи с Ulearn

Практика «Решение манипулятора»

В том же проекте реализуйте метод MoveManipulatorTo в классе ManipulatorTask.

Он должен возвращать массив углов new[] {shoulder, elbow, wrist}, необходимых для приведения эффектора манипулятора в точку (x, y) относительно крепления манипулятора к столу, и с углом между последним суставом и горизонталью равному alpha в радианах.

Если это невозможно, то возвращайте массив из трех double.NaN.

Сверяйтесь с чертежом! Не перепутайте углы и их направления!

В том же файле напишите рандомизированный тест. Он должен генерировать случайные значения X, Y, Angle, вызывать MoveManipulatorTo, по углам вычислять позицию эффектора и проверять, что она совпадает с требуемой.

Эта ненавистная геометрия

Для решения этой задачи достаточно школьных знаний геометрии, однако поскольку наш курс посвящён программированию, и учитывая нелюбовь студентов к этой прекрасной области знаний, ниже дана схема геометрического решения этой задачи.

  1. Проще всего найти угол wrist. Сделать это можно по формуле wrist = –alpha – shoulder – elbow.
  2. Найдите координаты сустава Wrist по координатам (x, y) и углу alpha — они понадобятся в следующих шагах.
  3. Найдите угол elbow с помощью метода GetABAngle в треугольнике (shoulder, elbow, wrist), в котором все три стороны теперь известны.
  4. Найдите угол shoulder, как сумму двух углов:
    • угла (wrist, shoulder, elbow), который опять же можно найти с помощью метода GetABAngle.
    • и угла между лучом (shoulder, wrist) и осью OX. Его можно найти с помощью функции Math.Atan2 и координат сустава wrist.

Стоит заметить, что это не единственный способ решить данную задачу. Вы можете изобрести свой собственный.

Стоимость решения этой задачи всего 100 рублей, купи решения у меня 🙂

Обновлено: 25.11.2018 — 12:35

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.