后续角度等计算

一、calculateAngle

double calculate_angle_3FPoint(const SDL_FPoint& a, const SDL_FPoint& b, const SDL_FPoint& c)
calculate_angle_3FPoint计算出的角度

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);
}

全部评论: 0

    写评论: