SlideShare a Scribd company logo
1 of 11
회전 공식
x
y
P(x,y)
앞으로 두가지 좌표계를 이용해서 회전에 대해 풀어서 설명할 것이다.
1. 우리가 보통 쓰는 xyz직교 좌표계
- (x,y,z)로 임의의 점을 표현
2. 또 다른 극 좌표계라는 것을 사용
- 임의의 한 점을 r(원점으로부터의 거리)와 @(x축으로부터 떨어진 각도(반시계방향)) 로 표현한다.
- (x축위의 길이 r짜리 직선을 @도 만큼 회전하는 것을 상상해보자)
@
P(r,@)
같은 점을 두 가지
방법으로 표현
x
y
@
P(x,y)
P’(x’,y’)
$
1. 딱 봐도 극 좌표계로는 회전을 표현하기 쉬워보인다.
- 길이가 2인 직선을 x축에서 90도 회전한 점 = (2, 90)(여기서 도가 각도법인지 라디안법인지는 상관 말자. 어짜피 그건 리소스일뿐 공식은 똑같다.)
- 길이가 4인 직선을 x축에서 30도 회전한 점 = (4, 30)
- 으로 표현이 가능하다.
2. 그럼 극 좌표계를 xyz직교 좌표계로 변환 시킬 줄만 알면 회전은 쉽게 풀리겠다.
@
$
P(r,@)
P’(r,@+$)
같은 점을 두 가지
방법으로 표현
@
P(r,@)
극 좌표계로 표현된 어떤 점
P(r, @)은
xyz직교 좌표계로
P.x = r cos @
P.y = r sin @
로 표현이 가능하겠다.
P.x
P.y
cos @ = 밑변/빗변
빗변 * cos @ = 밑변
sin @ = 높이/빗변
빗변 * sin @ = 높이
이기 때문이다.
극 좌표계를 xyz직교 좌표계로 변환 시키는 일은 어렵지 않다.
그럼 이제 본론인 회전에 대해서 강구해보자.
@
P(r,@)
P를 P’으로 $만큼 회전시킨다고 했을 때,
P’은 (r, @+$)
가 되고, xyz직교 좌표계로는
P’.x = r cos(@+$)
P’.y = r sin(@+$)
덧셈을 풀어내면
P’.x = r * (cos(@)cos($) – sin(@)sin($))
P’.y = r * (sin(@)cos($) + cos(@)sin($))
P’.x = rcos(@)cos($) – rsin(@)sin($)
P’.y = rsin(@)cos($) + rcos(@)sin($)
여기서 rcos(@)와 rsin(@)는
이전의 점 P의 극 좌표계의 x,y이므로, 점
P의 xyz직교 좌표계로도 표현이 가능하
다.
P’.x = P.x * cos($) – P.y * sin($)
P’.y = P.y * cos($) + P.x * sin($)
P.x
P.y
삼각함수 덧셈 정리
sin(@+$) = sin(@)cos($) + cos(@)sin($)
cos(@+$) = cos(@)cos($) – sin(@)sin($)
이게 이해가 안되면, “삼각함수의 덧셈 정리”
라는 키워드로 검색해보라.
P’(r,@+$)
$
P(x,y)
점 P의 x와 y의 위치를 바꾸고 x의 부호를 뒤집으면 항상 P와 직각인 벡터가 만들어진다.
P’.x = P.x * cos($) – P.y * sin($)
P’.y = P.y * cos($) + P.x * sin($)
이 식에서 볼 수 있듯이,
어떤 한 점이 주어지고, 각도를 주면
회전된 P’을 구할 수 있게 되었다.
좀 더 자세히 파고 들면, P(x,y)와
Q(-P.y,P.x)는 항상 직각을 이루는 벡
터이다.
P’.x = P.x * cos($) + Q.x * sin($)
P’.y = P.y * cos($) + Q.y * sin($)
때문에 다시 말하면,
“벡터P(x,y)와 반시계 방향으로 90도 직
각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
라고 말 할 수 있다.
Q(-P.y, P.x)
(직각이다…)
P(x,y,z)
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
Q(-P.y, P.x, P.z)
이건 2차원의 회전이지만, 3차원의 회전에서도 똑같이 적용할 수 있다.
위 변환을 3차원 공간에서의 회전이라고 생각해본다면,
(지금 z축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)
x’ = P.x * cos($) + -P.y * sin($)
y’ = P.y * cos($) + P.x * sin($)
z’ = z
현재 z축을 기준으로 회전한다고 볼 수 있는 것이다.
x
y
P(y,z,x)
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
Q(-P.z, P.y, P.x)
같은 원리로 X축 기준으로 회전한다 생각하면,
(지금 x축은 모니터를 속으로 들어가는 방향이라고3D적으로 상상을 해보라)
x’ = x
y’ = P.y * cos($) + -P.z * sin($)
z’ = P.z * cos($) + P.y * sin($)
y
z
P(z,x,y)
Q(-P.x,P.z,P.y)
같은 원리로 Y축 기준으로 회전한다 생각하면,
(지금 y축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)(xz가 아니라 zx기 때문에 얘만 생긴 게 좀 틀리다)
y’ = y
z’ = P.z * cos($) + -P.x * sin($)
x’ = P.x * cos($) + P.z * sin($)
z
x
“벡터P(x,y)와 반시계 방향으로 90도
직각인 벡터 Q(-p.y, p.x)가 있을 때,
P’ = P * cos($) + Q * sin($)
로 모든 회전을 표현할 수 있다.”
행렬로 표현하면
z축 기준 회전은
x’ = P.x * cos($) + -P.y * sin($)
y’ = P.x * sin($) + P.y * cos($)
z’ = z
(cos($), sin($), 0)
(-sin($), cos($), 0)
(0, 0, 1)
P(x,y,z) *
x축 기준 회전은
x’ = x
y’ = P.y * cos($) + -P.z * sin($)
z’ = P.y * sin($) + P.z * cos($)
(1, 0, 0)
(0, cos($), -sin($))
(0, sin($), cos($))
P(x,y,z) *
행렬로 표현하면
y축 기준 회전은
x’ = P.x * cos($) + P.z * sin($)
y’ = y
z’ = P.z * cos($) + -P.x * sin($)
(cos($), 0, -sin($))
(0, 1, 0)
(sin($), 0, cos($))
P(x,y,z) *

More Related Content

What's hot

[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
KyeongWon Koo
 
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
MinGeun Park
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
JP Jung
 
Prml4.4 ラプラス近似~ベイズロジスティック回帰
Prml4.4 ラプラス近似~ベイズロジスティック回帰Prml4.4 ラプラス近似~ベイズロジスティック回帰
Prml4.4 ラプラス近似~ベイズロジスティック回帰
Yuki Matsubara
 

What's hot (20)

[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리[0122 구경원]게임에서의 충돌처리
[0122 구경원]게임에서의 충돌처리
 
直交領域探索
直交領域探索直交領域探索
直交領域探索
 
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다  공개용
물리 기반 셰이더의 허와 실:물리기반 셰이더를 가르쳐 봤습니다 공개용
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
 
물리 기반 셰이더의 이해
물리 기반 셰이더의 이해물리 기반 셰이더의 이해
물리 기반 셰이더의 이해
 
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
[Gpg2권 박민근] 3.2 게임 객체 ai를 위한 마이크로 스레드
 
Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)Game Physics Engine Development (게임 물리 엔진 개발)
Game Physics Engine Development (게임 물리 엔진 개발)
 
Matrix calculus
Matrix calculusMatrix calculus
Matrix calculus
 
Implements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture ArrayImplements Cascaded Shadow Maps with using Texture Array
Implements Cascaded Shadow Maps with using Texture Array
 
PR-302: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
PR-302: NeRF: Representing Scenes as Neural Radiance Fields for View SynthesisPR-302: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
PR-302: NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis
 
5강 알파와알파소팅
5강 알파와알파소팅5강 알파와알파소팅
5강 알파와알파소팅
 
Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and Rotation
 
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
파이썬 데이터과학 레벨2 - 데이터 시각화와 실전 데이터분석, 그리고 머신러닝 입문 (2020년 이태영)
 
実践で学ぶネットワーク分析
実践で学ぶネットワーク分析実践で学ぶネットワーク分析
実践で学ぶネットワーク分析
 
마칭 큐브 알고리즘 - ZP 2019 데캠
마칭 큐브 알고리즘 - ZP 2019 데캠마칭 큐브 알고리즘 - ZP 2019 데캠
마칭 큐브 알고리즘 - ZP 2019 데캠
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
PRML第3章@京大PRML輪講
PRML第3章@京大PRML輪講PRML第3章@京大PRML輪講
PRML第3章@京大PRML輪講
 
Prml4.4 ラプラス近似~ベイズロジスティック回帰
Prml4.4 ラプラス近似~ベイズロジスティック回帰Prml4.4 ラプラス近似~ベイズロジスティック回帰
Prml4.4 ラプラス近似~ベイズロジスティック回帰
 
統計的学習の基礎 5章前半(~5.6)
統計的学習の基礎 5章前半(~5.6)統計的学習の基礎 5章前半(~5.6)
統計的学習の基礎 5章前半(~5.6)
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 

Viewers also liked

게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장
JangHyuk You
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
noerror
 
GameMath-Chapter 03 변환
GameMath-Chapter 03 변환GameMath-Chapter 03 변환
GameMath-Chapter 03 변환
Mark Choi
 
Quaternion arithmetic -
Quaternion arithmetic -Quaternion arithmetic -
Quaternion arithmetic -
Elmer
 
게임 프로그래머를 위한 기초 수학 및 물리 - 8장
게임 프로그래머를 위한 기초 수학 및 물리 - 8장게임 프로그래머를 위한 기초 수학 및 물리 - 8장
게임 프로그래머를 위한 기초 수학 및 물리 - 8장
JangHyuk You
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
MinGeun Park
 

Viewers also liked (20)

쿼터니언
쿼터니언쿼터니언
쿼터니언
 
게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장
 
3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스
 
GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법
 
선형 대수학
선형 대수학선형 대수학
선형 대수학
 
삼각비
삼각비삼각비
삼각비
 
GameMath-Chapter 03 변환
GameMath-Chapter 03 변환GameMath-Chapter 03 변환
GameMath-Chapter 03 변환
 
Quaternion arithmetic -
Quaternion arithmetic -Quaternion arithmetic -
Quaternion arithmetic -
 
Id142 plan
Id142 planId142 plan
Id142 plan
 
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
 
스크래치와 역사
스크래치와 역사스크래치와 역사
스크래치와 역사
 
Shader Driven
Shader DrivenShader Driven
Shader Driven
 
Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
 
게임 프로그래머를 위한 기초 수학 및 물리 - 8장
게임 프로그래머를 위한 기초 수학 및 물리 - 8장게임 프로그래머를 위한 기초 수학 및 물리 - 8장
게임 프로그래머를 위한 기초 수학 및 물리 - 8장
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
삼각 함수
삼각 함수삼각 함수
삼각 함수
 

Similar to 기본 회전 공식 (6)

점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
 
부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
 

기본 회전 공식

  • 2. x y P(x,y) 앞으로 두가지 좌표계를 이용해서 회전에 대해 풀어서 설명할 것이다. 1. 우리가 보통 쓰는 xyz직교 좌표계 - (x,y,z)로 임의의 점을 표현 2. 또 다른 극 좌표계라는 것을 사용 - 임의의 한 점을 r(원점으로부터의 거리)와 @(x축으로부터 떨어진 각도(반시계방향)) 로 표현한다. - (x축위의 길이 r짜리 직선을 @도 만큼 회전하는 것을 상상해보자) @ P(r,@) 같은 점을 두 가지 방법으로 표현
  • 3. x y @ P(x,y) P’(x’,y’) $ 1. 딱 봐도 극 좌표계로는 회전을 표현하기 쉬워보인다. - 길이가 2인 직선을 x축에서 90도 회전한 점 = (2, 90)(여기서 도가 각도법인지 라디안법인지는 상관 말자. 어짜피 그건 리소스일뿐 공식은 똑같다.) - 길이가 4인 직선을 x축에서 30도 회전한 점 = (4, 30) - 으로 표현이 가능하다. 2. 그럼 극 좌표계를 xyz직교 좌표계로 변환 시킬 줄만 알면 회전은 쉽게 풀리겠다. @ $ P(r,@) P’(r,@+$) 같은 점을 두 가지 방법으로 표현
  • 4. @ P(r,@) 극 좌표계로 표현된 어떤 점 P(r, @)은 xyz직교 좌표계로 P.x = r cos @ P.y = r sin @ 로 표현이 가능하겠다. P.x P.y cos @ = 밑변/빗변 빗변 * cos @ = 밑변 sin @ = 높이/빗변 빗변 * sin @ = 높이 이기 때문이다. 극 좌표계를 xyz직교 좌표계로 변환 시키는 일은 어렵지 않다.
  • 5. 그럼 이제 본론인 회전에 대해서 강구해보자. @ P(r,@) P를 P’으로 $만큼 회전시킨다고 했을 때, P’은 (r, @+$) 가 되고, xyz직교 좌표계로는 P’.x = r cos(@+$) P’.y = r sin(@+$) 덧셈을 풀어내면 P’.x = r * (cos(@)cos($) – sin(@)sin($)) P’.y = r * (sin(@)cos($) + cos(@)sin($)) P’.x = rcos(@)cos($) – rsin(@)sin($) P’.y = rsin(@)cos($) + rcos(@)sin($) 여기서 rcos(@)와 rsin(@)는 이전의 점 P의 극 좌표계의 x,y이므로, 점 P의 xyz직교 좌표계로도 표현이 가능하 다. P’.x = P.x * cos($) – P.y * sin($) P’.y = P.y * cos($) + P.x * sin($) P.x P.y 삼각함수 덧셈 정리 sin(@+$) = sin(@)cos($) + cos(@)sin($) cos(@+$) = cos(@)cos($) – sin(@)sin($) 이게 이해가 안되면, “삼각함수의 덧셈 정리” 라는 키워드로 검색해보라. P’(r,@+$) $
  • 6. P(x,y) 점 P의 x와 y의 위치를 바꾸고 x의 부호를 뒤집으면 항상 P와 직각인 벡터가 만들어진다. P’.x = P.x * cos($) – P.y * sin($) P’.y = P.y * cos($) + P.x * sin($) 이 식에서 볼 수 있듯이, 어떤 한 점이 주어지고, 각도를 주면 회전된 P’을 구할 수 있게 되었다. 좀 더 자세히 파고 들면, P(x,y)와 Q(-P.y,P.x)는 항상 직각을 이루는 벡 터이다. P’.x = P.x * cos($) + Q.x * sin($) P’.y = P.y * cos($) + Q.y * sin($) 때문에 다시 말하면, “벡터P(x,y)와 반시계 방향으로 90도 직 각인 벡터 Q(-p.y, p.x)가 있을 때, P’ = P * cos($) + Q * sin($) 로 모든 회전을 표현할 수 있다.” 라고 말 할 수 있다. Q(-P.y, P.x) (직각이다…)
  • 7. P(x,y,z) “벡터P(x,y)와 반시계 방향으로 90도 직각인 벡터 Q(-p.y, p.x)가 있을 때, P’ = P * cos($) + Q * sin($) 로 모든 회전을 표현할 수 있다.” Q(-P.y, P.x, P.z) 이건 2차원의 회전이지만, 3차원의 회전에서도 똑같이 적용할 수 있다. 위 변환을 3차원 공간에서의 회전이라고 생각해본다면, (지금 z축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라) x’ = P.x * cos($) + -P.y * sin($) y’ = P.y * cos($) + P.x * sin($) z’ = z 현재 z축을 기준으로 회전한다고 볼 수 있는 것이다. x y
  • 8. P(y,z,x) “벡터P(x,y)와 반시계 방향으로 90도 직각인 벡터 Q(-p.y, p.x)가 있을 때, P’ = P * cos($) + Q * sin($) 로 모든 회전을 표현할 수 있다.” Q(-P.z, P.y, P.x) 같은 원리로 X축 기준으로 회전한다 생각하면, (지금 x축은 모니터를 속으로 들어가는 방향이라고3D적으로 상상을 해보라) x’ = x y’ = P.y * cos($) + -P.z * sin($) z’ = P.z * cos($) + P.y * sin($) y z
  • 9. P(z,x,y) Q(-P.x,P.z,P.y) 같은 원리로 Y축 기준으로 회전한다 생각하면, (지금 y축은 모니터를 속으로 들어가는 방향이라고 3D적으로 상상을 해보라)(xz가 아니라 zx기 때문에 얘만 생긴 게 좀 틀리다) y’ = y z’ = P.z * cos($) + -P.x * sin($) x’ = P.x * cos($) + P.z * sin($) z x “벡터P(x,y)와 반시계 방향으로 90도 직각인 벡터 Q(-p.y, p.x)가 있을 때, P’ = P * cos($) + Q * sin($) 로 모든 회전을 표현할 수 있다.”
  • 10. 행렬로 표현하면 z축 기준 회전은 x’ = P.x * cos($) + -P.y * sin($) y’ = P.x * sin($) + P.y * cos($) z’ = z (cos($), sin($), 0) (-sin($), cos($), 0) (0, 0, 1) P(x,y,z) * x축 기준 회전은 x’ = x y’ = P.y * cos($) + -P.z * sin($) z’ = P.y * sin($) + P.z * cos($) (1, 0, 0) (0, cos($), -sin($)) (0, sin($), cos($)) P(x,y,z) *
  • 11. 행렬로 표현하면 y축 기준 회전은 x’ = P.x * cos($) + P.z * sin($) y’ = y z’ = P.z * cos($) + -P.x * sin($) (cos($), 0, -sin($)) (0, 1, 0) (sin($), 0, cos($)) P(x,y,z) *