因此,我正试图为我的Android佩戴表面设置假心跳动画。我有一个能够在BPM中获得心跳的API,而现在我正在尝试使用一个等式来使图像“击败”到BPM。这是伪代码:
IF (Millis / HeartRate) % (1000 / HeartRate) <= 1)
Opacity = 100;
ELSE
Opacity = 75;
ENDIF
我真的不确定我是否正确计算了它。我不认为图像以正确的速率正常闪烁。任何有关数学的帮助都会受到赞赏!
答案 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。
或者,如果您希望脉冲持续特定时间而不是周期的一部分,则以秒为单位计算余数。