MFC二次有理Bezier曲线升阶

升阶前:

升阶后:


升阶计算的核心代码:

void RationalElevation::DrawDegreeElevationCurve(CP2 *P,CDC*pDC)//升阶后的点计算
{double weight[3];//升阶前的三个权因子weight[0]=1.0,weight[1]=sqrt(2.0)/2,weight[2]=1.0;double Weight[4];//升阶后的四个权因子CP2 V[4];//升阶后的控制点for(int i=0;i<=n+1;i++){double alpha=i/double(n+1);Weight[i]=alpha*weight[i-1]+(1-alpha)*weight[i];V[i]=(alpha*weight[i-1]*P[i-1]+(1-alpha)*weight[i]*P[i])/Weight[i];}DrawControlPoint(V,pDC);//绘制控制点CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);double Bern03,Bern13,Bern23,Bern33;//定义伯恩斯坦基函数double tStep=0.01;//绘制步长pDC->MoveTo(ROUND(V[0].x),ROUND(V[0].y));for(double t=0;t<=1.0;t=t+tStep){Bern03=(1-t)*(1-t)*(1-t);//伯恩斯坦基函数值Bern13=3*t*(1-t)*(1-t);Bern23=3*t*t*(1-t);Bern33=t*t*t;CP2 tempPoint(0,0);//计算插值点double denominator=Bern03*Weight[0]+Bern13*Weight[1]+Bern23*Weight[2]+Bern33*Weight[3];//分母tempPoint=(Bern03*Weight[0]*V[0]+Bern13*Weight[1]*V[1]+Bern23*Weight[2]*V[2]+Bern33*Weight[3]*V[3])/denominator;//分子/分母pDC->LineTo(ROUND(tempPoint.x),ROUND(tempPoint.y));}pDC->SelectObject(pOldPen);
}

参考《计算几何算法与实现》–孔令德

MFC二次有理Bezier曲线升阶相关推荐

  1. MFC绘制双有理Bezier曲面

    MFC绘制双有理Bezier曲面 双有理Bezier曲面可以精确表示任意二次曲面,如球面.柱面及圆锥面等,下面给出1/8球面的绘制类. 参考<计算几何算法与实现>–孔令德 #pragma ...

  2. MFC有理二次Bezier曲线绘制

    MFC有理二次Bezier曲线绘制 非有理Bezier曲线曲线无法精确表示所有的二次曲线和二次曲面,引入了有理Bezier曲线曲面,来精确表示.如图,通过控制权重,可以获取不同的二次有理Bezier曲 ...

  3. Bezier曲线的拼接

    Bezier曲线的拼接 根据前面对Bezier曲线生成算法的介绍,显然随着点的增加,接着会引起  的次数提高,而而高次多项式又会带来计算上的困难. 对于上式子,也就是随着n的增加,t的次数也会随着增加 ...

  4. MFC有理二次Bezier曲线精确拟合圆

    MFC有理二次Bezier曲线精确拟合圆 见蓝色线条,相比较与无理Bezier曲线,有理Bezier曲线可以精确拟合圆等二次线条. 控制点的赋值为: int r=200;//圆的半径point[0][ ...

  5. 过三点的二次贝塞尔曲线及其升阶

    贝塞尔曲线(Bézier curve)是计算机图形学中相当重要的参数曲线,Photoshop 中的钢笔效果,Flash5 的贝塞尔曲线工具都是它在计算机图形学中的具体应用. 贝塞尔曲线由法国雷诺汽车公 ...

  6. OpenGL程序VC框架:Bezier 曲线

    OpenGL程序VC框架:Bezier 曲线 下面以画一条 Bezier 曲线为例,详细介绍VC++ 上 OpenGL编程的方法.文中给出了详细注释,以便给初学者明确的指引.一步一步地按所述去做,你将 ...

  7. 曲线数学NURBS之bezier曲线

    最近新研究topic是NURBS,NURBS(Non Uniform Rational B-spline)即非均匀有理B样条曲线.往往提到B样条.以及NURBS就会提到bezier曲线,他们之间的关系 ...

  8. bezier曲线解析与代码(c++)

    前言: 作为rhino重度用户,我对于nurbs建模早有耳闻,但对于何为nurbs却不得其解.最近借上<计算机辅助设计>课程的机会,对此作了一些深入的学习,于是在此记录一下一些课程笔记和课 ...

  9. MFC绘制Bezier曲线

    MFC绘制Bezier曲线 参考<计算几何算法与实现>–孔令德 绘制的Bezier曲线次数为3,四个控制节点 1.添加二维点类 #pragma once //为了避免按照x和y方向进行重复 ...

最新文章

  1. iOS技术篇1-CocoaPods
  2. JAVA日期加减运算
  3. 谁是2020年最强Python库?年度Top10出炉
  4. RHEL5下构建LVS负载均衡系统详解(二)
  5. 有关logistic(sigmoid)函数回归
  6. 安卓APP_ 控件(8)—— AlertDialog
  7. mysql ubuntu client_ubuntu 安装 mysqlclient
  8. 库克时期的苹果和乔布斯时期的苹果是否有差距?
  9. 1081. Rational Sum (20)-PAT甲级真题
  10. php java session共享_PHP实现多服务器session共享之NFS共享
  11. 用EasyRecovery“监控硬盘”功能检测硬盘问题的方法
  12. 耶鲁大学校长2018迎新演讲全文
  13. 操作系统:高响应比优先调度算法(HRRN)Java代码实现
  14. Navicat12.0 激活
  15. linux给wps安装字体
  16. pwrkey直接接地 sim7020_有方模块常见问题解答
  17. Speex的安装使用
  18. reverse-polish-notation
  19. 微信小程序带图片弹窗简单实现
  20. 关于SQL 与 NoSQL的区别

热门文章

  1. labelGo:基于 YOLOv5 的辅助标注工具
  2. 【测试理论基础之黑盒/灰盒/白盒测试案例设计方法】
  3. Gox语言中使用读写锁解决并发冲突以及如何实现线程同步归并-GX22
  4. 走捷径修Bug却引起全球大宕机
  5. 快速排序的原理,实现及特点
  6. 计算机蓝屏代码0x000000ED,蓝屏代码0x000000ed的4大解决方法详解!蓝屏0x000000ed的原因和解决方法!...
  7. 手机技巧:小米MIUI 14 系统优化超级实用技巧,彻底和广告说再见
  8. GAF运维监控能力介绍
  9. C语言课程设计——学生证管理系统
  10. python巴特沃斯滤波器_butterworth-实时数字巴特沃斯IIR滤波器-Kei Imada