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