动画教程(七)完结

正向运动学
正向运动学(Forward kinematics,缩写:FK)中的运动是以系统的固定端为起始,在自由端进行运动。
反向运动学(Inverse kinematics,缩写:IK)则是向反的:运动以自由端为起始,回退到固定端,如果有的话。


通常情况下,下肢在行走时都看作是正向运动学。大腿的移动带动小腿的运动,小腿的移动带动脚的运动,最终让脚产生运动。
脚的运动不会决定其它部分的运动,它所带动的就是它本身,其位置根据下肢的位置来确定。
一个反向运动学的例子,就是用手拉某人。这里,力作用于自由端—— 手 ——控制手,前臂,大臂,以致整个身体的位置和运动。
说得更细一点,例如反向运动学是一支手伸出去拿东西,而手就传动了这个系统。当然,也可以说,大臂和前臂也是运动的,
它们控制了手的位置。没错,不过最直接的目的是把手放在某个特定的位置。这就是传动力。它不是一种实际的力,而是一种意图。
前臂和大臂只是根据结构的需要通过排列它们的位置来设置手的位置。
拖动和伸臂是一般的反向运动学,而一个重复的循环运动。


两种运动学编程都有如下基本要素:
■ 系统部件。我们称为关节(Segment)。
■ 各关节的位置。
■ 各关节的旋转。
每个关节的都会有一个末端作为枢轴,围绕它可以进行旋转。


余弦定理
这里有两个关节。左边的那个是固定端。它是固定住的,因此它的位置是已知的。我们要将自由端放到图中标出的位置。这
样就形成了一个任意三角形。我们可以轻松地求出两个端点间的距离——c 边。还知道每个关节的长度——a, b 边。因此就知
道了所有三条边的长度。只需要知道两个关节的两个角度——角B 和C。
c2 = a2 + b2 - 2 * a * b * cos C 
推出:
C = acos ((a2 + b2 - c2) / (2 * a * b))


   B = Math.acos((a * a + c * c - b * b) / (2 * a * c)); 
   C = Math.acos((a * a + b * b - c * c) / (2 * a * b));




布朗(随机)运动
在每一帧中,计算一个随机数加在运动物体的x 和y 速度中。随机的数值应该即可以是正数也可以是负数,并且一般来说都非常
小,比如范围从-0.1 到+0.1。
 vx += Math.random() * 0.2 - 0.1; 
 vy += Math.random() * 0.2 - 0.1;

当我们要让物体以无意识、无外力的形式运动时,那么布朗运动将是最为实用的。例如到处乱飞的苍蝇或蜜蜂。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值