> For the complete documentation index, see [llms.txt](https://lee-seokhyun.gitbook.io/game-programming/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lee-seokhyun.gitbook.io/game-programming/client/easy-mathematics/gdc2012/3-cubic-hermite-splines.md).

# 3차 허밋 스플라인(Cubic Hermite Splines)

### 3차 허밋 곡선

![](/files/-LpqqX3vSGL4sWfWO1Tz)

3차 허밋 곡선은 3차 베지어 곡선과 매우 흡사합니다만, 베지어 곡선과는 다르게 가이드 포인트로 사용되는 B와 C라는 점이 존재하지 않습니다.\
그대신, 각 지점 A와 D에 각각 U와 V라고 불리우는 속도 개념이 들어갑니다.

### 3차 허밋 스플라인

![](/files/-LpqqtHB7zFRkXM6D26K)

**연속성** $$(C^0)$$ 을 보장하기 위해서는 첫번째 곡선의 끝점인 D가 두번째 곡선의 시작점인 A와 붙어있어야 합니다.

![](/files/-LpqrSX5uT-yCd42RGdO)

**매끄러운 연결** $$(C^1)$$ 을 위해서는 일반적으로 이전곡선에서 V의 방향과와 다음 곡선에서 U의 방향을를 일치하게끔 만들면 됩니다.

![](/files/-LpqsUx7hED9qCOel96D)

**최고의 연속성** $$(C^2)$$ 을 가지려면 V와 U의 **크기**와 **방향**을 모두 일치시켜주면 됩니다.\
즉, 각 노트마다 하나씩의 속도 벡터가 있는 셈입니다.

허밋 곡선과 허밋 스플라인은 모두 파라미터 곡선이며 기본적으로 베지어 곡선과 같은 방식으로 작동합니다.\
3차 허밋 곡선의 공식은 다음과 같습니다 :

$$
P(t) = s^2(1+2t)A + t^2(1+2s)D + s^2tU – st^2V
$$

마지막에 계산되는 부호가 +가 아닌 **-**&#xB77C;는것에 주의 하세요.\
**잘못된 계산** : $$P(t) = s^2(1+2t)A + t^2(1+2s)D + s^2tU + st^2V$$&#x20;

\
3차 허밋 곡선과 베지어 곡선은 기본적으로 똑같기 때문에 **서로 변환이 가능**합니다.\
3차 허밋 곡선을 베지어 곡선으로 변환하기 :&#x20;

$$B = A + (U/3)$$ \
$$C = D – (V/3)$$&#x20;

3차 베지어 곡선을 허밋 곡선으로 변환하기 :&#x20;

$$U = 3(B – A)$$\
$$V = 3(D – C)$$&#x20;
