flash中的向量 7 两球碰撞.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
flash中的向量 7 两球碰撞

flash中的向量 7 两球碰撞 flash中的向量(7)两球碰撞2010-08-13 10:112-D物体间的碰撞响应(首先说一点,这里所有的代码不用向量都可以写出,但用了向量可以使你思考问题时更能接近于实际,容易理解) 这次我要分析两个球体之间的碰撞响应,这样我们就可以结合以前的知识来编写一款最基本的2-D台球游戏了,虽然粗糙了点,但却是个很好的开始,对吗? 一、初步分析 中学时候上物理课能够认真听讲的人(我?哦,不包括我)应该很熟悉的记得:当两个球体在一个理想环境下相撞之后,它们的总动量保持不变,它们的总机械能也守恒。但这个理想环境是什么样的呢?理想环境会不会影响游戏的真实性?对于前者我们做出在碰撞过程中理想环境的假设: 1)首先我们要排除两个碰撞球相互作用之外的力,也就是假设没有外力作用于碰撞系统。 2)假设碰撞系统与外界没有能量交换。 3)两个球体相互作用的时间极短,且相互作用的内力很大。 有了这样的假设,我们就可以使用动量守恒和动能守恒定律来处理它们之间的速度关系了,因为1)确保没有外力参与,碰撞系统内部动量守恒,我们就可以使用动量守恒定律。2)保证了我们的碰撞系统的总能量不会改变,我们就可以使用动能守恒定律。3)两球发生完全弹性碰撞,不会粘在一起,没有动量、能量损失。 而对于刚才的第二个问题,我的回答是不会,经验告诉我们,理想环境的模拟看起来也是很真实的。除非你是在进行科学研究,否则完全可以这样理想的去模拟。 现在,我们可以通过方程来观察碰撞前后两球的速度关系。当两球球心移动方向共线(1-D处理)时的速度,或不共线(2-D处理)时共线方向的速度分量满足: (1)m1*v1+m2*v2=m1*v1+m2*v2(动量守恒定律) (2)1/2*m1*v1^2+1/2*m2*v2^2=1/2*m1*v1^2+1/2*m2*v2^2(动能守恒定律) 这里m1和m2是两球的质量,是给定的,v1和v2是两球的初速度也是我们已知的,v1和v2是两球的末速度,是我们要求的。好,现在我们要推导出v1和v2的表达式: 由(1),得到v1=(m1*v1+m2*v2-m2*v2)/m1,代入(2),得 1/2*m1*v1^2+1/2*m2*v2^2=1/2*m1*(m1*v1+m2*v2-m2*v2)^2+1/2*m2*v2^2 =v2=(2*m1*v1+v2*(m2– m1))/(m1+m2),则 =v1=(2*m2*v2+v1*(m1-m2))/(m1+m2) 我们现在得到的公式可以用于处理当两球球心移动方向共线(1-D处理)时的速度关系,或者不共线(2-D处理)时共线方向的速度分量的关系。不管是前者还是后者,我们都需要把它们的速度分解到同一个轴上才能应用上述公式进行处理。 二、深入分析 首先我要说明一件事情:当两球碰撞时,它们的速度可以分解为球心连线方向的分速度和碰撞点切线方向的分速度。而由于它们之间相互作用的力只是在切点上,也就是球心连线方向上,因此我们只用处理这个方向上的力。而在切线方向上,它们不存在相互作用的力,而且在理想环境下也没有外力,因此这个方向上的力在碰撞前后都不变,因此不处理。好,知道了这件事情之后,我们就知道该如何把两球的速度分解到同一个轴上进行处理。 现在看上面的分析图,s和t是我们根据两个相碰球m1和m2的位置建立的辅助轴,我们一会就将把速度投影到它们上面。v1和v2分别是m1和m2的初速度,v1和v2是它们碰撞后的末速度,也就是我们要求的。s是两球球心的位置向量,t是它的逆时针正交向量。s1是s的单位向量,t1是t的单位向量。 我们的思路是这样的:首先我们假设两球已经相碰(在程序中可以通过计算两球球心之间的距离来判断)。接下来我们计算一下s和t,注意s和t的方向正反无所谓(一会将解释),现在设m1球心为(m1x,m1y),m2球心为(m2x,m2y),则s为(m1x-m2x,m1y-m2y),t为s.rotateNew(PI/2) 再利用setLength(1)可以将两个向量归一,就得到了s和t的单位向量s1,t1. 现在s和t轴的单位向量已经求出了,我们根据向量点乘的几何意义,计算v1和v2在s1和t1方向上的投影值,然后将s轴上投影值代入公式来计算s方向碰撞后的速度。注意,根据刚才的说明,t方向的速度不计算,因为没有相互作用的力,因此,t方向的分速度不变。所以我们要做的就是:把v1投影到s和t方向上,再把v2投影到s和t方向上,用公式分别计算v1和v2在s方向上的投影的末速度,然后把得到的末速度在和原来v1和v2在t方向上的投影速度再合成,从而算出v1和v2。好,我们接着这个思路做下去: 先算v1(v1x,v1y)在s和t轴的投影值,分别设为v1s和v1t: v1s=v1.s1 v1t=v1.t1 再算

文档评论(0)

2017meng + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档