需要有关手表心率计算的帮助
Need help wit heartrate calculation for watch
所以我正在尝试为我的 Android Wear 表盘制作假心跳动画。我有一个 API 可以获取 BPM 中的心率和当前的毫秒数,现在我正在尝试使用一个方程式来制作 "beat" 到 BPM 的图像。这是伪代码:
IF (Millis / HeartRate) % (1000 / HeartRate) <= 1)
Opacity = 100;
ELSE
Opacity = 75;
ENDIF
我真的不确定我是否计算正确。我认为图像没有以正确的速率正确闪烁。任何有关数学的帮助将不胜感激!
我设法使用与手表 API 不同的变量编译了新代码。这个另一个变量本质上是一个介于 0 和 359 之间的数字,每帧仅以小数位递增。 (该变量通常用于平滑运动的秒针)。
我还决定使用正弦波和 RGB 着色器来代替不透明度。这是新代码
Green = 0
Blue = 0
Red = 100 * math.sin(HeartRate * SecondsRotationSmooth / 60)
使用这个特定的变量并不理想,但它至少给我一个更好看的代码。如果有人想给出更好的答案,请做!
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/20。
或者,如果您希望脉冲持续特定的时间而不是周期的一部分,则只需计算以秒为单位的余数。
所以我正在尝试为我的 Android Wear 表盘制作假心跳动画。我有一个 API 可以获取 BPM 中的心率和当前的毫秒数,现在我正在尝试使用一个方程式来制作 "beat" 到 BPM 的图像。这是伪代码:
IF (Millis / HeartRate) % (1000 / HeartRate) <= 1)
Opacity = 100;
ELSE
Opacity = 75;
ENDIF
我真的不确定我是否计算正确。我认为图像没有以正确的速率正确闪烁。任何有关数学的帮助将不胜感激!
我设法使用与手表 API 不同的变量编译了新代码。这个另一个变量本质上是一个介于 0 和 359 之间的数字,每帧仅以小数位递增。 (该变量通常用于平滑运动的秒针)。
我还决定使用正弦波和 RGB 着色器来代替不透明度。这是新代码
Green = 0
Blue = 0
Red = 100 * math.sin(HeartRate * SecondsRotationSmooth / 60)
使用这个特定的变量并不理想,但它至少给我一个更好看的代码。如果有人想给出更好的答案,请做!
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/20。
或者,如果您希望脉冲持续特定的时间而不是周期的一部分,则只需计算以秒为单位的余数。