View Single Post
#1
04-05-2015, 07:31 PM
 cmeans Member Join Date: Mar 2015 Posts: 2

I'm a beginner to Vizard. I'm trying to write code that will recognize when the user has their right arm in a right angle. I'm using vizmat.AngleBetweenVectors() to try and get the angle between the right shoulder and the right hand. To my mind, if you hold your arm at a right angle, it will read ~90 degrees.
I'm encountering two problems:
1) As I move my arm back and forth, holding it at a right angle, the degrees change.
2) It's not reading 90 degrees.

Here is my code:
Code:
```def RightArmAngle():
RSpos = RShoulder.getPosition()
RHpos = RHand.getPosition()
RHvec = viz.Vector(RHand.getPosition(),normalize = True)
RSvec = viz.Vector(RShoulder.getPosition(),normalize = True)
RAVector=vizmat.AngleBetweenVector(RSvec,RHvec)#RAVector and RAAngle return the same value
RAAngle = vizmat.AngleBetweenVector(RSpos,RHvec)

print("r elbow:",RHvec)
print("r shoulder:",RSvec)

print("position Angle:", RAAngle, "vs RAVector",RAVector)
print("new")

vizact.ontimer(1,RightArmAngle)```
Here are some diagrams and my outputs:

Raised Arm, Turned to Side. Vector Returned: ~31

Right-Angled Arm, Held in Front, Vector Returned: ~23

Right-Angled Arm, Held to Side, Vector Returned: ~16

I'm confused as to how thought this would be a simple way. Should I try to make a triangle instead? Or should I just be returning one Euler value and finding the angle from that?