作者entersoal (准备冲刺)
看板GameDesign
标题[其他] 不使用开根号求出解的方法
时间Fri Oct 15 11:30:39 2010
※ [本文转录自 Math 看板 #1CjosVPO ]
作者: entersoal (准备冲刺) 看板: Math
标题: [其他] 不使用开根号求出解的方法
时间: Fri Oct 15 00:19:40 2010
原po过去是念数学系的,出社会工作後进入游戏业多少运用到数学
多半负责规格使用的演算法或是推估数据模型(战斗、经济..etc.)
最近遇到了一个障碍
在处理一个状况是在赛车这个机制下产生的
在平面XY座标系之下
假设A玩家所在的点P1为(P1x,P1y),其速度向量V1为(V1x,V1y),车体半径为r1
B玩家所在的点P2为(P2x,P2y),其速度向量V2为(V2x,V2y),车体半径为r2
需要预测的状况为两玩家发生碰撞
我所使用的方法分几个步骤做筛检
I.令两玩家构成的圆刚好相切时的连心线为d,如果 r1+r2 < d 进入II
II.利用V1和V2求出路径公式(直线公式),在将此二线公式做二元一次联立方程式求解
利用克拉码公式排除 delta=0,但delta x and delta y不全为零的状况
进入III
III.为我主要问题
我希望能够验证此解是否能落於V1和V2旋转正负30度所扫出的面积中,如果能验证
此点,则能够确实验证两向量交会点在不可避免得范围内
如此满足三项条件就产生玩家发生碰撞的刚体碰撞运算
但我在推导第三点预到了障碍,原先只需要算与X轴夹角,
就可以推导V向量所要扫的范围不等式,但是麻烦在此运算需要用到开根号计算cosθ
而此运算必须由Server进行所以不得使用多项式函数以上的复杂度运算
想请教不知道有没有可以不用开根号就可以计算余弦值的方法
或是其实我想法上有错?感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.144.10
1F:→ VFresh :没仔细看全文...Orz 不过考虑泰勒展前几项.. 10/15 06:38
2F:→ VFresh :不知道这样可不可以Orz 10/15 06:39
3F:→ entersoal :对吼!!!!还有泰勒展开式,谢谢,我找到方向了 10/15 11:25
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.144.10
4F:推 littleshan:算cos可以用查表法+内插,会比泰勒展开更快 10/15 11:55
5F:推 odahawk:建议你用Cordic 10/15 13:44
6F:推 truesword:有没有可能将III的运算外包给ASIC IC去做呢 10/15 14:22
7F:→ truesword:这样能大幅加速运算速度 10/15 14:23
8F:→ entersoal:应该是没办法,还是等推导出公式给Server运送:( 10/15 15:05
9F:推 odahawk:CORDIC演算法连8051都跑得动,可以试试看 10/15 15:42
10F:→ entersoal:喔喔,好,我试试看,我太孤陋寡闻,刚刚google了一下 10/15 15:47
11F:→ entersoal:原来Cordic是一个这麽了不起的演算法 10/15 15:48
12F:推 Bencrie:数学好真令人羡慕 >"< 10/15 19:54
13F:推 odahawk:可以查数值分析专书,或单晶片常用演算法 10/16 00:08
14F:→ odahawk:很多演算法简单又好用的 10/16 00:09
15F:→ entersoal:我以前数值分析学得还不错,不过仅限於ODE的部份... 10/16 00:49
16F:→ entersoal:PDE就没学到了 10/16 00:49
17F:推 chenglap:数学是科学和工程之本, 所以有时间多练习... 10/16 09:02