public double[] CalVelocity()
{
double[] result = new double[dataManager.DataModelList.Count];
result[0] = 0;
int[] time = dataManager.DataModelList.Select(x => x.timeStamp).ToArray();
Vector3D[] right = GetFilteredPosition(dataManager.DataModelList.Select(x => x.position_right).ToArray(), time);
right = GetFilteredPosition(right, time);
Vector3D[] left = GetFilteredPosition(dataManager.DataModelList.Select(x => x.position_left).ToArray(), time);
left = GetFilteredPosition(left, time);
for (int i = 1; i < result.Length - 1; i++)
{
double deltaRight = (right[i + 1] - right[i - 1]).Length;
double deltaLeft = (left[i + 1] - left[i - 1]).Length;
result[i] = Math.Sqrt((deltaRight * deltaRight + deltaLeft * deltaLeft) / 2) / (time[i + 1] - time[i - 1]);
}
return Normalize(result);
}