/* * HoloLensの自己位置をLOGGING_TIMESPAN毎に記録 * リストに追加 */ // Update is called once per frame void Update() { var tapl = new JsonTimeAndPositionLog(transform.position.x, transform.position.z); if (DateTime.Now.Subtract(oldTime).Second > LOGGING_TIMESPAN) { oldTime = DateTime.Now.TimeOfDay; jTAPLList.Add(tapl); } }
/* *データのサンプリング * pDataを基準として、タイムスタンプが一致するhDataをサンプリングする * サンプリングが失敗したorデータ数が足りない場合はnullを返す */ private List <List <JsonTimeAndPositionLog> > samplingFromHoloLensLogList(List <JsonTimeAndPositionLog> h, List <JsonTimeAndPositionLog> p) { List <JsonTimeAndPositionLog> logH = new List <JsonTimeAndPositionLog>(); List <JsonTimeAndPositionLog> logP = new List <JsonTimeAndPositionLog>(); if (h == null || p == null) { return(null); } if (h.Count < CALCULATE_POSITION_NUMBER || p.Count < CALCULATE_POSITION_NUMBER) { return(null); } int pastDataNum = 0; foreach (JsonTimeAndPositionLog pdata in p) { List <JsonTimeAndPositionLog> tmp = new List <JsonTimeAndPositionLog>(); JsonTimeAndPositionLog result = null; for (int i = pastDataNum; i < h.Count; i++) { if ((Math.Abs(h[i].mTime.Subtract(pdata.mTime).Seconds) + Math.Abs(h[i].mTime.Subtract(pdata.mTime).Minutes) * 60) < 1.0) { tmp.Add(h[i]); } } double difference = 1000; foreach (JsonTimeAndPositionLog t in tmp) { if (Math.Abs(t.mTime.Subtract(pdata.mTime).Milliseconds) < difference) { result = t; difference = Math.Abs(t.mTime.Subtract(pdata.mTime).Milliseconds); } } if (result != null) { logP.Add(pdata); logH.Add(result); } if (logH.Count >= CALCULATE_POSITION_NUMBER && logP.Count >= CALCULATE_POSITION_NUMBER) { List <List <JsonTimeAndPositionLog> > res = new List <List <JsonTimeAndPositionLog> >(); res.Add(logP); res.Add(logH); return(res); } } return(null); }