목록Voxel Engine 제작루틴/기초수학 (3)
기억 저장소

3차원 좌표계에서 임의의 좌표 A에서 S만큼 이동시키고 싶다면?? 각각의 요소끼리 더해주면 된다. A + S = (A.x + S.x, A.y + S.y, A.z + S.z) 매우 단순한 과정이다. 만약 S를 피벗(중심) 삼아서 좌표 A를 z 축 기준으로 30도 회전시킨 좌표 A'을 얻고 싶다면 아래와 같은 연산을 수행해야 한다. (-S만큼 이동 -> z 축 기준 30도 회전 -> S만큼 이동) 회전 행렬은 행렬곱으로, 좌표 이동은 더하거나 빼서 처리하므로 이 이상 식을 정리할 수 있는 방법이 없어 보인다. 그런데 만약 좌표 이동도 행렬곱으로 연산할 수 있는 방법이 있다면 행렬 하나로 연산을 묶을 수 있을 것이다. . . . 좌표계의 차원을 하나 더 늘린다면 3차원 좌표 이동을 4x4행렬곱으로 구현할 수 ..

3차원 회전변환은 2차원 회전변환과 크게 다를 바 없다. 위 그림은 이전 포스트에서 보았던 2차원 회전의 예시이다. 2차원 xy 좌표계를 3차원으로 확장하여 생각을 해 보면 z축은 화면을 뚫고 나오는 방향이 된다. 따라서 xy 평면 위에서 회전을 한다는 의미는 z축을 중심으로 한 회전과 동일하다고 볼 수 있다. 이 경우 임의의 좌표에서 z축을 중심으로 회전을 시키게 되면 x와 y 값만 변하게 되고 z값은 변하지 않는다. 즉, 회전축에 대응되는 좌표 값은 변하지 않는다. z축 회전 = xy평면 위에서 회전 x' = x * cosθ - y * sinθ y' = x * sinθ + y * cosθ z' = z y축 회전 = zx평면 위에서 회전 ***이유는 모르겠지만, y축 회전시 xz 평면이 아닌, 가로축이..

원점 중심 회전 회전행렬은 좌표계 위의 임의의 좌표 P(x,y)를 원점 O(0,0)을 중심으로 반시계 방향으로 원하는 각도(θ)만큼 회전시켰을 때의 좌표 P'(x',y')로 변환시켜 준다. 회전행렬은 아래와 같이 사용한다. 식을 써보면 다음과 같다. x' = x * cosθ - y * sinθ y' = x * sinθ + y * cosθ 해당 식을 기반으로 코드 작성 Vector2 Rotate2D(Vector2 p, float degree) { float radian = degree * PI / 180; //삼각함수를 쓸 때는 라디안 값으로 변환시키기. float x = p.x * Cos(radian) - p.y * Sin(radian); float y = p.x * Sin(radian) + p.y * ..