using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MathNet.Numerics.LinearAlgebra.Single; namespace bbiwarg.DataSource { class PalmDetection { private IInputProvider input; private IVideoHandle videoHandle; private ForeFingerDetection foreFingerDetection; public PalmDetection(IInputProvider input, IVideoHandle videoHandle) { this.input = input; this.videoHandle = videoHandle; this.foreFingerDetection = new ForeFingerDetection(videoHandle); } public Palm getPalm(uint handIndex) { DenseVector palmMiddle = (DenseVector) input.getPalmPosition3D(handIndex); DenseVector thumbPosition = (DenseVector) input.getFingerTipPositions3D(handIndex)[0]; DenseVector foreFingerPosition = (DenseVector)foreFingerDetection.getForeFingerPosition3D(handIndex); DenseVector palmToThumb_2 = (thumbPosition - palmMiddle) / 2.0f; DenseVector palmToForeFinger = foreFingerPosition - palmMiddle; return new Palm(palmMiddle + palmToThumb_2 + palmToForeFinger, palmMiddle - palmToThumb_2 + palmToForeFinger, palmMiddle - palmToThumb_2 - palmToForeFinger / 2.0f, palmMiddle + palmToThumb_2 - palmToForeFinger / 2.0f); } } }