Bezier Curve 베지어 곡선 구현

베지어 곡선


typedef struct { float x, y; } point;

 CurvePoint.x = ControlPoints[0].x * (1.0 - t) * (1.0 - t) * (1.0 - t)
  + ControlPoints[1].x * 3.0 * t * (1.0 - t) * (1.0 - t)
  + ControlPoints[2].x * 3.0 * t * t * (1.0 -t )
  + ControlPoints[3].x * t * t * t;
 CurvePoint.y = ControlPoints[0].y * (1.0 - t) * (1.0 - t) * (1.0 - t)
  + ControlPoints[1].y * 3.0 * t * (1.0 - t) * (1.0 - t)
  + ControlPoints[2].y * 3.0 * t * t * (1.0 - t)
  + ControlPoints[3].y * t * t * t;

point 구조체 배열을 제어점 ControlPoints로 부터 얻어낸 곡선의 점들로 채우는 함수가 필요하며, 이함수의 호출에는 충분한 메모리가 할당되어야한다.
메모리가 부족하면 정상적으로 출력이 되지 않는다.
ex)ControlPoints = (point *)malloc(sizeof(point)*n);
      n은 점의 개수로 생각하면된다. 500정도면 어느정도 봐줄만한 곡선이 그려진다.

ControlPoints[0]은 시작점 (P0), ControlPoints[1]은 첫번째 제어점 (P1)
ControlPoints[2]는 두번째 제어점 (P2), ControlPoints[3]은 끝점 (P3)
t는 매개변수로, 0 ≤ t ≤ 1 사이값을 갖는다. 0 ≤ i < n, delta = 1.0/n,  t =  i * delta

곡선의 모양은  제어점을 변경하여 조절할수 있으며, 베지어 곡선은 어떠한 경우에든지
항상 블록다각형(Convex Hull)내에 위치하게 된다. 시작점(P0),과 끝점(P3)에서의 기울기는
각각 직선P0P1과 직선P2P3의 기울기와 같다.

Comments

Popular posts from this blog

[Python] - 블루투스 모듈 HC-06의 MAC 주소를 이용하여 통신 포트 찾기

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결

[Raspberry Pi] - 라즈베리 파이에서 멀티미디어 감상에 적절한 비디오 세팅