一、calculateAngle
double calculate_angle_3FPoint(const SDL_FPoint& a, const SDL_FPoint& b, const SDL_FPoint& c)

calculate_angle_3FPoint(a, b, c) 计算的是以b为顶点的角∠ABC,即向量BA和BC之间的夹角。调用时需填对参数b,互换参数a和c不影响结果。。
check_raised_hands负责提取手臂的关键点,并计算左右手臂的弯曲角度。用的是两次calculate_angle_3FPoint,调用时需填对b,用左右肘(elbow)。
void check_raised_hands(const SDL_FPoint* landmarks, double& left_arm_angle, double& right_arm_angle)
{
// Left arm angle detection
const SDL_FPoint& l_shoulder = landmarks[11];
const SDL_FPoint& l_elbow = landmarks[13];
const SDL_FPoint& l_wrist = landmarks[15];
double left_arm_rad = calculate_angle_3FPoint(l_shoulder, l_elbow, l_wrist);
left_arm_angle = RAD2DEG(left_arm_rad);
// Right arm angle detection
const SDL_FPoint& r_shoulder = landmarks[12];
const SDL_FPoint& r_elbow = landmarks[14];
const SDL_FPoint& r_wrist = landmarks[16];
double right_arm_rad = calculate_angle_3FPoint(r_shoulder, r_elbow, r_wrist);
right_arm_angle = RAD2DEG(right_arm_rad);
}