> 백엔드 개발 > C++ > 본문

두 벡터 사이의 시계 방향 각도를 어떻게 직접 계산합니까?

Mary-Kate Olsen
풀어 주다: 2024-11-14 16:19:02
원래의
254명이 탐색했습니다.

How do you calculate clockwise angles between two vectors directly?

시계 방향 각도 직접 계산

두 벡터 사이의 시계 방향 각도 계산은 종종 내부 각도(0)를 결정하는 내적을 사용하여 처리됩니다. -180도). 그러나 직접적인 방법을 선호하는 경우 고려해야 할 단계는 다음과 같습니다.

2D 사례

내적이 각도의 코사인을 측정하는 것처럼 행렬식도 각도의 사인을 제공합니다. 시계 방향 각도는 다음과 같이 계산할 수 있습니다.

dot = x1*x2 + y1*y2  # Dot product between [x1, y1] and [x2, y2]
det = x1*y2 - y1*x2  # Determinant
angle = atan2(det, dot)  # atan2(y, x) or atan2(sin, cos)
로그인 후 복사

각도의 방향은 시계 방향 각도를 나타내는 양수 기호와 함께 좌표계와 일치합니다. 입력을 교환하면 방향이 변경되고 따라서 부호도 변경됩니다.

3D 사례

3D 벡터의 경우 두 벡터는 두 벡터에 수직인 회전 축을 정의합니다. 이 축에는 고정된 방향이 없으므로 회전 각도를 고유하게 결정할 수 없습니다. 일반적인 관례에는 양의 각도를 생성하도록 축 방향을 지정하는 것이 포함됩니다. 이 시나리오에서는 정규화된 벡터의 내적이면 충분합니다.

dot = x1*x2 + y1*y2 + z1*z2  # Between [x1, y1, z1] and [x2, y2, z2]
lenSq1 = x1*x1 + y1*y1 + z1*z1
lenSq2 = x2*x2 + y2*y2 + z2*z2
angle = acos(dot/sqrt(lenSq1 * lenSq2))
로그인 후 복사

3D 평면

벡터가 알려진 법선 벡터가 있는 평면 내에 있는 경우 n, 회전축은 n을 따라 위치합니다. n을 통합하면서 2D 계산을 적용하면 시계 방향 각도가 제공됩니다.

dot = x1*x2 + y1*y2 + z1*z2
det = x1*y2*zn + x2*yn*z1 + xn*y1*z2 - z1*y2*xn - z2*yn*x1 - zn*y1*x2
angle = atan2(det, dot)
로그인 후 복사

이 계산에 대해 n이 정규화되었는지 확인하세요.

0-360도 범위

다양함 atan2 구현은 [-180°, 180°] 범위의 반환 각도를 반환합니다. [0°, 360°] 범위의 양수 각도를 얻으려면 음수 결과에 2π를 추가하세요.

위 내용은 두 벡터 사이의 시계 방향 각도를 어떻게 직접 계산합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿