(1)定义全局变量

CP2* P;//数组
int f;//用于存入数组的动态变量
int num;//鼠标输入的点个数

(2)构造函数初始化

P=new CP2[200];//最多200个点
f=0;
num=0;

(3)函数1:鼠标给点

void CMy1209View::OnLButtonDown(UINT nFlags, CPoint point)
{// TODO: Add your message handler code here and/or call defaultCDC* pDC=GetDC();P[f].x=point.x;P[f].y=point.y;if(f!=0){pDC->MoveTo(P[f-1].x,P[f-1].y);pDC->LineTo(P[f].x,P[f].y);}f++;num++;CView::OnLButtonDown(nFlags, point);
}

(4)函数2:画Bezier曲线函数

void CMy1209View::DrawBezier()
{num--;CDC *pDC=GetDC();CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));//曲线颜色pOldPen=pDC->SelectObject(&NewPen);   pDC->MoveTo(P[0].x,P[0].y);for(double t=0.0;t<=1.0;t+=0.01){      double x=0,y=0;for(int i=0;i<=num;i++){x+=P[i].x*C(num,i)*pow(t,i)*pow(1-t,num-i);y+=P[i].y*C(num,i)*pow(t,i)*pow(1-t,num-i);}pDC->LineTo(x,y);}pDC->SelectObject(pOldPen);NewPen.DeleteObject();ReleaseDC(pDC);
}

(5)函数3:Bernstein基函数

double CMy1209View::C(const int &n, const int &i)
{return double(Fac(n))/(Fac(i)*Fac(n-i));
}

(6)函数4:阶乘函数

long CMy1209View::Fac(int n)
{int f;if(0==n||1==n)f=1;elsef=n*Fac(n-1);return f;
}

(7)函数5:添加菜单函数

void CMy1209View::OnBezier()
{// TODO: Add your command handler code hereCDC* pDC=GetDC();DrawBezier();
}

(8)在屏幕上点出n个点,点击‘画图’。


方法2:只换掉了函数234
二维CP2类型数组的定义:

CP2** pp;

初始化:

    pp=new CP2*[200];for(int i=0;i<=200;i++){pp[i]=new CP2[200];}

函数2换成

void CMy1209View::DrawBezier()
{num--;CDC* pDC=GetDC();pDC->MoveTo(P[0].x,P[0].y);for(double t=0.0;t<=1.0;t+=0.01){deCasteljau(t,P);pDC->LineTo(pp[0][num].x,pp[0][num].y);}ReleaseDC(pDC);
}

函数34换成:

void CMy1209View::deCasteljau(double t, CP2 *p)
{for(int k=0;k<=num;k++){pp[k][0]=P[k];}for(int r=1;r<=num;r++)//de Casteljau递推公式{for(int i=0;i<=num-r;i++){ pp[i][r].x=(1-t)*pp[i][r-1].x+t*pp[i+1][r-1].x;pp[i][r].y=(1-t)*pp[i][r-1].y+t*pp[i+1][r-1].y;} }
}

计算机图形学-自由曲线的生成相关推荐

  1. 计算机图形学曲线算法代码,计算机图形学自由曲线绘制算法.doc

    计算机图形学自由曲线绘制算法 宁夏师范学院数学与计算机科学学院 <>实验报告 实验序号: 实验项目名称: 学 号姓 名专业.班实验地点指导教师时 间.实验内容与步骤 1 //TestVie ...

  2. 计算机图形学 Bresenham直线生成算法

    bresenham算法是一种光栅化的直线生成算法,是计算机图形学目前使用广泛的直线扫描转换算法,具体逻辑很简单,就是描点.所以bresenham的算法研究实际上是研究目标点的选择. 实验环境: ope ...

  3. 计算机图形学-基本图形生成算法

    基本图形生成算法 图元扫描转换 直线段扫描转换 圆弧扫描转换 实区域填充 图形的剪裁 图形反走样 消隐 光栅化算法 线段光栅化算法     DDA算法 中点Bresenham画线算法 Bresenha ...

  4. 计算机图形学直线算法论文,《计算机图形学》中直线生成算法的教学心得

    摘要:<计算机图形学>是计算机科学与技术专业一门重要的专业课,其中直线生成算法是教学重点之一.该文通过分析几种直线生成算法的特点,阐述了理论教学和实践教学的重点和难点,总结了教学的体会和心 ...

  5. 计算机图形学曲线生成原理,计算机图形学_曲线及生成.ppt

    计算机图形学_曲线及生成 华中理工大学计算机学院 陆枫 99-7 1999年7月 7.2.1 曲线的表示要求 1)唯一性 2)几何不变性 3)易于定界 4)统一性 5)易于实现光滑连接 6)几何直观 ...

  6. 计算机图形学三维变换论文,计算机图形学 第5章 三维图形生成和变换技术

    计算机图形学 第5章 三维图形生成和变换技术 (63页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 第五章 目录第五章 三维图形生成和变 ...

  7. 计算机图形学生成的基本单位是线段,计算机图形学.doc

    文档介绍: 计算机图形学70125一. 判断题(10 分) 1. 计算机图形生成的基本单位是线段.( ) 2. 在种子填充算法中所提到的八向连通区域算法同时可填充四向连通区; ( ) 3. 齐次坐标提 ...

  8. 计算机图形学真实感显示代码,计算机图形学实验 - 真实感图形场景的生成

    <计算机图形学实验 - 真实感图形场景的生成>由会员分享,可在线阅读,更多相关<计算机图形学实验 - 真实感图形场景的生成(4页珍藏版)>请在人人文库网上搜索. 1.计算机图形 ...

  9. 计算机怎样用计算法绘制圆弧,计算机图形学圆弧生成算法具体程序实现

    数学与软件科学学院实验报告 学期: 2010 至 2011 第一学期 2010年 10月 5日课程名称: 计算机图形学专业:信息与计算科学2007级5班实验编号: 03 实验项目: 圆弧生成算法 指导 ...

最新文章

  1. python 学习总结6 前端学习2
  2. jQuery-处理class属性
  3. 关于 ABAP 调试器里的 16 进制值的显示问题
  4. 玩转python(2)多线程的历史2
  5. 【算法分析与设计】快速排序
  6. Python下基于requests及BeautifulSoup构建网络爬虫
  7. java 主类 测试类_Java中的测试类和主类分别是什么,有点晕啊。?
  8. 白噪声的matlab程序,matlab产生白噪声信号
  9. hibernate4中HHH000273的错误
  10. selenium爬虫入门简单实例(获取对分易习题)
  11. Intro to RL Lecture1
  12. java eclipse计算器_eclipse编写计算器
  13. 目标检测数据集VOC 2007/2012 整理
  14. MySQL 使用 Workbench 建表时 PK NN UQ BIN UN ZF AI G 的含义
  15. 竞价推广转化不好怎么办?
  16. 键盘钢琴软件v1.0.1.0官方pc版
  17. rabbitmq的安装与命令行管理工具rabbitmqadmin的使用
  18. codecombat极客战记森林(JavaScript)21-40关卡
  19. 《R语言数据分析》期末试题
  20. 天翼云:改变数据时代的存储与分享

热门文章

  1. 真实场景的虚拟视点合成(View Synthsis)详解
  2. 移动终端处理器构成和基带芯片概述
  3. CSDN竞赛第6期, 学python算法一个月的人都能拿下这套题
  4. Fritzing下载安装
  5. Kubernetes学习(七)弹性伸缩
  6. maya腿的蒙皮旋转枢轴_MAYA动画:用驱动关键帧实现旋转门效果
  7. 品优购项目实战第一天打卡
  8. 别人对自己不好,自己对自己好一点
  9. leetcode练习 对角线遍历(二维数组)
  10. komodo 注册机