SlideShare a Scribd company logo
회전 공식
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

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingYEONG-CHEON YOU
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
QooJuice
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
Sukwoo Lee
 
입체충돌처리
입체충돌처리입체충돌처리
입체충돌처리
quxn6
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
changehee lee
 
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
Seongdae Kim
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
changehee lee
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
YEONG-CHEON YOU
 
Precomputed atmospheric scattering(사전 계산 대기 산란)
Precomputed atmospheric scattering(사전 계산 대기 산란)Precomputed atmospheric scattering(사전 계산 대기 산란)
Precomputed atmospheric scattering(사전 계산 대기 산란)
Bongseok Cho
 
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation PipelineComputer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline
💻 Anton Gerdelan
 
마른 하늘에 날구름 넣기
 마른 하늘에 날구름 넣기 마른 하늘에 날구름 넣기
마른 하늘에 날구름 넣기
ajin kim
 
Motion blur
Motion blurMotion blur
Motion blur
changehee lee
 
IndirectDraw with unity
IndirectDraw with unityIndirectDraw with unity
IndirectDraw with unity
Jung Suk Ko
 
Compute shader
Compute shaderCompute shader
Compute shader
QooJuice
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
devCAT Studio, NEXON
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
Sukwoo Lee
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
Madumpa Park
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
YEONG-CHEON YOU
 

What's hot (20)

Hierachical z Map Occlusion Culling
Hierachical z Map Occlusion CullingHierachical z Map Occlusion Culling
Hierachical z Map Occlusion Culling
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)노말 맵핑(Normal mapping)
노말 맵핑(Normal mapping)
 
Bump Mapping
Bump MappingBump Mapping
Bump Mapping
 
입체충돌처리
입체충돌처리입체충돌처리
입체충돌처리
 
Ndc12 이창희 render_pipeline
Ndc12 이창희 render_pipelineNdc12 이창희 render_pipeline
Ndc12 이창희 render_pipeline
 
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
쉐도우맵을 압축하여 대규모씬에 라이팅을 적용해보자
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
프레임레이트 향상을 위한 공간분할 및 오브젝트 컬링 기법
 
Precomputed atmospheric scattering(사전 계산 대기 산란)
Precomputed atmospheric scattering(사전 계산 대기 산란)Precomputed atmospheric scattering(사전 계산 대기 산란)
Precomputed atmospheric scattering(사전 계산 대기 산란)
 
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation PipelineComputer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline
Computer Graphics - Lecture 03 - Virtual Cameras and the Transformation Pipeline
 
마른 하늘에 날구름 넣기
 마른 하늘에 날구름 넣기 마른 하늘에 날구름 넣기
마른 하늘에 날구름 넣기
 
Motion blur
Motion blurMotion blur
Motion blur
 
IndirectDraw with unity
IndirectDraw with unityIndirectDraw with unity
IndirectDraw with unity
 
Compute shader
Compute shaderCompute shader
Compute shader
 
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
김혁, <드래곤 하운드>의 PBR과 레이트레이싱 렌더링 기법, NDC2019
 
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
 
2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑2018.12.22 깊이 버퍼 그림자 매핑
2018.12.22 깊이 버퍼 그림자 매핑
 
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
[NDC19] 모바일에서 사용가능한 유니티 커스텀 섭스턴스 PBR 셰이더 만들기
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 

Viewers also liked

게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장
JangHyuk You
 
게임수학 강의노트 1부
게임수학 강의노트 1부게임수학 강의노트 1부
게임수학 강의노트 1부
Young-Min kang
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
sung ki choi
 
3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초3D 컴퓨터 그래픽스 기초
3D 컴퓨터 그래픽스 기초
Seung Joon Choi
 
05_벡터와 매트릭스
05_벡터와 매트릭스05_벡터와 매트릭스
05_벡터와 매트릭스noerror
 
GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법GPG Study 4.3 카메라 제어기법
GPG Study 4.3 카메라 제어기법
연우 김
 
선형 대수학
선형 대수학선형 대수학
선형 대수학
Chang Su Youk
 
GameMath-Chapter 03 변환
GameMath-Chapter 03 변환GameMath-Chapter 03 변환
GameMath-Chapter 03 변환Mark Choi
 
Quaternion arithmetic -
Quaternion arithmetic -Quaternion arithmetic -
Quaternion arithmetic -Elmer
 
Id142 plan
Id142 planId142 plan
Id142 plan
Seung Joon Choi
 
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이2nd ignite masan   이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
2nd ignite masan 이그나이트마산 09 설미정_ 기부, 기발함과 발칙함사이
Ignite Masan
 
스크래치와 역사
스크래치와 역사스크래치와 역사
스크래치와 역사
Seung Joon Choi
 
Mesh slice 1
Mesh slice 1Mesh slice 1
Mesh slice 1
현찬 양
 
게임 프로그래머를 위한 기초 수학 및 물리 - 8장
게임 프로그래머를 위한 기초 수학 및 물리 - 8장게임 프로그래머를 위한 기초 수학 및 물리 - 8장
게임 프로그래머를 위한 기초 수학 및 물리 - 8장
JangHyuk You
 
[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들[0611 박민근] 신입 게임 개발자가 알아야 할 것들
[0611 박민근] 신입 게임 개발자가 알아야 할 것들MinGeun Park
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
Chris Ohk
 
[0602 박민근] Direct2D
[0602 박민근] Direct2D[0602 박민근] Direct2D
[0602 박민근] Direct2D
흥배 최
 

Viewers also liked (20)

쿼터니언
쿼터니언쿼터니언
쿼터니언
 
게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장게임 프로그래머를 위한 기초 수학 및 물리 - 9장
게임 프로그래머를 위한 기초 수학 및 물리 - 9장
 
게임수학 강의노트 1부
게임수학 강의노트 1부게임수학 강의노트 1부
게임수학 강의노트 1부
 
[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장[아꿈사] 게임 기초 수학 물리 1,2장
[아꿈사] 게임 기초 수학 물리 1,2장
 
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 기본 회전 공식

Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and Rotation
Young-Min kang
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째
Jaeseok Park
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 I
Sungbin Lim
 
python 수학이해하기
python 수학이해하기python 수학이해하기
python 수학이해하기
Yong Joon Moon
 
부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리부울 대수와 컴퓨터 논리
부울 대수와 컴퓨터 논리suitzero
 
하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2하스켈로 알고리즘 문제 풀기 2
하스켈로 알고리즘 문제 풀기 2
민석 이
 
Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)Variational AutoEncoder(VAE)
Variational AutoEncoder(VAE)
강민국 강민국
 

Similar to 기본 회전 공식 (8)

Quaternion and Rotation
Quaternion and RotationQuaternion and Rotation
Quaternion and Rotation
 
점, 선, 면
점, 선, 면점, 선, 면
점, 선, 면
 
R 스터디 네번째
R 스터디 네번째R 스터디 네번째
R 스터디 네번째
 
Wasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 IWasserstein GAN 수학 이해하기 I
Wasserstein GAN 수학 이해하기 I
 
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) *