源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

92 行
2.6 KiB

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