【问题标题】:Need help wit heartrate calculation for watch需要帮助计算手表的心率
【发布时间】:2015-04-17 17:14:31
【问题描述】:
所以我正在尝试为我的 Android Wear 表盘制作一个假心跳动画。我有一个 API 可以获取 BPM 中的心率和当前毫秒,现在我正在尝试使用一个等式使图像“跳动”到 BPM。这是伪代码:
IF (Millis / HeartRate) % (1000 / HeartRate) <= 1)
Opacity = 100;
ELSE
Opacity = 75;
ENDIF
我真的不确定我是否正确计算了它。我不认为图像以正确的速率正确闪烁。感谢您对数学的任何帮助!
【问题讨论】:
标签:
math
wear-os
pseudocode
【解决方案1】:
BPM 中的值是频率,而不是时间段:
b BPM = b / 60s = b/60 * s^-1
振荡周期为
T = 1/f = 60s / b = 60/b s
如果我们有一个以毫秒为单位的时间,那么我们可以计算出模数与周期:
remainderInSeconds = CurrentTimeInSeconds % T
= (CurrentTimeInMilliseconds * 1e-3) % T
= (CurrentTimeInMilliseconds * 1e-3) % (60/BeatsPerMinute)
fraction = remainderInSeconds / Period
= [(CurrentTimeInMilliseconds * 1e-3) % T] / T
= (CurrentTimeInMilliseconds * 1e-3 / T) % 1
= (CurrentTimeInMilliseconds * 1e-3 / (60/BeatsPerMinute)) % 1
= (CurrentTimeInMilliseconds * 1e-3 * BeatsPerMinute / 60)) % 1
= (CurrentTimeInMilliseconds * BeatsPerMinute / 60e3)) % 1
然后您可以检查分数是否低于您的阈值;如果您希望脉冲持续周期的 20 分之一,则检查分数是否
如果您希望脉冲持续特定的时间量而不是周期的一部分,也可以只计算以秒为单位的余数。
【解决方案2】:
我设法使用与 watch API 不同的变量编译了一个新代码。这个其他变量本质上是一个介于 0 和 359 之间的数字,每帧仅增加小数点。 (该变量通常用于平滑运动秒针)。
我还决定使用正弦波和 RGB 着色器来代替不透明度。这是新代码
Green = 0
Blue = 0
Red = 100 * math.sin(HeartRate * SecondsRotationSmooth / 60)
使用这个特定的变量并不理想,但它至少给了我一个更好看的代码。如果有人想给出更好的答案,请做!