基于角度的快速查找提前发射角算法

大致代码如下:

Angle:=CalculateVectorAngle(B,A);	//初始化角度为目标移动方向
Appr:=PI*0.25;
D:=C+(cos(Angle)*R,sin(Angle)*R);	//按照Angle计算弹体单位时间后飞行到的坐标
Result:=CalculateClockwise(B,C,A,D);	//计算AD向量在BC向量左手还是右手方向
while(Appr>=PI*0.02)	//PI*0.02为误差范围
{
 Angle+=Appr;
 D:=C+(cos(Angle)*R,sin(Angle)*R);	//再次计算新坐标
 if(CalculateClockwise(B,C,A,D)!=Result)	//比较两次
 {
 Appr*=-0.5;	//如果方向不同,则实际射角就应该在前两个角度之间
 Result:=CalculateClockwise(B,C,A,D);	//并给Result赋值
 }
 else
 {
 Appr:=Result*Abs(Appr);	//修改Appr方向使之与计算出的左右手方向一致
 }
}

基于直线的快速查找提前发射量算法以后有空搞。:L  那个算法可能执行效率会更高些。

[ 本帖最后由 honeyfox 于 2009-1-5 22:12 编辑 ]

其中B点为目标位置,A点为目标单位时间后的位置
C点为发射器位置,D为以C为圆心,发射弹单位时间移动距离R为半径的圆上的一点。

迭代…

额。。。其实是类似二分法查找。。。

哇,好复杂的代码啊,看不明白什么意思耶:L :L (连中文也不明白是什么意思~~~):L