圆轨迹与直线轨迹的合成

来源:互联网 发布:windows格式化系统 编辑:程序博客网 时间:2024/04/29 23:55

--[[
直线运动和匀速圆周运动合成的轨迹,我们称之为摆线
过原点startP=(0,0)、半径为r的摆线参数方程为
x=r(a-sina)
y=r(1-cosa)
在这里实参数a是在弧度之下,圆滚动的角度。对每一个给出的a ,圆心的坐标为(ra,r)。
参数说明:
t----轨迹参数方程中的参数
]]
function CycloidTrace(t)
          local startP=ccp(200,300)--摆线轨迹起点
          local direction=3
    local r=50;
          local a=2*math.pi*t*direction
          local x=r*(a-math.sin(a))
          local y=r*(1-math.cos(a))
          return ccp(startP.x+x,startP.y+y)
end

--[[
摆线轨迹
参数说明:
t----轨迹参数方程中的参数
startP----轨迹起点坐标
r----圆的半径
deltArg----取值浮点数,相对于轨迹起点的辐角主值增量
direction----拱形的个数
reserved----保留参数
]]
--function CycloidTraceFunc(t,startPx,startPy,r,deltArg,direction)
function CycloidTraceFunc(t,startPx,startPy,r,deltArg,direction,reservedx,reservedy)
          local a=2*math.pi*t*direction        
          local x=r*(a-math.sin(a))
          local y=r*(1-math.cos(a))
          local startPt=ccp(x,y)
          local centerPt=ccp(r*a,r)--圆心坐标
    local retPt=GetCirclePos(startPt,centerPt,deltArg)
          local startP=ccp(startPx,startPy)--摆线轨迹起点deltArg=0
          return ccp(startP.x+retPt.x,startP.y+retPt.y)     
end

if(pathType==6)then
   --圆中心为(350,300),半径为150,轨迹起点为(500,300)的逆时针圆轨迹
   --圆运动轨迹,参数一为动画时长,参数二为表示圆轨迹参数方程的LUA函数名,参数三为轨迹起点坐标,参数四为圆心坐标,参数五为正负圈数
   --self:runAction(myAction:createCircle(3.0,"CircleTraceFunc",ccp(500,300),ccp(350,300),1));
   --self:runAction(myAction:createMoveCircle(3.0,"MoveCircleTraceFunc",ccp(500,300),ccp(350,300),1,ccp(0,0)));
   --self:runAction(myAction:createMoveCircle(3.0,"MoveCircleTraceFunc",ccp(500,300),ccp(350,300),1,ccp(-250,0)));
   --local  actionBy =myAction:createMoveCircle(3.0,"MoveCircleTraceFunc",ccp(500,300),ccp(350,300),1,ccp(-50,0)); 
    --去掉了createMoveCircle,用createCycloid代替 
   local  actionBy =myAction:createCycloid(3.0,"CycloidTraceFunc",ccp(200,300),ccp(50,0),3,ccp(-50,0));
   local  ac = CCRepeatForever:create(actionBy);
   self:runAction(ac);
end
if(pathType==7)then
   --自定义运动轨迹,参数一为动画时长,参数二为表示轨迹参数方程的LUA函数名
   --self:runAction(myAction:create(3.0,"EllipseTrace"));
   --self:runAction(myAction:create(3.0,"CycloidTrace"));
   --local rdeltArg=ccp(50,0)--表示圆的半径是50,辐角主值增量是0
   --self:runAction(myAction:createCircle(3.0,"CycloidTraceFunc",ccp(200,300),ccp(50,0),3));
   local startP=CCPoint(self:getPositionX(),self:getPositionY());
  --对于摆线轨迹,arg1代表半径和辐角主值增量
    if(arg1==nil)then
      arg1=CCPoint(50,0);
  end  
   self:runAction(myAction:createCircle(3.0,"CycloidTraceFunc",startP,arg1,3));
end