坐标的旋轉計算:
已知旋轉中心點(centerX,centerY)、一個物體、旋轉的半徑radius和角度angle。使用基本的三角學圍繞中心點放置物體,設定旋轉的角速度Vr來控制旋轉角度的增加或減少。計算公式為:
angel+=V;
ball.x=centerX+Math.cos(angle)*radius;
ball.y=centerY+Math.sin(angle)*radius;
多數情況下隻知道物體的位置和中心點位置,可以使用如下公式計算目前的角度和半徑:
dx=ball.x-centerX;
dy=ball.y-centerY;
angle=Math.atan2(dy,dx);
radius=Math.Sqrt(dx*dx+dy*dy);
對于輕量級的計算單個物體的旋轉來說,此方法是可行的。但如果存在多個物體要旋轉,并且這些物體與中心旋轉點的相對位置可能是變化的,不使用正常的按角度和半徑的計算方法,使用坐标旋轉公式:
- x,y為物體旋轉前相對于中心點的坐标;
- x1,y1旋轉後相對于中心點的坐标;
- Vr為旋轉的角速度
x1=cos(Vr)*x-sin(Vr)*y;
y1=cos(Vr)*y+sin(Vr)*x
變量:
- cos=Math.cos(Vr);
- sin=Mah.sin(Vr);
寫入幀循環中的代碼段為:
var x1:Number=ball.x-centerX;
var y1:Number=ball.y-centerY;//旋轉前的x,y坐标
var x2:Number=cos*x1-sin*y1;
var y2:Number=cos*y1+sin*x1;
ball.x=x2+centerX;
ball.y=y2+cntenrY;
這種三角計算的方法比給予坐标的旋轉來的高效。可以看到第一種方法在循環中要調用4個Math函數,而且物體每循環一次都要調用這四個函數。而使用旋轉坐标公式隻需要在循環外面調用兩個Math函數,不管有多少個物體隻需要執行一次。