关键的公式,此公式不能画出匀速曲线
// 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);
}
}
如图:

1万+

被折叠的 条评论
为什么被折叠?



