--[[ ================================= @Author: ZensYue @DateTime: 2016-12-26 20:52:39 @Description: 椭圆操作的数据包 ================================= ]] EllipseConfig = EllipseConfig or BaseClass() EllipseConfig.PI = 3.14 local math_sin = math.sin local math_cos = math.cos --[[ <* @Author: ZensYue @Description: 椭圆操作的数据包 @param: ellipse_config 表 center_pos 椭圆中心点 a 椭圆长半径 b 椭圆长半径 moveInAnticlockwise 是否顺时针运动 time 椭圆运行1周的时间 hide_start_time 需要放在人物下层的时间左区间 (相对于椭圆周长的比例) hide_end_time 需要放在人物上层的时间右区间 (相对于椭圆周长的比例) *> ]] --L≈π(a+b)(64 - 3λ^4)/(64 - 16λ^2) function EllipseConfig:__init(ellipse_config) ellipse_config = DeepCopy(ellipse_config) self.centerPosition = ellipse_config.center_pos self.a = ellipse_config.a self.b = ellipse_config.b self.z = ellipse_config.z -- self.YI = (a-b)/(a+b) -- self.L = P*(a+b)*(64 - 3*self.YI*self.YI*self.YI*self.YI)/(64 - 16*self.YI*self.YI) self.moveInAnticlockwise = ellipse_config.moveInAnticlockwise self.time = ellipse_config.time self.hide_start_time = ellipse_config.hide_start_time or 0 self.hide_end_time = ellipse_config.hide_end_time or 0 self.cur_time = 0 self:GetCircumference() end --[[ <* @Author: ZensYue @Description: 获取椭圆运动的x坐标 @param: t 运动时间 [0,1] *> ]] function EllipseConfig:GetPositionXAtOval(t) if(self.moveInAnticlockwise == false) then return self.a * math_cos(2* EllipseConfig.PI * (1 - t))+self.centerPosition.x else return self.a * math_cos(2* EllipseConfig.PI * t)+self.centerPosition.x end end --[[ <* @Author: ZensYue @Description: 获取椭圆运动的y坐标 @param: t 运动时间 [0,1] *> ]] function EllipseConfig:GetPositionYAtOval(t) if(self.moveInAnticlockwise == false) then return self.b * math_sin(2* EllipseConfig.PI * (1 - t))+self.centerPosition.y else return self.b * math_sin(2* EllipseConfig.PI * t)+self.centerPosition.y end end --Z轴 function EllipseConfig:GetPositionZAtOval(t) if(self.moveInAnticlockwise == false) then return self.z * math_sin(2* EllipseConfig.PI * (1 - t))+self.centerPosition.z else return self.z * math_sin(2* EllipseConfig.PI * t)+self.centerPosition.z end end --[[ <* @Author: ZensYue @Description: 计算周长 *> ]] function EllipseConfig:GetCircumference() self.circumference = EllipseConfig.PI * (self.a+self.b) end