计算两角度之间小于180度的有向夹角


视觉编程中,经常会遇到转向问题,从一个朝向平滑转到新的朝向。例如2d俯视坦克游戏中, 坦克身体需要转向,炮塔也需要转向。

拿2d中的额转向来说,转向是从一个角度(例如60度)转到202度,要平滑转向,实际要做的就是计算出这两个角度间小于等于180度的有向夹角。

这里的有向就是正负的问题,有了这个正负做平滑变化会很容易。

 

下面是计算夹角的代码:

//
        /**
         * 已知起始角度(a0)和终止角度(a1)获得他们之间的-180 到 +180度的夹角
         * 
*/
        private function getMinAngle(a0:Number, a1:Number):Number {
            var angle:Number = 0;
            if(a1 >= 270 && a0 < 90){
                angle = (a1 - (a0 + 360)) % 180;
            }else if (a1 <= 90 && a0 >= 270) {
                angle = (a1 + 360 - a0) % 180;
            }else {
                angle = (a1 - a0);
                if (Math.abs(angle) > 180) {
                    angle -= 360;    
                }
            }
            return angle;
        }

以上代码是as3中实现的,当然算法和语言无关。可以用在各种代码上。

有了计算出来的数值,就能做很多很酷的事情了, 例如缓动。。。

 

以下是flash示例, 点击flash区域就可以看到转动效果。

posted @ 2012-07-11 11:59  vily_雷  阅读(1462)  评论(0)    收藏  举报