横扫天下会 最高指挥官

 找回密码
 注册
查看: 4189|回复: 4

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

[复制链接]
发表于 2009-1-5 22:10 | 显示全部楼层 |阅读模式
大致代码如下:
  1. Angle:=CalculateVectorAngle(B,A);        //初始化角度为目标移动方向
  2. Appr:=PI*0.25;
  3. D:=C+(cos(Angle)*R,sin(Angle)*R);        //按照Angle计算弹体单位时间后飞行到的坐标
  4. Result:=CalculateClockwise(B,C,A,D);        //计算AD向量在BC向量左手还是右手方向
  5. while(Appr>=PI*0.02)        //PI*0.02为误差范围
  6. {
  7. Angle+=Appr;
  8. D:=C+(cos(Angle)*R,sin(Angle)*R);        //再次计算新坐标
  9. if(CalculateClockwise(B,C,A,D)!=Result)        //比较两次
  10. {
  11. Appr*=-0.5;        //如果方向不同,则实际射角就应该在前两个角度之间
  12. Result:=CalculateClockwise(B,C,A,D);        //并给Result赋值
  13. }
  14. else
  15. {
  16. Appr:=Result*Abs(Appr);        //修改Appr方向使之与计算出的左右手方向一致
  17. }
  18. }
复制代码

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

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

使用道具 举报

 楼主| 发表于 2009-1-5 22:17 | 显示全部楼层
其中B点为目标位置,A点为目标单位时间后的位置
C点为发射器位置,D为以C为圆心,发射弹单位时间移动距离R为半径的圆上的一点。
回复 支持 反对

使用道具 举报

发表于 2009-1-6 12:04 | 显示全部楼层
迭代...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-1-8 20:56 | 显示全部楼层
额。。。其实是类似二分法查找。。。
回复 支持 反对

使用道具 举报

发表于 2009-1-8 22:38 | 显示全部楼层
哇,好复杂的代码啊,看不明白什么意思耶 (连中文也不明白是什么意思~~~)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|横扫天下会 最高指挥官 ( 沪ICP备11033600号-1 )

GMT+8, 2020-9-18 22:11 , Processed in 0.015139 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表