본문 바로가기

C Language

3D 표현에서 x,y 값과 z값의 의미

x,y 값과 z값중에 비중 있는 값을 선정

`t_line *init_line(t_point start, t_point end, t_fdf *fdf)` 함수는 두 점 사이의 선을 나타내는 `t_line` 구조체를 초기화하는 역할을 합니다. 이 함수는 메모리에 새로운 `t_line` 구조체를 할당하고, 시작점과 끝점의 좌표 및 색상 정보를 설정합니다.

### 함수 설명

1. **메모리 할당**:
   ```c
   line = malloc(sizeof(t_line));
   ```
   - `t_line` 구조체를 위한 메모리를 할당합니다. 만약 메모리 할당에 실패하면 `NULL`을 반환합니다.

2. **시작점 및 끝점 설정**:
   ```c
   line->start.x = start.x;
   line->start.y = start.y;
   line->start.z = start.z;
   line->start.color = start.color;
   line->end.x = end.x;
   line->end.y = end.y;
   line->end.z = end.z;
   line->end.color = end.color;
   ```
   - 시작점과 끝점의 x, y, z 좌표 및 색상 정보를 설정합니다.

3. **transform_z 설정**:
   ```c
   line->transform_z = max((fdf->map->max_z - fdf->map->min_z), \
       max(fdf->map->max_x, fdf->map->max_y));
   ```
   - `transform_z`는 3D 맵의 z 좌표 범위와 x, y 좌표의 최대 크기 중 더 큰 값을 저장합니다. 이는 이후의 변환 및 프로젝션에서 사용될 수 있습니다.

### transform_z의 의미

`transform_z`는 3D 맵의 크기와 깊이를 고려하여 선의 변환 및 프로젝션에 사용되는 값입니다. 예를 들어, 3D 맵의 z 좌표 범위가 크면, 이는 깊이감을 더 강조할 수 있습니다. 반면, x, y 좌표의 최대 크기가 더 크다면, 이는 2D 평면에서의 확대/축소를 더 강조할 수 있습니다.

**예시:**

- 맵의 z 좌표 범위가 `-10`에서 `10`까지이고, x, y 좌표의 최대 크기가 각각 `20`이라면:
  - `max_z - min_z = 20`
  - `max(fdf->map->max_x, fdf->map->max_y) = 20`
  - `transform_z = max(20, 20) = 20`

이 경우, `transform_z`는 `20`으로 설정되어, z 좌표의 변화와 x, y 좌표의 크기가 비슷한 중요성을 가집니다.

- 만약 z 좌표 범위가 `-100`에서 `100`까지이고, x, y 좌표의 최대 크기가 각각 `20`이라면:
  - `max_z - min_z = 200`
  - `max(fdf->map->max_x, fdf->map->max_y) = 20`
  - `transform_z = max(200, 20) = 200`

이 경우, `transform_z`는 `200`으로 설정되어, z 좌표의 변화가 더 강조됩니다.

### 결론

- `init_line` 함수는 두 점 사이의 선을 나타내는 `t_line` 구조체를 초기화합니다.
- `transform_z`는 3D 맵의 크기와 깊이를 고려하여 선의 변환 및 프로젝션에 사용되는 값입니다. 이는 이후의 렌더링에서 깊이감이나 확대/축소 효과를 조절하는 데 사용될 수 있습니다.

Citations:
[1] https://cppmagister.tistory.com/21
[2] https://sejong-kr.libguides.com/c.php?g=942235&p=6822369
[3] https://wn42.tistory.com/94
[4] https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/builtin-types/struct
[5] https://boycoding.tistory.com/183
[6] https://dream-and-develop.tistory.com/10
[7] https://blog.naver.com/kwy1052aa/221751583039
[8] https://blog.naver.com/sweetie_rex/220290056184?viewType=pc

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

printf 함수 간단 구현  (0) 2025.02.21
mlx_get_data_addr 펑션의 사용법  (0) 2025.02.17
3D 축 기준 회전 공식  (0) 2025.02.07
2차원 배열을 사용한 3차원 표현방법  (0) 2025.02.06
pivoting 상세설명  (0) 2025.02.06