下载此文档

Bezier曲线的绘制和拼接实验报告.docx


文档分类:IT计算机 | 页数:约11页 举报非法文档有奖
1/11
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/11 下载此文档
文档列表 文档介绍
Bezier曲线的绘制实验报告
一、程序实现环境
1操作系统:Windows XP 、Windows7
:C++
:Visual C++
二、算法思想
三、使用说明
程序界面如下图:
用户可以在编辑框中输入4个控制点的坐标,也可以通过在绘图区内直接通过鼠标的单击指定4个控制点的位置,输入4个控制端点
后,单击“画Bezier曲线”按钮即可绘制Bezier曲线。
四、实验结果
五、程序代码(关键代码)
void CMFC_BezierCurve2Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(pointOrd==1) //原点(490,270)
{
m_p1_x = - 490;
m_p1_y = 270 - ;
}
if(pointOrd==2)
{
CDC *pDC=GetDC();
pDC->MoveTo(490+m_p1_x, 270-m_p1_y);
pDC->o(, );
m_p2_x = - 490;
m_p2_y = 270 - ;
}
if(pointOrd==3)
{
CDC *pDC=GetDC();
pDC->MoveTo(490+m_p2_x, 270-m_p2_y);
pDC->o(, );
m_p3_x = - 490;
m_p3_y = 270 - ;
}
if(pointOrd==4)
{
CDC *pDC=GetDC();
pDC->MoveTo(490+m_p3_x, 270-m_p3_y);
pDC->o(, );
m_p4_x = - 490;
m_p4_y = 270 - ;
}
pointOrd++;
UpdateData(FALSE);

CDialog::OnLButtonDown(nFlags, point);
}
void k (int n, int *c)
{
int i,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(int ControlN, double t, int *c)
{
int k, n=ControlN-1;
double Bernstein;
=; =;
for(k=0; k<ControlN; k++)
{
Bernstein=c[k]*pow(t,k)*pow(1-t,n-k);
+= ControlP[0][k].x * Bernstein;
+= 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->o(490+m_p2_x, 270-m_p2_y);
pDC->o(490+m_p3_x, 270-m_p3_y);
pDC->o(490+m_p4_x, 270-m_p4_y);
int *C, i;
int ControlN=4, m=500;
C=new int[ControlN];
k (ControlN-1, C);
for(i=0; i<=m; i++)
{
GetPo

Bezier曲线的绘制和拼接实验报告 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数11
  • 收藏数0 收藏
  • 顶次数0
  • 上传人fy3986758
  • 文件大小0 KB
  • 时间2015-05-26