프로젝트공부아이디어
    • 2월
    • 1월
  • 27

    26. 2. 27.

  • 26

    26. 2. 26.

  • 25

    26. 2. 25.

  • 24

    26. 2. 24.

  • 23

    26. 2. 23.

  • 22

    26. 2. 22.

  • 13

    26. 2. 13.

  • 10

    26. 2. 10.

  • 9

    26. 2. 9.

  • 6

    26. 2. 6.

  • 2

    26. 2. 2.

로딩 중...

23

2026. 2. 23.

단위 벡터(Unit Vector)

크기(길이)가 1인 벡터

  • 목적: 벡터의 방향성만을 명시하거나 기준을 설정할 때 사용한다
  • 표기: 일반 벡터 위에 삿갓모양의 기호(hat, u^\hat{u})를 씌워 표시한다.
정규화

벡터 v⃗=(a,b)\vec{v} = (a,b)가 있을 때, 이와 같은 방향의 단위 벡터 u^\hat{u}는 다음과 같이 구한다.

u^=v⃗∥v⃗∥=(a,b)a2+b2\hat{u} = \frac{\vec{v}}{\begin{Vmatrix}\vec{v}\end{Vmatrix}} = \frac{(a,b)}{\sqrt {a^2+b^2}}

예시: 벡터 v⃗=(3,4)\vec{v}=(3,4)의 크기는 32+42=5\sqrt{3^2 + 4^2} = 5이므로, 단위 벡터는 (35,45)(\frac{3}{5},\frac{4}{5})이다.

법선 벡터(Normal Vector)

공간 내 곡면/평면 또는 곡선 위 한 점에서 그 대상에 수직(orthogonal)인 방향을 가리키는 벡터

3차원 공간 평면 ax+by+cz+d=0ax+by+cz+d=0에서 법선 벡터는 n⃗=(a,b,c)\vec{n}=(a,b,c)로 표현되며 이는 평면의 기울기를 정의하는 핵심 요소이다.

벡터 내적이 게임에서 사용되는 지점

그림자 렌더링

3차원 물체 렌더링

카메라와 각 폴리곤(평면)의 법선벡터 간 내적 결과의 부호로 카메라를 등지고 있는지 확인할 수 있다. 여기서 중요한 것은 각도가 몇 도인지까지는 정확히 알아낼 필요가 없다는 것

반사 벡터

C#
Vector3 reflect = velocity + 2 * normal * Vector3.Dot(-velocity, normal);
  1. 벽을 향해 p의 속도로 움직이는 공의 속도 벡터 p를 반전시킨 뒤 벽의 법선 벡터 n과 내적한다
  2. 내적 결과값에 법선 벡터 n을 두배 곱해준다
  3. 속도 벡터 p를 더하면 반사 벡터가 구해진다

C++ typedef/using

typedef란 문자 그대로 타입의 또다른 별칭을 지을 수 있게 해주는 키워드이다.

C++
#ifdef INT_2_BYTEStypedef char int8_t;typedef int int16_t;typedef long int32_t;#elsetypedef char int8_t;typedef short int16_t;typedef int int32_t;#endif

위와 같이 플랫폼 설정에 따라 자료형의 크기를 같은 별칭의 타입으로 유연하게 사용할 수 있게 된다

C++
// 예시 1int GradeTest();typedef int testScore_t;testScore_t GradeTest();
C++
// 예시 2typedef std::vector<std::pair<std::string, int>> pairlist_t;pairlist_t pairlist;bool hasDuplicates(pairlist_t pairlist) {}출처: [https://boycoding.tistory.com/182](https://boycoding.tistory.com/182) [소년코딩:티스토리]

위와 같이 가독성이 떨어지는 긴 타입 선언도 별칭으로 가릴 순 있다.

하지만 개인적으로 이런 장난질은 선호하지 않는다.

  1. 어차피 시간이 지나면 testScore_t, pairlist_t가 뭔지 까먹어서 다시 들여다보게 돼있다
  2. 애초에 길게 적어야하는 상황 자체가 잘못됐을 확률이 높다. 또한 등급 테스트 함수가 점수를 반환하는 것 자체도 어색하다(등급 점수를 반환하고 싶으면 MeasureGrade()따위의 작명이 더 나을 것).
왼쪽 화살표2224오른쪽 화살표