드 카스텔자의 알고리즘

De Casteljau's algorithm

수치해석수학적 분야에서 데 카스텔자의 알고리즘번스타인 형태나 베지에 곡선으로 다항식을 평가하는 재귀적 방법으로, 발명가 폴 드 카스텔자의 이름을 따서 명명했다.드 카스텔자의 알고리즘은 또한 임의 파라미터 값에서 하나의 베지어 곡선을 두 개의 베지어 곡선으로 분할하는 데 사용될 수 있다.

알고리즘은 대부분의 아키텍처에서 직접 접근에 비해 느리지만, 수치적으로 더 안정적이다.

정의

Bézier 곡선 0,… , 는 다음과 같이 번스타인 형태로 작성할 수 있다

여기서 (는) 번스타인 기반 다항식이다.

의 곡선은 반복 관계를 사용하여 평가할 수 있다.

다음지점 에서 평가는 ( 2) {\}}회 작동에서 평가할 수 있다결과 ( 0) 는 다음에 의해 제공됨

또한 Bézier 곡선 은(는) 지점 0 에서 두 개의 곡선으로 분할할 수 있으며, 각 제어점은 다음과 같다.

구현 예

하스켈에서 De Casteljau 알고리즘의 구현 예는 다음과 같다.

데카스텔자우 :: 더블 -> [(더블, 더블)] -> (더블, 더블) 데카스텔자우 t [b] = b 데카스텔자우 t 코에프스 = 데카스텔자우 t 감소된   어디에     감소된 = zipWith (LerP t) 코에프스 (꼬리를 치다 코에프스)     LerP t (x0, y0) (x1, y1) = (리퍼프 t x0 x1, 리퍼프 t y0 y1)     리퍼프 t a b = t * b + (1 - t) * a 

Python에서 De Casteljau 알고리즘의 구현 예:

반항하다 de_casteljau(t, 코에프스):     베타. = [c 을 위해 c  코에프스] # 이 목록의 값이 재정의됨     n = (베타.)     을 위해 j  범위(1, n):         을 위해 k  범위(n - j):             베타.[k] = 베타.[k] * (1 - t) + 베타.[k + 1] * t     돌아오다 베타.[0] 

JavaScript에서 De Casteljau 알고리즘의 구현 예:

인접 지점에 선형 보간법을 재귀적으로 적용하여 얻은 중간 선 세그먼트.
// 예: lerp(0.5, 0.0, 1.0) == 0.5 하게 하다 리퍼프 = (t, p1, p2) => (1 - t) * p1 + t * p2;  // 예: 감소(0.5, ...)[0.0, 1.0, 2.0, 3.0]) == [0.5, 1.5, 2.5] 하게 하다 줄이다 = (t, p1, p2, ...ps) => ps.길이 > 0     ? [리퍼프(t, p1, p2), ...줄이다(t, p2, ...ps)]     : [리퍼프(t, p1, p2)];  // 예: deCasteljau(0.5, [0.0, 1.0, 2.0, 3.0]) == 1.5 하게 하다 데카스텔자우 = (t, ps) => ps.길이 > 1     ? 데카스텔자우(t, 줄이다(t, ...ps))     : ps[0]; 

메모들

손으로 계산을 할 때 계수를 삼각형 구조로 다음과 같이 적는 것이 유용하다.

번스타인 다항식을 평가하기 위해 점 t0 선택할 때, 우리는 삼각형 구조의 두 대각선을 사용하여 다항식의 분열을 구성할 수 있다.

그리고

우리는 번스타인의 다항식 2를 번스타인의 계수로 평가하고자 한다.

t0 지점에서

재귀는 다음과 같이 시작한다.

그리고 두 번째 반복과 함께 반복은

2등급의 번스타인의 예상 다항식이다.

베지에 곡선

A 베지에 곡선

n + 1 제어점을 갖는i 3차원 공간에서 n 도 n의 베지어 곡선을 평가할 때

와 함께

우리는 베지어 곡선을 세 개의 개별 방정식으로 나누었다.

드 카스텔자의 알고리즘을 사용하여 개별적으로 평가한다.

기하학적 해석

De Casteljau의 알고리즘의 기하학적 해석은 간단하다.

  • 제어점 ,.. ., P }, 을(를) 가진 베지어 곡선을 고려하십시오 연속된 점들을 연결하면 곡선의 제어 폴리곤이 생성된다.
  • 이 폴리곤의 각 선 세그먼트를 비율 :( ( -t ) 과(와)로 세분화하고 얻은 점을 연결하십시오.이렇게 하면 세그먼트가 한 개 줄어든 새로운 다각형에 도달할 수 있다.
  • 단일 지점에 도달할 때까지 프로세스를 반복하십시오. 이 점이 파라미터 에 해당하는 곡선의 지점입니다

다음 그림은 큐빅 베지어 곡선에 대한 이 과정을 보여준다.

DeCasteljau1.svg

생성된 중간 지점은 사실 두 개의 새로운 베지어 곡선에 대한 제어 지점이며, 둘 다 이전 지점과 정확히 일치한다는 점에 유의하십시오.이 알고리즘은 에서 곡선을 평가할 뿐만 아니라 에서 곡선을 두 조각으로 나누고, 베지어 형태로 두 개의 하위곡선의 방정식을 제공한다.

위에 주어진 해석은 비합리적 베지어 곡선에 유효하다.To evaluate a rational Bézier curve in , we may project the point into ; for example, a curve in three dimensions may have its control points and weights projected to the weighted control points . The algorithm then proceeds as usual, interpolating in .그 결과로 나온 4차원 점들은 원근분할로 다시 3공간으로 투영될 수 있다.

일반적으로 합리적 곡선(또는 표면)에서의 연산은 투영 공간에서 비합리적 곡선에서의 연산과 동일하다.이러한 표현은 "가중 조정점"과 가중치로 표현하면 합리적인 곡선을 평가할 때 편리할 때가 많다.

참고 항목

참조

  • 패린, 제럴드 & 한스포드, 다이앤(2000년)CAGD의 필수품.Natic, MA: A K Peters, Ltd. ISBN1-56881-123-3

외부 링크

  • Bézier 곡선의 조각 선형 근사치 – 리큐[check spelling] 정지 시점을 결정하는 기준을 포함하여 De Casteljau의 알고리즘에 대한 설명
  • 베지어 커브와 피카소 — 큐빅 베지어 커브에 적용된 드 카스텔자의 알고리즘에 대한 설명과 삽화.
  • [ 대수적 미적분 및 dCB 곡선 ] — YouTube - Polynumber and de Casteljau Bezier 곡선 N J Wildberger
  • de Casteljau의 알고리즘 - 구현 도움말과 알고리즘의 대화형 시연.