Bezier曲线的绘制和拼接实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Bezier曲线的绘制实验报告
一、程序实现环境
1操作系统:Windows XP 、Windows7
2.编程语言:C++
3.程序实现环境:Visual C++ 6.0
二、算法思想
三、使用说明
程序界面如下图:
用户可以在编辑框中输入4个控制点的坐标,也可以通过在绘图区内直接通过鼠标的单击指定4个控制点的位置,输入4个控制端点
后,单击“画Bezier曲线”按钮即可绘制Bezier曲线。
四、实验结果
五、程序代码(关键代码)
void CMFC_BezierCurve2Dlg::OnLButtonDown(UINT nFlags, CPoint point) {
if(pointOrd==1) //原点(490,270)
{
m_p1_x = point.x - 490;
m_p1_y = 270 - point.y;
}
if(pointOrd==2)
{
CDC *pDC=GetDC();
pDC->MoveTo(490+m_p1_x, 270-m_p1_y);
pDC->LineTo(point.x, point.y);
m_p2_x = point.x - 490;
m_p2_y = 270 - point.y;
}
if(pointOrd==3)
{
CDC *pDC=GetDC();
pDC->MoveTo(490+m_p2_x, 270-m_p2_y);
pDC->LineTo(point.x, point.y);
m_p3_x = point.x - 490;
m_p3_y = 270 - point.y;
}
if(pointOrd==4)
{
CDC *pDC=GetDC();
pDC->MoveTo(490+m_p3_x, 270-m_p3_y);
pDC->LineTo(point.x, point.y);
m_p4_x = point.x - 490;
m_p4_y = 270 - point.y;
}
pointOrd++;
UpdateData(FALSE);
CDialog::OnLButtonDown(nFlags, point);
}
voidGetCnk (int n, int *c)
{
inti,k;
for(k=0; k<=n; k++)
{
c[k]=1;
for(i=n; i>=k+1; i--) c[k]=c[k]*i;
for(i=n-k; i>=2; i--) c[k]=c[k]/i;
}
}
void CMFC_BezierCurve2Dlg::GetPointPos(intControlN, double t, int *c) {
int k, n=ControlN-1;
double Bernstein;
Pt.x=0.0; Pt.y=0.0;
for(k=0; k { Bernstein=c[k]*pow(t,k)*pow(1-t,n-k); Pt.x += ControlP[0][k].x * Bernstein; Pt.y += ControlP[0][k].y * Bernstein; } } void CMFC_BezierCurve2Dlg::OnButtonDrawBeziercurve() { UpdateData(); pointOrd=1; CDC *pDC=GetDC(); ControlP[0][0].x=m_p1_x;ControlP[0][0].y=m_p1_y; ControlP[0][1].x=m_p2_x;ControlP[0][1].y=m_p2_y; ControlP[0][2].x=m_p3_x;ControlP[0][2].y=m_p3_y; ControlP[0][3].x=m_p4_x;ControlP[0][3].y=m_p4_y; pDC->MoveTo(490+m_p1_x, 270-m_p1_y); pDC->LineTo(490+m_p2_x, 270-m_p2_y); pDC->LineTo(490+m_p3_x, 270-m_p3_y); pDC->LineTo(490+m_p4_x, 270-m_p4_y); int *C, i; intControlN=4, m=500; C=new int[ControlN]; GetCnk (ControlN-1, C); for(i=0; i<=m; i++) { GetPointPos(ControlN, (double)i/(double)m, C); pDC->SetPixel(490+Pt.x, 270-Pt.y, 255); } } 两段Bezier曲线的拼接实验报告 一、程序实现环境 1操作系统:Windows XP 、Windows7 2.编程语言:C++ 3.程序实现环境:Visual C++ 6.0 二、算法思想 三、使用说明 程序界面如下图: 用户可以在编辑框中输入4个控制点的坐标,也可以通过在绘图区内直接通过鼠标的单击指定4个控制点的位置,输入4个控制端点