--[[
|
|
=================================
|
|
@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
|