Closed JeffBail closed 7 years ago
Hello Jeff. The Axis enumeration represents an axis in the Camera Space (measured in meters).
If you pass it as a parameter in the Angle method, for example, the specified axis will be ignored for the angle calculation. Let me know if you need any further assistance.
What I'm trying to do is get body relative angles and it seems like what Angle is providing is screen/camera relative angles. For instance I'd like to measure the pitch/elevation of my arm which shouldn't change as I spin around in a chair if I'm holding my arm straight out in front of me.
Could you please paste the code you are using for this?
I was trying to get body relative elbow yaw doing something like this:
double elbowYaw = body.Joints[JointType.ShoulderRight].Angle(body.Joints[JointType.SpineShoulder], body.Joints[JointType.ElbowRight], Axis.Z);
I tried using the different axes but since they're relative to the camera (and not the body or gravity) I don't think think this is the right path.
Thank you. Could you also send me a video of the movement and the proper position? On Tue, 13 Sep 2016 at 22:49, JeffBail notifications@github.com wrote:
I was trying to get body relative elbow yaw doing something like this:
double elbowYaw = body.Joints[JointType.ShoulderRight].Angle(body.Joints[JointType.SpineShoulder], body.Joints[JointType.ElbowRight], Axis.Z);
I tried using the different axes but since they're relative to the camera (and not the body or gravity) I don't think think this is the right path.
— You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub https://github.com/LightBuzz/Vitruvius/issues/27#issuecomment-246801817, or mute the thread https://github.com/notifications/unsubscribe-auth/AAiV-OEoXozghishmw1sd6ueNGJm7Uz1ks5qpv5EgaJpZM4J75u8 .
Vangos Pterneas http://pterneas.com
Now it's clear to me. So, to read the angle regardless of the rotation of the body, you need to measure it by considering all of the axis. Would the following code work for you?
var start = body.Joints[JointType.SpineShoulder].Position;
var center = body.Joints[JointType.ShoulderRight].Position;
var end = body.Joints[JointType.ElbowRight].Position;
var angle = center.Angle(start, end);
You may also do this:
var angle = 180.0 - center.Angle(start, end);
I'm pretty sure that's still going to be measuring in screen/camera space and not body/floor/gravity space. So for instance if I stand with my body facing the camera and point my arm at the camera and then move it down by my side the angle doesn't change much. If I rotate my body 90 degrees and do the same motion the values sweep through a large range.
I have a pretty good solution in Unity based on the JoinOrientationBasics-Unity example. I'm simply looking up a child of the SkeletonModel, in this case "ElbowRight", that is already converted into Unity coordinates and extracting the yaw as:
Vector3.Angle(elbowRight.transform.up, Vector3.right);
The documentation for Axis Enumeration says it "Represents an axis from the 3D space"; is this body coordinates, camera coordinates or perhaps gravity/floor aligned coordinates? I'm trying to understand what effect passing in an Axis should have on the Angle.