游戏中的数学与物理(一)
来源:互联网 发布:程序员考试培训 编辑:程序博客网 时间:2024/04/30 14:47
(看了《游戏开发的数学与物理》,感觉很不错,记下点东西。 这是本“图灵程序丛书”,对于这个系列的书,我一直是蛮喜欢的,感觉书的内容、排版等,都让人看着很舒服。)
1.1让物体沿水平方向运动
了解匀速直线运动(最简单的运动),若左边为x,速度为v,则:x+=v,v=-v。
注意: 注意物体的中心点,不同的游戏引擎,可能设计的中心点不同,而中心点不同,边界也就不同。
1.2通过键盘控制物体的运动
主要用到小学学的勾股定理,原理很简单,而且很实用。
PS: 在模拟运动时,要控制个方向的速度。
1.3让物体沿任意方向运动
注1:请将角的单位统一为弧度(主要关系到微积分的一些问题)。
注2:在计算浮点数中,计算机不可避免的会有误差,绝对值越大误差也就越大。因此应该尽可能地使用绝对值小的数字进行计算。
1.4在物体运动中加入重力
y += vy; //对位置加入速度vy +=G; //为速度加上加速度
用此方法算的Vy与y分别是:
计算机所使用的重力加速度单位是特殊的 dot/F^2 (像素/平方帧)
但是对于真实的情况,我们用积分模拟
这样就和前面代码所表示的存在一些误差,则代码应该改成:
v=vx*t; //x方向的位置y=1/2*G*t*t+vy*t+y0; //y方向的位置
1.5物体随机飞溅运动
随机数、均匀随机数、正态分布 ——>火山喷发、烟花、摩擦迸出的火花。
产生随机速度的部分:
Balls[i].vx = rand()*Screen_width/(float)RAND_MAX - Screen_width/2.0f; //vx的初始值Balls[i].vy = rand()*Screen_height/(float)RAND_MAX - Screen_height/2.0f - Base; //vy的初始值生成了均匀随机数(所有数字的出现概率都相等的随机数),其中,Screen_width 和 screen_height 分辨是屏幕的宽和高。而vx与vy生成的初始值的范围分别为(-Screen_width/2.0 ~ Screen_width/2.0) 和 (-Base - Screen_height/2.0f ~ -Base+Screen_height/2.0)。
1.6让物体进行圆周角运动
x=R*cosf(fAngle)+(Screen_width-Char_width)/2.0f;y=R*sinf(fAngle)+(Screen_Height-Char_height)/2.0f;fAngle+=2.0f*PI/120.0f; //一周的时间为2min
所以物体施加一个指向某一点的角速度为ω的力,物体就会围绕该点做圆周运动。
把t=0代入上面两式得初始时间与速度:
//使用向心力的圆周运动,决定初始位置及初始速度的部分rx=R;ry=0.0f; //(r,0)vx=0.0f;vy=R*AngleSpeed; //(0,rw)
1.7[难]微分方程式及其数值解法
常用:微分方程的数学值解法; 欧拉法
但是球类等运动,需要更高精度,则有以下几种方法
- 使用精度更高的高阶近似求解微分方程,eg,Runge-Kutta methods 。(数学难)
- 使用线性多步法(Linear multistep method)计算,即不光使用前一次的值,还使用前两次或更多次的值进行计算, eg,Adams-Bashforth等。
- 在一帧内多次使用欧拉法计算,缩小∆t——重复使用欧拉法,比较常用。
1 0
- 游戏中的数学与物理(一)
- 游戏开发中的数学和物理算法(2)
- 游戏开发中的数学和物理算法(4):抛物线
- 游戏开发中的数学和物理算法(8):三角函数
- 游戏开发中的数学和物理算法(4):抛物线
- 游戏开发中的数学和物理算法(8):三角函数
- 游戏开发中的数学和物理算法(17):平移
- 游戏开发中的数学和物理算法(18):缩放
- 游戏开发中的数学和物理算法(4):抛物线
- 游戏开发中的数学和物理算法(8):三角函数
- 游戏开发中的数学和物理算法(17):平移
- 游戏开发中的数学和物理算法(18):缩放
- 第一章 游戏中的数学和物理(物理篇)
- 第一章 游戏中的数学和物理(数学篇)
- 游戏开发中的数学和物理算法(1):定义点
- 游戏开发中的数学和物理算法(3):点之间的距离
- 游戏开发中的数学和物理算法(6):圆和球的碰撞检测
- 游戏开发中的数学和物理算法(7):角度 vs 弧度
- for do_while() while()
- Android英汉词典
- 程序报告
- BP神经网络PYthon实现(带有”增加充量项“)
- Android-Shortcut
- 游戏中的数学与物理(一)
- 【JavaScript】Number和String基本包装类型操作方法
- 黑马程序员——Java开发前奏
- Android 查看图片
- 如何让DIV水平和垂直居中
- leetcode刷题 总结 记录, 备忘 62
- android应用程序跳转到系统的各个设置页面
- 字符串统计
- 用线程和借口分别实现的Java秒表