Помогите понять 2D инверсную кинематику - PullRequest
1 голос
/ 03 июня 2011

Я нашел веб-сайт, который объясняет обратную кинематику в 2D:

Starting from the joint nearest the
end point:
1. Calculate a force vector from the end of the bone to the target.
2. Calculate the dot product of the force vector and the Right angle
vector.
3. Multiply it by a small value, like 0.01.
4. Add it to the angle of the joint.

http://freespace.virgin.net/hugo.elias/models/m_ik.htm

Таким образом, способ, которым кости разработаны в моем приложении, с точки зрения сустава и угла. Каждая «кость» - это сустав, угол и длина. Конечная точка кости - это единичный вектор ее начальной точки и угла, умноженный на ее длину.

Так что я думаю, что для шага 1 я просто генерирую единичный вектор, направление которого указывает на цель, и умножаю его на расстояние между конечной точкой и целевой точкой.

Шаг 2, где я не уверен. Я знаю, как получить точечное произведение, но я не уверен, как получить этот вектор под прямым углом, о котором они говорят.

Спасибо

Ответы [ 2 ]

1 голос
/ 03 июня 2011

«Вектор под прямым углом» - это вектор, который находится под прямым углом к ​​длине кости.

Если вы толкаете кость по ее длине, она не должна двигаться.В этом случае угол между этим «вектором прямого угла» и вектором вашей силы равен 90 градусам, и поэтому произведение точек равно нулю.Следовательно, без изменения угла кости.

0 голосов
/ 03 июня 2011

Правый вектор - это R-вектор на изображениях секций 2D-inv-kinematics. Это нормализованный вектор, ортогональный кости.

Небольшая подсказка: скалярное произведение вектора A и нормализованного вектора B - это просто проекция длины вектора A на прямую вектора B, которая является просто cos (углом). Подробнее здесь: http://en.wikipedia.org/wiki/Dot_product#Geometric_interpretation

В результате, если целевой вектор будет почти таким же, как правый вектор, то cos будет около 1, и алгоритм будет корректировать ваш угол кости больше, чем если целевой вектор будет почти таким же, как ваша кость. -вектор (cos около 0)

...