/*
* This source is part of the
* _____ ___ ____
* __ / / _ \/ _ | / __/___ _______ _
* / // / , _/ __ |/ _/_/ _ \/ __/ _ `/
* \___/_/|_/_/ |_/_/ (_)___/_/ \_, /
* /___/
* repository.
*
* Copyright (C) 2013-2014 Benoit 'BoD' Lubek (BoD@JRAF.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jraf.android.util.math;
public class MathUtil {
/**
* Get the min and the max values of the given array.
*
* @param values The array in which to look for the min and max values.
* @return an array containing the min at index 0 and the max at index 1.
*/
public static float[] getMinMax(float... values) {
if (values.length == 0) return new float[] { Float.MIN_VALUE, Float.MAX_VALUE };
float min = values[0];
float max = values[0];
int len = values.length;
for (int i = 1; i < len; i++) {
float curVal = values[i];
if (curVal < min) {
min = curVal;
}
if (curVal > max) {
max = curVal;
}
}
return new float[] { min, max };
}
/**
* Get the amplitude (difference between the min and the max) of the given array.
*
* @param values The array for which to calculate the amplitude.
* @return The amplitude of the given arrat.
*/
public static float getAmplitude(float... values) {
if (values.length == 0) return 0;
float[] minMax = getMinMax(values);
return minMax[1] - minMax[0];
}
/**
* Get the average of the given array.
*
* @param values The array for which to calculate the average.
* @return the average.
*/
public static float getAverage(float... values) {
float sum = 0;
for (float val : values) {
sum += val;
}
return sum / values.length;
}
/**
* Get the moving average of the given array.
*
* @param values The array for which to calculate the moving average.
* @param period The period to use (number of values to average).
* @return the average.
*/
public static float[] getMovingAverage(float[] values, int period) {
float[] res = new float[values.length];
MovingAverage movingAverage = new MovingAverage(period);
int i = 0;
for (float v : values) {
movingAverage.add(v);
res[i] = movingAverage.getAverage();
i++;
}
return res;
}
}