public void addNewGaze(float timeDelay, Vector3 gazePoint, int w) { TimePoint tp = new TimePoint(now() - timeDelay, gazePoint); trajectory.Add(tp); positionWriter.WriteLine(tp.timestamp.TotalSeconds + ";" + gazePoint.x + ";" + gazePoint.y); cleanUpTraj(w); }
/// <summary> /// Interpolates between the last recorded position and the current position to determine the position at a given time /// </summary> /// <param name="timeDelay">The time delay it took to transfer the gaze data</param> public void addNewPosition(float timeDelay, int w) { if (trajectory.Count > 0) { double n = now(); TimePoint _last = trajectory[trajectory.Count - 1]; try { float scale = (float)((n - timeDelay - _last.timestamp.TotalSeconds) / (n - _last.timestamp.TotalSeconds)); Vector3 _correctedPos = (_last.pos + Vector3.Scale(_current - _last.pos, new Vector3(scale, scale, scale))); if (copyinprogress) { tpBuffer.Enqueue(new TimePoint(n - timeDelay, _correctedPos)); // Debug.Log("Objects Enqueued " + tpBuffer.Count); } else { while (tpBuffer.Count > 0) { trajectory.Add(tpBuffer.Dequeue()); } trajectory.Add(new TimePoint(n - timeDelay, _correctedPos)); cleanUpTraj(w); } } catch (Exception e) { Debug.LogError("timeDelay:" + timeDelay + " _last:" + _last.timestamp.TotalSeconds + " n: " + n); } } else { // in case trajectory is empty addNewPosition(w); } }