1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Вычисление углов многоугольника для задачи обратной кинематики

Тема в разделе "WASM.ZEN", создана пользователем AndreyMust19, 6 дек 2011.

  1. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Из всех форумов решил помучать именно вас.

    Нужно реализовать обратную кинематику. Подумав, остановился на алгоритме пропорциональных треугольников, когда между любыми 2-мя соседними костями - одинаковый угол.
    Пока задача чисто математическая. Углы alpha и beta - одинаковы.

    [​IMG]

    Нужно найти эти углы, зная только длины всех сторон. Знаю что сумма углов многоугольника = (N - 2) * 180, а в нашем случае N = кол-во костей + 1.
    Как решить такую задачу?
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Метод в лоб. Вычисляете матрицу вращения по углу между прямыми, вычисляете вектор по первой прямой, длиной равной второй прямой. Далее трансформируете вычисленный вектор вычисленной матрицей, получаете искомый вектор. Повторяете алгоритм (n - 1) раз.
     
  3. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Тоже кажется, что это "матричная задача".
    Исходная фигура может быть разложена в сумму трех симметричных - выпуклого N-угольника, N-звезды и смещение барицентра. Обратное преобразование и даст все искомые значения. Кстати, поищите книжку по теме - вдруг там что и готовое найдется:-)
     
  4. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    2.975
    AndreyMust19
    Приведите значения сторон
    Судя по тому что углы одинаковые наверное фигура симметричная? Может быть нужно строить треугольники от середины А1А5 и "плясать" от них?
     
  5. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.036
    AndreyMust19
    У тебя все точки лежат на на окружности, и если посмотреть на это дела из центра, то получаются три несложных уравнения, которые легко сводятся к одному:
    n*a=b
    2*R*sin(a/2)=L
    2*R*sin(b/2)=M
    n - число отрезков
    L - длина отрезка
    M - длина A1A5
    a - угол под которым отрезки видны из центра окружности
    b - угол под которым A1A5 виден из центра окружности
     
  6. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Black_mirror
    Любите вы придумывать сложности, находить проблемы в какую сторону от угла расположены прямые.
     
  7. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Насколько я (не)помню ВУЗовскую математику, с тем же успехом это может быть парабола или эллипс или пара ветвей гиперболы. А если точек будет не пять, а шесть, то кривой второго порядка, в общем случае их уже не описать.

    Хотя именно для пяти точек, возможно, действительно проще будет приведение к каноническому виду кривой втогого порядка (в симметричной форме), нахождение барицентра и обратное преобразование даст искомые углы.
     
  8. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Booster
    Если я не ошибаюсь, уже предлагаете алгоритм расчета координат сочленения для инверсной кинематики?
    Я не совсем понял, вы поворачиваете конечную кость на цель, двигаете ее к цели, затем переходите к след. кости и за цель считаете корень предыдущей кости?

    Не привязывайтесь к количеству сторон многоугольника, оно может быть разное. И кости могут быть разной длины! Это на рисунке их 4 и визуально они одинаковые.

    Еще можно добавить что:

    C < A12 + A23 + A34 + A45 + ... AN,N+1

    С - длина самой большой стороны с углами beta, A - длина стороны между точками, N - количество этих сторон.
    В противном случае (C больше) костям никак не дотянуться до цели.
     
  9. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Именно так. Длина и кол-во костей роли не играют. Что касается углов, то копайте в сторону якобиана.
     
  10. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Возвращаясь к #3. Мне кажется, очарование равенства углов мешает правильно взглянуть на вашу задачу. Представьте, что центр тяжести вашей фигуры находится в центре комплексной плоскости, а два набора переменных: "длины и углы" - соответствуют двум наборам переменных, названных "токи и напряжения". Тогда перед вами классическая электрическая многофазная несимметричная цепь, для которой с 1918 года известен (классический) метод расчета, предложенный Чарльзом Фортескью (матрица Фортескью): "Метод симметричных составляющих", детали которого можно найти в любом учебнике электротехники.
     
  11. gazlan

    gazlan Member

    Публикаций:
    0
    Регистрация:
    22 май 2005
    Сообщения:
    414
    Забыл добавить, а отредактировать не удается. Если зеркально отразить вашу фигуру относительно основания, то для "удвоенной" фигуры барицентр будет находиться на его середине, что еще больше упростит расчет.
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    [​IMG], где

    [​IMG]
    n+1 — число сторон
    a0...an-1 — длины примыкающих сторон, образующих углы альфа
    an — длина стороны, образующей углы бета со сторонами a0 и an-1.
     
  13. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Решил найти корень в Маткаде методом Given, Find. Как только маткад встречает суммирование в уравнении, бросает решать и говорит что "нет решения". Если расписать сумму, то на n = 3 (когда количество слагаемых в сумме = 3), он долго думает и в конце выдает что "уравнение не может здесь поместиться".
    При n = 1,2 выводит корень в символьном виде.
     
  14. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AndreyMust19
    Для n=2 это обычная теорема косинусов. Там корень найти — нечего делать.
     
  15. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    А для n > 2?
    Обратная кинематика для 3-х костей (0, 1, 2) у меня есть, интересует вариант с большим числом костей.
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    AndreyMust19
    Решать численными методами.
     
  17. AndreyMust19

    AndreyMust19 New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2008
    Сообщения:
    714
    Эх, а нужно конкретное уравнение корня. Численными методами - слишком много итераций в цикле.
     
  18. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Сказано уже было - Якобиан, гуглите. Читать умеете?