台球类游戏制作经验-物理篇

2007.3.31

by  张皓(zh1110)

 

2D台球的的真实性在于物理模型.

目前的开源台球程序,都 将台球简化为平面球形处理,难以表现的台球实际运行特性,无法达到商业水平.

感谢上帝,经过一段时间研究我设计一种物理模型,达到了较好的效果.既是这篇讲的内容.

 

了解 物理的本质,才能设计出合理的程序,几个基本的物理概念:

物体的运动分为平动与转动两种,对于三维空间,刚体的力,加速度,速度矢量都可转换到一正交坐标系上, 这三互相垂直的轴上表示为一标量,并且它们之间没有直接的影响。

物体平动的计算

刚体受到一力的作用,力除质量得到加速度,加速度对时间求积分得到速度增量,速度对时间求积分得到位置增量.

力的变换:对于作用与刚体的不经过重心的力F,计算需移至重心,变换后等效于一经过重心的力与一转矩.力大小方向与 原F力相同,转矩为FXR.R为力作用点到重心的矢量,3D空间映射与矢量的叉积计算.

冲量是力与时间乘积的一个量,用于碰撞的计算,冲量除刚体质量得到速度增量.

物体转动的计算

刚体受到一转矩的作用,转矩除转动惯量得到角加速度,角加速度对时间求积分得到角速度增量,角速度对时间求积分得到角度(方位)增量.

转矩没有作用点的区别.

 

摩擦力,按产生摩擦力的条件,可分为滑动摩擦力、滚动摩擦力、 静摩擦力

滑动摩擦

滑动摩擦的物体微观表面可认为是类似波浪形,滑动摩擦的本质在于两物体表面分子的撞击.滑动摩擦力 由细微的凹凸相互咬合及相互接近的原子互相吸两种原因。同种或异种原子接近到一定程度会相互吸引。摩擦面越光滑摩擦力越小,证明凹凸相互咬合产生摩擦力。但摩擦面太光滑反而加大摩擦力,这时原子互相吸引产生摩擦力起主导作用。fμN.

 

  

物体微观表面

分子间的相互作用力  

分子是由原子组成的,原子是由带正电的原子核和带负电的电子组成的。分子力就是分子间这些带电微粒的相互作用引起的。

  分子间作用力的近似地用下列经验公式来表示:

  式中的λ和μ是大于零的恒量,r为两个分子中心间的距离,s和t都是正数。式中第一项是正的,代表分子之间的斥力;第二项是负的,代表分子间的引力。图1中的两条虚线分别表示引力和斥力随距离而变化的情况,实线表示合力随距离而变化的情况。

    称为平衡位置。当r的数量级大于10-9米时,已经变得十分微弱,可以忽略不计了。

 

静摩擦

与滑动摩擦类似,但物体沿着另一个物体表面仅有运动或有滚动的趋势.fmaxμN , fmin>0

 

滚动摩擦

滚动摩擦是一物体在另一物体表面作无滑动的滚动,由于两物体在接触部分受压发生形变而产生的对滚动的阻碍作用。

科学家研究发现,圆轮在推力Ft作用下滚动,与水平面接触处发生挤压变形,滚动摩擦 力主要在于克服前面凸起的辗平,分布力系如图(a).附加力偶Mf=Fn*a+Fs*r称为滚动摩阻力偶,简称滚阻力偶.其大小与物体的性质、表面的形状以及滚动物体的重量有关。

 

 

基本的台球滚动分析

现在开始简单的球滚动分析,假设球杆开始打击在母球中央

 

1.球受到一个冲量作用,瞬间在水平方向产生一较高速度,但球还未发生旋转.

2.因为重力与桌面的支撑力,并球与地面接触点相对移动,产生滑动摩擦.在摩擦力影响下球的速度逐渐减小,旋转速度从零逐渐增加.

3.球旋转速度对接触点的影响是向后方,球平移速度对接触点的影响向前,当两种速度达到平衡,既球与地面的接触点无相对移动,进入滚动摩擦状态.球的速度受滚动摩擦力影响 逐渐减小,同时旋转速度受滚阻力偶也逐渐减小

4.当球的速度与旋转速度降为零,进入静止状态.

 

旋切摩擦

  球在地面会形成一个凹坑,如果球有垂直方向的旋转,因为凹坑是有半径的大小,会形成圆周分布的阻力,阻力偶的方向与垂直轴旋转方向相反.

接触点水平方向的平动速度对其有直接的影响,机制比较复杂,应要同时计算.

 

  假设地面对球的支持力均匀分部,球凹坑的有效半径为R,取凹坑上,下,左,右边缘四个典型的采样点分析,球的接触点的平动速度Vv可以计算出(球 水平方向旋转速度和平动速度的合速度),并设为上。垂直方向旋转速度Vx也可得到,两者相加得到合速度(黑色表示),这是四个采样点的绝对速度。因为摩擦力的方向与速度相反,滑动摩擦力的大小 却与速度大小无关,只与支持力大小成正比,可得到红色表示的摩擦力,摩擦力看似杂乱,无方向性,但仍有一定规律可寻。

 

凹坑形成的阻力

凹坑四采样点的速度与摩擦力

 

 

上,下两个方向插值

左,右两个方向插值(Vx小于Vv时)

左,右两个方向插值(Vx大于Vv时)

 

   在上,下两个方向上,摩擦力呈现一种线性比例关系,当旋转速度Vx较平动速度Vv大时 ,摩擦力偏向于Vx,当平动速度Vv较旋转速度Vx大时 ,摩擦力偏向于Vv,上下之间部分可以插值的方式计算。

 

   在左,右两个方向上比较复杂,当Vx小于Vv时摩擦力全部朝向Vv反向一侧,全用于抵消Vv,此时此方向的摩擦力对旋转速度Vx无影响。当Vx大于Vv时摩擦力偏向于Vx,可 知这也是一种配比关系,但不是线性比例。

 

还可知,当球开始进入摩擦状态,如果开始运动时旋转速度非常快还是平动速度非常快,因为这种配比平衡的关系,最后,两者有趋向与同时降为零的趋势。

 

 

程序中根据各种摩擦的条件判决,每个球设置一个State变量表示本球当前状态,并显示相应的颜色.伪代码如下:

 

计算旋转速度Vx

计算平动速度Vv

计算出配比系数

 

水平方向摩擦的计算

If 球接触点速度为零 And 球水平方向的速度为零 Then
球处于水平方向静止状态 灰

State = 3
ElseIf 球与地面接触点相对速度为零 Then
球处于滚动摩擦状态 绿

State = 2
施加滚动摩擦力
Else
球处于滑动摩擦状态 红

State = 1
施加滑动摩擦力
End If


旋切摩擦的计算
If 球Z方向速度不为零 Then 施加旋切摩擦力

If 球Z方向速度为零 And 球处于水平方向静止状态  Then 球处于完全静止状态  黑 State = 4

 

 

撞击时球的受力分析

两球撞击时受到瞬间正冲量与摩擦冲量作用, 如果撞击处的相对速度(沿摩擦力方向)较小,摩擦冲量会使其到零的状态,如果相对速度较大,瞬间摩擦冲量不足以抵消,撞击后仍然具有一定相对速度,这就是为什么程序中对撞击的摩擦 冲量也要进行动静判断.具体计算使用的是《基于冲量的刚体碰撞运动》一文的理论,因为球体的特殊性,冲量方程可以进行一定简化。

目标球受摩擦力的影响,将会沿着母球的运动方向有少量前移.要消除摩擦力影响,改变击打点或者用侧旋,都是有效的.

吃库(球碰到边沿叫做吃库)后也会偏向旋转方向. 入射角等于反射角的物理学原理无效.

 

不同的击球点影响

击打母球的上半部与下半部(高低杆打法 )
击打上半部母球会有跟着目标球向前走的趋势,这时候碰到后母球就会跟进. 击打下半部有阻止母球跟着目标球向前走,但最后减速向后移动,下面还可以让球出速 较快.

击打球的一侧
击打球的一侧,母球会偏一侧旋转,即使正撞击目标球,因为有摩擦,目标球方向仍然会偏向一侧.

球的速度,前滚或后滚,侧旋方向.一般大力度的击球将增加这些影响.


跳球

击打中心偏下,球杆抬高40°的打法产生跳球 。
跳球在2D台球中难以表现,且有不稳定因素,所以在程序中如果有向上或向下的速度,都忽略其影响.

 

球与台球桌的碰撞检测

球与台球桌边沿撞击一样使用冲量理论,先检测它是否发生干涉(即圆形与直线段间).

 

一无边界的平面可由法线N及到原点的垂直距离D表示,多边形面则可由自身及包围的几个平面表示。

对于这里的桌面边沿(2D直线段),程序中由三条无边界直线计算,它们是自身<N1,D1>,两边界<N2,D2>,<N3,D3>,计算如下:

1.计算球到垂足的系数,小于零,大于1的排除,这样2号,3号,7号球排除.

2,计算球到自身直线绝对距离如果小于球半径,则发生碰撞,如果距离大于零与直线正面发生碰撞,小于零与反面发生碰撞.

3.还有一种情况要考虑,就是7号球,在边界外,但与直线一端点碰撞,计算球心到端点既可.

4.应用冲量计算.

 

台球程序的物理我想就讲这几方面.