Posts

Showing posts from May, 2016

Bezier Curve 베지어 곡선 구현

Image
베지어 곡선 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)