关键的公式,此公式不能画出匀速曲线
// completedPercent为当前所想得到位置的百分比0.0f-1.0f // 根据贝塞尔曲线函数,求得取得此时的x,y坐标 pt.x = (1-completedPercent)*(1-completedPercent)*x1 +2*(1-completedPercent)*completedPercent*x2 + completedPercent*completedPercent*x3; pt.y = (1-completedPercent)*(1-completedPercent)*y1 +2*(1-completedPercent)*completedPercent*y2 + completedPercent*completedPercent*y3;
实例:
void CTrackGetterView::DrawBezier(CDC *pDC) { //CTrackGetterDoc* pDoc = GetDocument(); //CRect rect; int x1 = 18; // 点1 int y1 = 446; int x2 = 144; // 点2 int y2 = 270; int x3 = 284; // 点3 int y3 = 382; POINT pt; COLORREF rbg = RGB(255, 0, 0); for (float completedPercent=0.0f; completedPercent<=1.0f; completedPercent+=0.01f) { //根据贝塞尔曲线函数,求得取得此时的x,y坐标 pt.x = (1-completedPercent)*(1-completedPercent)*x1 +2*(1-completedPercent)*completedPercent*x2 + completedPercent*completedPercent*x3; pt.y = (1-completedPercent)*(1-completedPercent)*y1 +2*(1-completedPercent)*completedPercent*y2 + completedPercent*completedPercent*y3; pDC->SetPixel(pt, rbg); } }
如图: