You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.1 KiB
73 lines
2.1 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace UltraCombos
|
|
{
|
|
public class KinectOpticalFlowMath : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
KinectOpticalFlow kinect;
|
|
|
|
[SerializeField]
|
|
int fps = 15;
|
|
float step;
|
|
float stamp = 0.0f;
|
|
|
|
int home_count;
|
|
Vector4[] samples = new Vector4[512 * 424];
|
|
|
|
public Vector3 averagePositinon = Vector3.zero;
|
|
public float standardDeviation = -1.0f;
|
|
|
|
[SerializeField]
|
|
string debug;
|
|
public string DebugString { get { return debug; } }
|
|
|
|
private void Start()
|
|
{
|
|
step = 1.0f / fps;
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (Time.time - stamp < step)
|
|
return;
|
|
stamp = Time.time;
|
|
|
|
var data = new int[kinect.HomeCountBuffer.count];
|
|
kinect.HomeCountBuffer.GetData(data);
|
|
home_count = data[0];
|
|
kinect.HomePositionBuffer.GetData(samples, 0, 0, home_count);
|
|
|
|
if (home_count > 0)
|
|
{
|
|
float div = 1.0f / home_count;
|
|
float avg_dist = 0.0f;
|
|
averagePositinon = Vector3.zero;
|
|
standardDeviation = 0.0f;
|
|
for (int i = 0; i < home_count; i++)
|
|
{
|
|
var smp = new Vector3(samples[i].x, samples[i].y, samples[i].z);
|
|
averagePositinon += smp;
|
|
float dist = new Vector2(smp.x - transform.position.x, smp.z - transform.position.z).magnitude;
|
|
avg_dist += dist;
|
|
standardDeviation += Mathf.Pow(dist, 2.0f);
|
|
}
|
|
averagePositinon.Scale(Vector4.one * div);
|
|
avg_dist *= div;
|
|
standardDeviation = Mathf.Sqrt(standardDeviation * div - avg_dist * avg_dist);
|
|
|
|
debug = string.Format("{0}({1}): {2}", averagePositinon, avg_dist, standardDeviation);
|
|
}
|
|
else
|
|
{
|
|
standardDeviation = -1.0f;
|
|
debug = "null";
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|