2004년 12월 29일
Skew Rotate

[Skew 를 이용한 Rotate 예제 - 30도 회전]
어떤 알고리즘들은 그 시도 자체가 놀랍다.
위 그림은 Skew(비스듬하게 기울이기)를 3회 이용한 이미지 Rotation(회전) 알고리즘이다.
이 회전 알고리즘의 특징은
1. 손실이 없다.
- 모든 점이 다른 위치의 한 점으로 이동한다.
2. 실수(Real number) 연산이 적다.
- 최초 회전에 필요한 sin, atan 값만 알고 있으면 된다. 회전중에는 삼각함수를 계산하지 않는다.
3. 회전 중심이 일정하지 않다.
- 중심점을 이용해 회전하지 않는다. 그대로 회전시키면 전체 위치가 이동된다. 계산을 통해 보정 가능.
이정도가 있다.
누가 기울이기 만으로 회전이 가능할꺼라고 생각했을까?
처음에는 소스코드를 보고도 그저 '적당히 유사한' 회전 이미지를 만들어내는 알고리즘 정도로 생각했다.
아무리 생각해도 기발하다.
# by | 2004/12/29 10:45 | 프로그래머 생각 | 트랙백 | 덧글(5)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
정말 기발하네여!
기발하기한데, skew 라는게 많이 쓰이고 연산이 쉬운 알고리즘인가보죠?
D3D 쪽 함수인가요?
똑바로 쌓아둔 동전을 옆으로 스윽 기울이듯이.
직사각형의 범주에 있던 도형이 평행사변형의 범주로 변하는거지.
더이상 직사각형이 아니라고나 할까.
첫번째 변환 : sin(t/2) 가 아니라, tan(t/2)입니다.
두번째 변환 : atan(sin(t))가 아니라, sin(t)입니다.
세번째 변환 : 마찬가지로 sin(t/2) 가 아니라, tan(t/2)입니다.
모바일게임쪽 이미지 회전에 적용시키기 적당할듯 싶어서 해보았다가, 무언가 맞질 않아서 자료를 좀 더 찾아보니 이곳의 정보가 약간 부정확했네요.
참고하세요.
http://www.cs.dartmouth.edu/reports/TR96-301.pdf