Calculating the area under a curve is a little tricky in computing languages such as c++ or c# due to there not being any direct functions to allow integration. Not wanting to write a whole intergrall solver to complete my project I opted to use an approximation method.
The method I opted for way Riemann sum, invented by a German mathematician, uses many rectangles to approximate the area:
The great thing about using the rectangle approximation is that its incredibly fast to do, as a result many iterations can be used to give a pretty accurate result.
Riemann sum in C++:
The y=x function in the example below represents a deceleration curve an object has to follow (y= Speed, x = Time). I needed to calculate the total distance traveled by the object, as Distance = Speed * Time, the area under the curve equals the total distance traveled.
#define NUM_OF_RECTANGLESTOUSE 10 //The more rectangles used the greater the accuracy
double startX = 0; //starting position on the curve
double endX = 1; //end position on the curve
double AreaOfCurve = 0;
double lengthX = endX - startX;
double rectangleWidth = lengthX / NUM_OF_RECTANGLESTOUSE;
for(double x=startX+(0.5*rectangleWidth); x < endX; x += rectangleWidth)
{
//Curve function multiplied by the width goes here: (I've used y=((1/decelTime²) * (decelTime - x)²))
AreaOfCurve += rectangleWidth * ((1.0/(lengthX*lengthX)) * ((lengthX - x)*(lengthX - x)));
}
A great tool to help visualize the Riemann sum and see the difference between the approximation and the actual value can be found on wolfram alpha:
Link
Other approximation methods can be used for greater accuracy, such as the trapezium rule, see
WikiPediafor a full list