public Vector3D[] GetFilteredPosition(Vector3D[] data, int[] time)
{
Vector3D[] result = new Vector3D[dataManager.DataModelList.Count];
bool[] temp = new bool[dataManager.DataModelList.Count];
data.CopyTo(result, 0);
for (int i = 1; i < result.Length - 1; i++)
{
temp[i] = Vector3D.DotProduct(data[i + 1], data[i - 1]) < 0;
}
bool isInNoise = false;
int index = 0;
for (int i = 1; i < result.Length - 1; i++)
{
//hypothesis: true jitter will not happen between signs, so remove all.
if (!isInNoise && temp[i])
{
isInNoise = true;
index = i;
}
if (isInNoise && !temp[i])
{
isInNoise = false;
for (int j = index; j < i; j++)
{
result[j] = data[index - 1] + (data[i] - data[index - 1]) *
(time[j] - time[index - 1]) / (time[i] - time[index - 1]);
}
}
}
return result;
}