Skip to content

物理学专业术语收集

BenzLeung edited this page Feb 19, 2017 · 6 revisions

我在学习 chipmunk 物理引擎的过程中,感觉到了明显的困难。估计很大可能是受限于我的英文水平和物理知识了。于是特开此帖,记录学习过程中遇到的物理专业术语。内容不断更新。

  • segment 线段
  • box 矩形
  • circle 圆形
  • polygon (通常缩写 poly) 多边形
  • moment 转动惯量
  • body 物体
  • shape 形状
  • vector (通常缩写 vect) 向量、矢量,在 chipmunk 中还用来表示点的坐标(因为向量和坐标都是x和y)
  • vertex (通常缩写 vert) 顶点(多边形的),我已华丽丽地与 vect 混淆
  • area 面积
  • elasticity 弹性、弹性系数
  • friction 摩擦力、摩擦系数

segment 线段

在 chipmunk 中,一般使用线段来建造墙壁。

线段也可以有面积,chipmunk 提供一个 function :

/**
 * @param {cp.Vect} a 顶点坐标
 * @param {cp.Vect} b 另一顶点坐标
 * @param {Number} r 线段粗细的一半(半径)
 */
cp.areaForSegment = function(a, b, r) {
	return r*(Math.PI*r + 2*vdist(a, b));
};

以上代码是从 chipmunk 的源代码取出来的(代码里的注释是我加的)。从源代码看,chipmunk 把线段的两端当成了圆,所以 r 是两端的圆的半径。

moment 转动惯量

https://zh.wikipedia.org/wiki/%E8%BD%89%E5%8B%95%E6%85%A3%E9%87%8F

https://www.zhihu.com/question/24218339

转动惯量是一个物体对于其旋转运动的惯性大小的量度。

chipmunk 在创建物体(Body)的时候需要指定转动惯量。

/**
 * @param {Number} m 质量
 * @param {Number} i 转动惯量
 */
var x = new cp.Body(m, i);

chipmunk 提供了计算物体转动惯量的 function,一般而言套用公式就好了。

圆形/圆环的转动惯量:

/**
 * @param {Number} m 质量
 * @param {Number} r1 内环的半径,如果是实心圆,请指定为 0
 * @param {Number} r2 外环的半径
 * @param {cp.Vect} offset 重心的偏移向量,可以把圆的重心弄偏。
 *      若不需要弄偏重心,请指定为 cp.vzero (零向量)
 * @return {Number} 转动惯量
 */
var i = cp.momentForCircle(m, r1, r2, offset);

矩形的转动惯量:

/**
 * @param {Number} m 质量
 * @param {Number} width 矩形的宽
 * @param {Number} height 矩形的高
 * @return {Number} 转动惯量
 */
var i = cp.momentForBox(m, width, height);

线段的转动惯量:

/**
 * @param {Number} m 质量
 * @param {cp.Vect} a 顶点坐标
 * @param {cp.Vect} b 另一顶点坐标
 * @return {Number} 转动惯量
 */
var i = cp.momentForSegment(m, a, b);

多边形的转动惯量:

/**
 * @param {Number} m 质量
 * @param {Array.<cp.Vect>} verts 顶点坐标数组,数组至少包含3个值
 * @param {cp.Vect} offset 重心的偏移量,chipmunk 会自动计算多边形的
 *      质心(即无偏移的重心),这个值可以把正常的重心给弄偏。若不需要
 *      弄偏重心,请指定为 cp.vzero (零向量)
 * @return {Number} 转动惯量
 */
var i = cp.momentForPoly(m, verts, offset);

todo: 尚未清楚如果不套用公式,自己指定转动惯量的话,会有些什么有趣的效果。

vector 向量、矢量

在 chipmunk 中,向量是个类/对象。

/**
 * @param {Number} x 横向值
 * @param {Number} y 纵向值
 */
var v = new cp.Vect(x, y);

由于坐标点和向量都是 x 和 y 值,所以 chipmunk 也把这个向量用作坐标点的表示。


持续更新中...

Clone this wiki locally