9fd6e8b2f73764ac08f8894dd4edb6c1f734c2cd
[speedfreak] / Client / calculate.cpp
1 #include "calculate.h"
2 #include <math.h>
3
4 #include <QFile>
5 #include <QString>
6 #include <QTimer>
7 #include <QRegExp>
8
9 const double G_ACCELERATION = 9.80665;
10 const double SECONDS_IN_HOUR = 3600;
11
12 Calculate::Calculate() {
13
14     this->reset();
15
16 }
17
18 Calculate::~Calculate() {
19 }
20
21 void Calculate::reset() {
22
23     averageSpeed = 0;
24     currentSpeed = 0;
25     distanceTraveled = 0;
26     lastAcceleration = 0;
27     lastDistance = 0;
28     lastSpeed = 0;
29     numOfIterations = 0;
30     totalTime = 0;
31 }
32
33 /* Getters and setters
34    */
35
36 double Calculate::AverageSpeed()
37 {
38     return averageSpeed;
39 }
40 void Calculate::AverageSpeed(double value)
41 {
42     averageSpeed = value;
43 }
44 double Calculate::CurrentSpeed()
45 {
46     return currentSpeed;
47 }
48 void Calculate::CurrentSpeed(double value)
49 {
50     currentSpeed = value;
51 }
52 double Calculate::DistanceTraveled()
53 {
54     return distanceTraveled;
55 }
56 void Calculate::DistanceTraveled(double value)
57 {
58     distanceTraveled = value;
59 }
60 double Calculate::LastAcceleration()
61 {
62     return lastAcceleration;
63 }
64 void Calculate::LastAcceleration(double value)
65 {
66     lastAcceleration = value;
67 }
68 double Calculate::LastDistance()
69 {
70     return lastDistance;
71 }
72 void Calculate::LastDistance(double value)
73 {
74     lastDistance = value;
75 }
76 double Calculate::LastSpeed()
77 {
78     return lastSpeed;
79 }
80 void Calculate::LastSpeed(double value)
81 {
82     lastSpeed = value;
83 }
84 long Calculate::NumOfIterations()
85 {
86     return numOfIterations;
87 }
88 void Calculate::NumOfIterations(long value)
89 {
90     numOfIterations = value;
91 }
92 double Calculate::TotalTime()
93 {
94     return totalTime;
95 }
96 void Calculate::TotalTime(double value)
97 {
98     totalTime = value;
99 }
100
101 /*
102   This is a main function for calculating various parameters. Accelerometer
103   provides currentAcceleration and calling function measures time (seconds).
104   This function should be called 20-30 times/second to minimize
105   calculation error.
106
107   To be added: params like horsepower.
108   */
109 void Calculate::CalculateParameters(double currentAcceleration, double seconds)
110 {
111     numOfIterations++;
112     totalTime = (totalTime + seconds);
113
114     // v=v0 + a*t
115     // v(n) = v(n-1)+(a(n) + a(n-1))*(seconds)/2
116
117     /* First integration of acceleration provides speed
118        */
119     currentSpeed = (lastSpeed + (((currentAcceleration + lastAcceleration) * seconds) / 2));
120
121     /* Second integration: distance.
122        */
123     distanceTraveled = (lastDistance + (((currentSpeed + lastSpeed) * seconds) / 2));
124
125     /* Average speed
126        */
127     averageSpeed = (distanceTraveled / totalTime);
128
129     lastSpeed = currentSpeed;
130     lastAcceleration = currentAcceleration;
131     lastDistance = distanceTraveled;
132 }
133
134
135
136
137
138