天天看點

旋轉坐标的計算

坐标的旋轉計算:

已知旋轉中心點(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函數,不管有多少個物體隻需要執行一次。

繼續閱讀