我找到了一个网站,用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步是我不确定的地方。我知道如何制作点积,但我不知道如何得到他们所说的这个直角矢量。
由于
答案 0 :(得分:1)
“直角矢量”是一个与骨骼长度成直角的矢量。
如果你沿着它的长度推动骨头,它就不应该移动。在这种情况下,这个“直角矢量”和你的力矢量之间的角度是90度,因此点积为零。因此,骨骼的角度没有变化。
答案 1 :(得分:0)
右矢量是2D-inv-kinematics-sections图片中的R-Vector。它是与骨骼正交的归一化矢量。
一个小提示:矢量A和归一化矢量B的点积只是矢量A到矢量B直线的投影长度,它只是cos(角度)。更多详情:http://en.wikipedia.org/wiki/Dot_product#Geometric_interpretation
因此,如果目标矢量与右矢量几乎相同,则cos将接近1,并且算法将比目标矢量与骨骼几乎相同更正您的骨骼角度-vector(cos接近0)