| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
- Direct2D
 - c
 - 함수
 - Kotlin
 - Win32
 - 지식나눔강좌
 - 프로그래밍
 - 백준
 - tipssoft
 - 리뷰
 - doit코틀린프로그래밍
 - 이지스퍼블리싱
 - c#
 - 티스토리
 - Windows
 - CS
 - 배열
 - 문법
 - 김성엽
 - c++
 - 연산자
 - Tips강좌
 - Visual Studio
 - Tips프로그래밍강좌
 - VS ERROR
 - Programming
 - 알고리즘
 - Javascript
 - 포인터
 - Desktop
 
- Yesterday
 
- Today
 
- Total
 
F.R.I.D.A.Y.
회전 사각형을 외접하는 사각형 본문

회전한 사각형을 외접하는 사각형 구하기
회전 사각형


이미지처럼 회전각이 존재하는 사각형은 그 외부에 해당 사각형을 포함하는 사각형을 그릴 수 있습니다. 해당 사각형을 구하는 방법을 알아봅니다.
여기서부터 회전각을 가진 사각형을 포함하는 사각형[# 빨간색으로 되어 있는 사각형]을 외접 사각형이라 명명합니다.
삼각함수
외접 사각형을 구하는 방법은 피타고라스 방정식을 이용하는 것입니다. 빗변 길이의 제곱은 가로 길이의 제곱과 세로 길이의 제곱의 합으로 이루어진다는 방정식을 이용하면 외접 사각형을 구할 수 있습니다.


80도 만큼 회전한 사각형이 있습니다. 그럼 빨간색으로 강조된 삼각형이 형성됩니다. 해당 부분의 가로축과 세로축은 COS와 SIN 삼각함수를 이용하면 구할 수 있습니다. 여기에서 COS에 적용할 각은 90 - θ, SIN에 적용할 각은 θ입니다.
# 이렇게 각을 설정하는 이유는

빨간색 선과 초록 사각형의 아래쪽 모서리는 평행하고, 보라색 부분으로 하여금 SAS 합동으로 각이 같습니다.
이에 따라 삼각형의 가로와 높이를 구하면 아래와 같습니다.
- 가로: 3 * COS(90deg - 80deg) = 3 * 0.9848 = 2.9544
 - 높이: 3 * SIN(80deg) = 3 * 0.1736 = 0.5208
 
이런 방식으로 외접 사각형과 회전 사각형으로 인해 만들어지는 네곳의 삼각형 가로와 높이를 적절히 계산하면 아래와 같은 외접 사각형을 구할 수 있습니다.
중요한 것은 삼각함수는 각도에 따라 부호가 달라진다는 점입니다. 따라서 각도에 맞는 부호를 잘 정해주지 않으면 외접 사각형을 구하는데 큰 어려움을 겪을 수 있습니다.
외접 사각형의 활용
이러한 외접 사각형은 충돌 판정에서 충돌판정의 부하를 줄이기 위해 사용하기 합니다. 픽셀 충돌 판정은 굉장한 부하를 주기 때문에 외접사각형이 충돌했을 때만 픽셀 충돌 판정을 진행함으로써 그 부하를 줄이는 식이죠.
# index
'DEV > C C++' 카테고리의 다른 글
| 다중 모니터 위치 파악하기 (0) | 2021.07.16 | 
|---|---|
| PC 카카오톡 AD 제거 (0) | 2021.06.25 | 
| 템플릿 클래스를 상속하는 템플릿 클래스 (0) | 2021.05.21 | 
| 클래스 메서드를 가리키는 멤버 함수 포인터 (0) | 2021.05.18 | 
| Win32 - 키보드 입력으로 사각형 움직이기 (0) | 2021.05.08 |