需要手表心率计算方面的帮助

时间:2015-04-15 04:42:47

标签: math wear-os pseudocode

因此,我正试图为我的Android佩戴表面设置假心跳动画。我有一个能够在BPM中获得心跳的API,而现在我正在尝试使用一个等式来使图像“击败”到BPM。这是伪代码:

IF (Millis / HeartRate) % (1000 / HeartRate) <= 1)
    Opacity = 100;
ELSE
    Opacity = 75;
ENDIF

我真的不确定我是否正确计算了它。我不认为图像以正确的速率正常闪烁。任何有关数学的帮助都会受到赞赏!

2 个答案:

答案 0 :(得分:0)

我设法使用watch API中的其他变量编译新代码。这个另一个变量本质上是一个0到359之间的数字,每帧只有小数位数。 (该变量通常用于秒针的平滑运动)。

我还决定使用正弦波和RGB着色器而不是不透明度。这是新代码

Green = 0
Blue = 0
Red = 100 * math.sin(HeartRate * SecondsRotationSmooth / 60)

使用这个特殊变量并不理想,但它至少给了我一个更好看的代码。如果有人想给出更好的答案,请做!

答案 1 :(得分:0)

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周期,那么检查是否分数<1。 1/20。

或者,如果您希望脉冲持续特定时间而不是周期的一部分,则以秒为单位计算余数。