其实,虽然说的是3d空间中的,但事实上一旦掌握原理,他可以用在任意维度的空间中;

为了简化代码,最好能够满足如下要求:

所有的空间属性都用矢量来表示:比如位置,速度,加速度(虽然这里涉及不到加速度);

基本思路:

1、首先取得两个球体的位置差,这是一个矢量

var linkVec:Vector3D=ball1.position.subtract(ball2.position);

这时候要注意因为我们是用ball1减去ball2 所以这个矢量方向应该是指向ball1的

2、然后将这个矢量归一化,并将归一化之后的矢量乘以ball1的速度,这样我们就得到了ball1在两球连线方向的速度大小了:

linkVec.normalize();
      var v1:Number=ball1.velocity.dotProduct(linkVec);

3、用v1乘以linkVec就得到了ball1在两球连线方向的速度了,注意他和v1的区别,后者是标量没有方向。因为这个我们要把这个速度赋给球2(为什么?如果两球的质量相等的话,那么根据动量守恒,能量守恒两球的速度交换),所以将其命名为parallV2
      linkVec.scaleBy(v1);

var parallV2:Vector3D=linkVec.clone();

同时用ball1的速度减去这个linkVec就得到了ball1垂直于连线的方向
      var perpendV1:Vector3D=_list[i].velocity.subtract(linkVec);

4、将linkVec归一反转,再对ball2的速度进行截取保存
      linkVec.normalize();
      linkVec.negate();//此时linkVec指向球2

var v2:Number= ball2.velocity.dotProduct(linkVec);
      linkVec.scaleBy(v2);
      var perpendV2:Vector3D=_list[j].velocity.subtract(linkVec);
      var parallV1:Vector3D=linkVec.clone();

5、将保存的各个速度对应相加赋值给ball1,ball2
      ball1.velocity=parallV1.add(perpendV1);
      ball2.velocity=parallV2.add(perpendV2);

3d空间中球体的动量守恒相关推荐

  1. 使3D空间中物体朝向和其速度方向一致的旋转矩阵计算方案

    在3D空间中的物体以某一速度运动,有时候需要这个物体的朝向和速度的方向一致, 为了实现这个目标我们一般借助旋转矩阵 M 来将物体旋转到对应的朝向. 例如速度方向矢量 spdV: Vector3D(1, ...

  2. 使用脑电图慢皮层电位重建3D空间中的手,肘和肩的实际和想象的轨迹

    导读 从神经活动中解码想象运动的运动学的能力对于开发可以帮助行动不便的人的假肢设备至关重要.当前采用脑电图(EEG)等无创记录方法解码实际和想象的手运动轨迹来控制神经运动假体,通常通过应用多维线性回归 ...

  3. 在3D空间中绘制四边形

    在3D空间中绘制四边形 四边形 GL_QUADS OpenGL的GL_QUADS图元用于绘制四边形,它根据每四个顶点绘制一个四边形. 注意,在使用四边形时,必需记住一个重要规则:一个四边形的四个角必须 ...

  4. 3D 空间中拟合曲线

    算法来源:C++/PCL:最小二乘拟合平面直线,平面多项式曲线,空间多项式曲线 以下是我改写的算法,未经验证正确性!!! // 3D 空间中拟合曲线 void fittingPolynomial3D( ...

  5. 3D空间中的点坐标转化为屏幕二维点坐标(一)

    每个人在进入计算机图形学的世界中,都有一个同样的困惑,三维世界中的三维坐标是如何被转换成屏幕上的二维坐标的,我如何在屏幕上找到一个点(二维点)对应三维世界中的点(三维点)呢? 要理解其中的过程,对学习 ...

  6. 一般向量空间的基变换_向量几何--3-D空间中的基变换与坐标变换【转】 - 回到未来 - C++博客...

    <6>3-D空间中的基变换与坐标变换-Twinsen编写 -本人水平有限,疏忽错误在所难免,还请各位数学高手.编程高手不吝赐教 -我的Email-address:popyy@netease ...

  7. 2D平面上的变换和3D空间中的变换以及求无穷远点

    求两个平行线的无穷远点,最简单的方法(二维空间和三维空间都适用) 两个平行线的交点就是无穷远点.求解的方法就是把直线的方向向量(向量我们都用列向量表示)拿到,然后给最后一维加个0就是它们的交点(无穷远 ...

  8. 【学习OpenGL】(三)——3D空间中的点与线

    一.3D空间中的点 #include <gl/glut.h> #include <math.h>#define GL_PI 3.1415fstatic GLfloat xRot ...

  9. 有趣的算法——判断空间中球体和长方体是否相交

    二维空间圆形与矩形是否相交判断 设c为矩形中心,h为矩形半长度,p为圆心,r为半径.方法是计算圆心与矩形的最短距离 u,若 u 的长度小于 r 则两者相交. 首先利用绝对值把 p - c 转移到第一象 ...

最新文章

  1. 0012-求滑动距离
  2. NoSQL 之 Morphia 操作 MongoDB
  3. PL/SQL Developer调试Oracle存储过程
  4. [九省联考2018]秘密袭击coat
  5. extjs TabPanel 监听激活事件
  6. 【文末福利】聊天机器人的几种主要架构实现
  7. day10 强制类型转换(更新)
  8. (进来补知识啦!)利用双四选一数据选择器74153实现十六选一数据选择器(包含74153简单解释)
  9. RapidXml的使用
  10. iptables 详解
  11. java使用ffmpeg转码并上传视频
  12. Microsoft Excel 已停止工作
  13. 利用Jimi进行图片缩放操作
  14. 考取FRM证书的三大好处,可能你还不知道
  15. IDEA连接web网页
  16. 电子签章过程中的原始数据处理
  17. 2021河南省高考成绩位次查询,2021年河南高考排名位次查询系统,河南高考排名查询入口...
  18. 锁定计算机后怎样解锁,如何在锁定键盘时解锁计算机键盘. 详细的方法介绍
  19. windows 大文件共享传输错误 0X8007003B
  20. 配置Exchange 2010 服务器(一) 配置产品密钥及登录OWA时用户不需要输入域名称

热门文章

  1. java开心消消乐代码_Java小项目之:教你做开心消消乐!
  2. 七月算法机器学习笔记8 聚类算法
  3. 31个爱情原则让你受用终生
  4. java公社博客_Java面向对象开发学习笔记(二)
  5. OSA账户新出政策,个人SOHO该如何开离岸账户?
  6. IDM下载器的自定义设置
  7. centos 阿帕奇无法解析php_PHP文件包含漏洞利用思路与Bypass总结手册(二)
  8. [转] *** 一键安装脚本(四合一)
  9. 《Towards Generative Aspect-Based Sentiment Analysis》论文阅读
  10. mysql数据库删除tokudb表 drop table报错unknowntable处理方法【转载】