Rotatio
개념

object를 회전시키는 방법에 대해서 알아본다. 회전 이전 좌표를 (x, y) 이후 좌표를 (x’, y’)이라고 할 때, 각각의 좌표를 구하는 방법을 아래와 같이 나타낼 수 있다.
해당 식에서 x’, y’에 대해서 삼각함수 덧셈 정리 를 이용하여 전개하면 아래 와 같이 나타낼 수 있다.
여기서 r을 분배하고, x,y를 치환시켜 줌으로써 다시 아래와 같이 정리할 수 있다.
마지막으로, 해당 식을 더욱 간단히 하기 위해서 matrix로 다음과 같이 나타낼 수 있다.
코드
vec3 RotateAboutZ(const vec3 &v, const float &theta) {
glm::vec2 target(v.x, v.y);
glm::mat2 rotationMatrix = glm::mat2(cos(theta), -sin(theta), sin(theta), cos(theta));
return vec3(target * rotationMatrix, v.z);
}Translation
vec3 translation = vec3(0.0f);
for (size_t i = 0; i < circle.vertices.size(); i++) {
this->circle.vertices[i] += this->translation;
}코드와 같이 모든 vertices를 돌면서 이동할 수치 만큼 더해주면 된다.
Scale
for (size_t i = 0; i < circle.vertices.size(); i++) {
this->circle.vertices[i].x *= this->scaleX;
this->circle.vertices[i].y *= this->scaleY;
}코드와 같이 모든 vertices를 돌면서 scale된 수치 만큼 곱해주면 된다.