旋转坐标的计算

坐标的旋转计算:

已知旋转中心点(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函数,不管有多少个物体只需要执行一次。

你可能感兴趣的:(学习笔记)