相关计算
规范的判定线事件列表应该满足以下条件:
按照事件的
startTime
从小到大排序。对于速度事件列表,第一个事件的
startTime
为0
。对于其它事件列表,第一个事件的
startTime
为一个足够小的数,如-999999
。紧接着,每个事件的
startTime
应该与上一个事件的endTime
相等。最后一个事件的
endTime
为一个足够大的数,如1000000000
。
满足条件后,我们才能正确进行下面的计算。
速度事件的 floorPosition
速度事件的 floorPosition
表示事件开始时刻的垂直位置,单位
设第
个事件的 startTime
为, value
为, floorPosition
为,则有:
判定线的实时参数
判定线的实时速度和垂直位置可以通过以下方法计算:
设第
个事件的 startTime
为, value
为, floorPosition
为,则有: 表示判定线在时刻 的速度,单位 。 表示判定线在时刻 的垂直位置,单位 。
判定线的其它参数(不透明度、X/Y 坐标、旋转角度)计算较为简单,仅需进行线性插值:
设第
个事件的 startTime
为, start
为, end
为,则有: 表示判定线在时刻 的参数,单位与 和 相同。
音符的实时参数
音符的实时参数可以通过以下方法计算:
设音符的
floorPosition
为,判定线在时刻 的实时垂直位置为 ,则有: 表示音符在时刻 的 currentFloorPosition
,单位。 设音符的
time
为,令 ,则有: 音符在判定时刻应该与判定线重合,即
由此可知,音符的
floorPosition
应该等于,确保在判定时刻恰好与判定线重合。 设音符的
holdTime
为, speed
为,然后有: - 对音符实时垂直距离的计算,视乎音符类型而有所不同。
非 Hold 音符:
Hold 音符头部,
: Hold 音符尾部,
: Hold 音符尾部,
: 表示音符在时刻 的实时垂直距离,单位 。 联立上述二式取极限,解得:
由此可知,Hold 音符的
speed
应该等于,确保打击时 Hold 尾速度与打击前相同。