본문 바로가기

C Language

3D 축 기준 회전 공식

x축 중심 회전 알고리즘

이 함수는 3D 공간에서 X축을 중심으로 선(line)을 회전시키는 역할을 합니다. 함수의 각 부분을 자세히 설명하겠습니다.

## 함수 선언

```c
void rotate_x(t_line *line, double angle)
```

- 이 함수는 `t_line` 구조체 포인터와 회전 각도를 매개변수로 받습니다.
- `void` 반환 타입은 함수가 직접적인 결과를 반환하지 않고, 입력된 `line` 객체를 직접 수정함을 의미합니다.

## 변수 선언

```c
t_point new_start;
t_point new_end;
```

- `new_start`와 `new_end`는 회전 후 선의 새로운 시작점과 끝점을 저장하기 위한 임시 변수입니다.

## 회전 변환

회전 변환은 다음 공식을 사용합니다:

- y' = y * cos(θ) - z * sin(θ)
- z' = y * sin(θ) + z * cos(θ)

여기서 θ는 회전 각도입니다. x 좌표는 변하지 않습니다 (X축 회전이므로).

### 시작점 회전

```c
new_start.y = line->start.y * cos(angle) - line->start.z * sin(angle);
new_start.z = line->start.y * sin(angle) + line->start.z * cos(angle);
```

- 선의 시작점에 대해 y와 z 좌표를 회전 변환합니다.

### 시작점 업데이트

```c
line->start.y = new_start.y;
line->start.z = new_start.z;
```

- 계산된 새로운 좌표로 선의 시작점을 업데이트합니다.

### 끝점 회전

```c
new_end.y = line->end.y * cos(angle) - line->end.z * sin(angle);
new_end.z = line->end.y * sin(angle) + line->end.z * cos(angle);
```

- 선의 끝점에 대해 동일한 회전 변환을 수행합니다.

### 끝점 업데이트

```c
line->end.y = new_end.y;
line->end.z = new_end.z;
```

- 계산된 새로운 좌표로 선의 끝점을 업데이트합니다.

이 함수는 3D 그래픽스나 시뮬레이션에서 객체를 회전시킬 때 유용하게 사용될 수 있습니다. X축을 중심으로 회전하므로, 객체의 "피치(pitch)" 회전을 구현하는 데 적합합니다.

 

시작점과 끝점의 회전 공식과 각도가 같은 이유는 다음과 같습니다:

1. **일관된 회전**: 선(line)은 하나의 단일 객체로 취급됩니다. 선의 시작점과 끝점이 동일한 각도로 회전해야 선의 형태와 방향이 유지됩니다.

2. **강체 변환**: 이 회전은 강체 변환(rigid body transformation)의 일종입니다. 강체 변환에서는 객체의 모든 점이 동일한 방식으로 변환되어 객체의 형태가 보존됩니다.

3. **상대적 위치 유지**: 시작점과 끝점에 같은 회전 변환을 적용함으로써, 두 점 사이의 상대적 위치와 거리가 유지됩니다. 이는 선의 길이와 방향을 보존하는 데 필수적입니다.

4. **수학적 일관성**: 3D 공간에서의 회전은 전체 공간에 대해 균일하게 적용됩니다. 따라서 같은 축을 중심으로 회전할 때는 모든 점에 동일한 회전 행렬이 적용됩니다.

5. **단순화와 효율성**: 시작점과 끝점에 동일한 변환을 적용하는 것이 계산적으로 더 간단하고 효율적입니다. 다른 각도를 사용한다면 선의 특성이 변하게 되어 의도하지 않은 결과를 초래할 수 있습니다.

이러한 이유로, 3D 그래픽스나 컴퓨터 비전 등의 분야에서 객체를 회전할 때는 일반적으로 객체의 모든 점에 동일한 회전 변환을 적용합니다. 이는 객체의 구조적 무결성을 유지하고 예측 가능한 결과를 보장하는 데 중요합니다.

'C Language' 카테고리의 다른 글

mlx_get_data_addr 펑션의 사용법  (0) 2025.02.17
3D 표현에서 x,y 값과 z값의 의미  (0) 2025.02.17
2차원 배열을 사용한 3차원 표현방법  (0) 2025.02.06
pivoting 상세설명  (0) 2025.02.06
카메라 초기 설정  (0) 2025.02.01