$n$차 Bezier 곡선을 기술하는 매개변수가 $t $일 때, 곡선을 $[0 ,t]$인 구간과 $[t,1]$인 두 구간으로 나누기 위해 필요한 control point을 구해보자.
// deg = Q.size()-1;
void BezierSubdivision(const int deg, const std::vector<CfPt>& Q, const double t,
std::vector<CfPt>& Left,
std::vector<CfPt>& Right) {
Left.resize(deg+1);
Right.resize(deg+1);
std::vector<CfPt> Q1(deg+1);
for (int i = 0; i <= deg; i++)/* copy of control points*/
Q1[i] = Q[i];
/* triangle computation */
Left[0] = Q1[0];
Right[deg] = Q1[deg];
for (int i = 0; i < deg; i++) {
for (int j = 0; j < (deg-i); j++)
Q1[j] = Q1[j] * (1 - t) + Q1[j+1] * t;
Left[i+1] = Q1[0];
Right[deg-1-i] = Q1[deg-1-i];
}
}
728x90
'Computational Geometry' 카테고리의 다른 글
Centripetal Catmull-Rom Spline (0) | 2024.06.06 |
---|---|
Bezier curves (1) | 2024.04.19 |
Derivatives of Bezier Curves (1) | 2024.04.12 |
Least Squares Bezier Fit (0) | 2024.04.05 |
Why Cubic Splines? (9) | 2024.03.16 |