annotate Orchestland/Assets/LeapMotion/Widgets/Scripts/Utils/ExponentialSmoothing.cs @ 1:f7675884f2a1

Add Orchestland project
author Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2015 23:09:20 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 /// <summary>
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 /// Time-step independent exponential smoothing.
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 /// </summary>
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 /// <remarks>
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 /// When moving at a constant speed: speed * delay = Value - ExponentialSmoothing.value.
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 /// </remarks>
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 public class ExponentialSmoothing
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 {
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
9 public float value = 0f; // Filtered value
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
10 public float delay = 0f; // Mean delay
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
11 public bool reset = true; // Reset on Next Update
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 public void SetAlpha(float alpha, float deltaTime = 1f)
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 {
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 this.delay = deltaTime * alpha / (1f - alpha);
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 }
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 public float Update(float value, float deltaTime = 1f)
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 {
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 if (deltaTime > 0f &&
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 !reset) {
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 float gamma = delay / deltaTime;
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 float alpha = gamma / (1f + gamma);
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 // NOTE: If deltaTime -> 0 then alpha -> 1,
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 // reducing the filter to this.value = value.
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 this.value *= 1f - alpha;
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 this.value += alpha * value;
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 } else {
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 this.value = value;
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 reset = false;
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 }
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 return this.value;
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 }
f7675884f2a1 Add Orchestland project
Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 }