본문 바로가기

컴퓨터 비전

Robotic Hands : 두 벡터사이의 각도 및 부호 구하기

손목과 팔 사이의 각도를 구하는 도중, 벡터의 내적만 사용하면 부호 없는 각도값만 얻는다. 

이때 벡터의 외적과 다른 벡터의 y-basis를 내적하면 부호를 알 수 있다.

외적에는 순서(오른손 법칙)가 있어서, 각도가 양에서 음으로 또는 음에서 양으로 바뀌는 순간 외적벡터의 방향이 바뀌기 때문이다. 그림을 그려보면서 해보면 이해가 쉽다.


Leap::Vector xBasisArm = basis.xBasis;   
        const Vector armV = arm.direction();
        const Vector handV = hand.direction();

        float wristAngle2 = handV.angleTo(armV) * RAD_TO_DEG;
        Vector crossWrist2 = armV.cross(handV);
        int sign2 = (crossWrist2.dot(xBasisArm) >= 0) ? -1 : 1;