예제 #1
0
    internal static float calculateElbowAngle(CvCoordinates arm, CvCoordinates elbow, CvCoordinates hands)
    {
        var firstVec  = MonitoringUtils.CvCoordinatesToVec3(arm) - MonitoringUtils.CvCoordinatesToVec3(elbow);
        var secondVec = MonitoringUtils.CvCoordinatesToVec3(elbow) - MonitoringUtils.CvCoordinatesToVec3(hands);

        return(Math.Abs(Vector3.Angle(firstVec, secondVec)));
    }
예제 #2
0
    protected override void useMarkerCoordinates()
    {
        floorPlane = MonitoringUtils.getPlaneFromCvCoordinates(_balls[(int)markerIds.Floor3], _balls[(int)markerIds.Floor2], _balls[(int)markerIds.Floor1]);
        calculateAngles();
        if (firstMeasurement == true)
        {
            setInitialValues();
        }
        for (int i = 0; i < _balls.Length; i++)
        {
            markers[i].transform.position = MonitoringUtils.getCoordinatesRelativeToPlane(_balls[i], floorPlane) + offset;
        }
        dummy.updateDummyPose(
            markers[(int)markerIds.Dummy1].transform.position,
            markers[(int)markerIds.Dummy2].transform.position,
            markers[(int)markerIds.Hands].transform.position, ref performTracking);
        subject.updateSubjectPose(markers[(int)markerIds.rightArm].transform.position, markers[(int)markerIds.leftArm].transform.position);

        checkCompressionDepth();
        calculateCompressionRate();
        updateMeasurementMessages();
        updateGraphs();


        if (saveCheckBox.isOn)
        {
            saveDataToTextFile();
        }
    }
예제 #3
0
    internal static Plane getPlaneFromCvCoordinates(CvCoordinates first, CvCoordinates second, CvCoordinates third)
    {
        Plane plane = new Plane();

        plane.Set3Points(
            MonitoringUtils.CvCoordinatesToVec3(first),
            MonitoringUtils.CvCoordinatesToVec3(second),
            MonitoringUtils.CvCoordinatesToVec3(third));
        return(plane);
    }
예제 #4
0
 void setInitialValues()
 {
     offset = MonitoringUtils.setOffsetVector(desiredLocation.transform.position, floorPlane, _balls[(int)markerIds.Hands]);
     for (int i = 0; i < _balls.Length; i++)
     {
         markers[i].transform.position = MonitoringUtils.getCoordinatesRelativeToPlane(_balls[i], floorPlane) + offset;
     }
     dummy.setInitialPose(markers[(int)markerIds.Dummy1].transform.position, markers[(int)markerIds.Dummy2].transform.position, markers[(int)markerIds.Hands].transform.position);
     setInitialAngleValues();
     subject.setSubjectInitialPose(offset, dummy.transform);
 }
예제 #5
0
    void calculateAngles()
    {
        rightElbowAngle = Math.Abs(MonitoringUtils.calculateElbowAngle(_balls[0], _balls[2], _balls[4]) - initialRightArmAngle);
        leftElbowAngle  = Math.Abs(MonitoringUtils.calculateElbowAngle(_balls[1], _balls[3], _balls[4]) - initialLeftHandAngle);
        var armsPlane = new Plane();

        armsPlane.Set3Points(
            MonitoringUtils.CvCoordinatesToVec3(_balls[(int)markerIds.rightArm]),
            MonitoringUtils.CvCoordinatesToVec3(_balls[(int)markerIds.leftArm]),
            MonitoringUtils.CvCoordinatesToVec3(_balls[(int)markerIds.Hands]));

        armsFloorAngle = Vector3.Angle(floorPlane.normal, armsPlane.normal);
    }
예제 #6
0
    float getMarkerPositionChange(int index)
    {
        if (index >= previousMarkerPositions.Count)
        {
            previousMarkerPositions.Add(MonitoringUtils.CvCoordinatesToVec3(_balls[index]));
            return(0);
        }
        Vector3 currentMarkerPosition = MonitoringUtils.CvCoordinatesToVec3(_balls[index]);
        float   distance = Vector3.Distance(previousMarkerPositions[index], currentMarkerPosition);

        previousMarkerPositions[index] = currentMarkerPosition;

        return(distance);
    }
예제 #7
0
 protected void Update()
 {
     MatToTexture2D();
     checkFPS();
     MonitoringUtils.setStartButtonText(performTracking, changeModeButton);
 }
예제 #8
0
 internal static Vector3 getCoordinatesRelativeToPlane(CvCoordinates coordinates, Plane plane)
 {
     return(new Vector3(Vector3.Project(MonitoringUtils.CvCoordinatesToVec3(coordinates), Vector3.ProjectOnPlane(Vector3.right, plane.normal)).magnitude,
                        Math.Abs(plane.GetDistanceToPoint(MonitoringUtils.CvCoordinatesToVec3(coordinates))),
                        Vector3.Project(MonitoringUtils.CvCoordinatesToVec3(coordinates), Vector3.Cross(plane.normal, Vector3.ProjectOnPlane(Vector3.right, plane.normal))).magnitude));
 }