当前位置:首页 > > 充电吧
[导读]一、原理:       贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由 Paul de Cas

一、原理:

       贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由 Paul de Casteljau 于1959年运用 de Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线。

线性贝塞尔曲线

给定点 P0、P1,线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出:

且其等同于线性插值。


二次方贝塞尔曲线的路径由给定点 P0、P1、P2 的函数 B(t) 追踪:

TrueType 字型就运用了以贝塞尔样条组成的二次贝塞尔曲线。


P0、P1、P2、P3 四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于 P0 走向 P1,并从 P2 的方向来到 P3。一般不会经过 P1 或 P2;这两个点只是在那里提供方向资讯。 P0 和 P1 之间的间距,决定了曲线在转而趋进P3 之前,走向 P2 方向的“长度有多长”。

曲线的参数形式为:

现代的成象系统,如 PostScript、Asymptote 和 Metafont,运用了以贝塞尔样条组成的三次贝塞尔曲线,用来描绘曲线轮廓。

一般化

P0、P1、…、Pn,其贝塞尔曲线即

例如 :

如上公式可如下递归表达: 用  表示由点 P0、P1、…、Pn 所决定的贝塞尔曲线。则

用平常话来说, 阶贝塞尔曲线之间的插值。


一些关于参数曲线的术语,有

即多项式

又称作 n 阶的伯恩斯坦基底多项式,定义 00 = 1。

点 Pi 称作贝塞尔曲线的控制点。多边形以带有线的贝塞尔点连接而成,起始于 P0 并以 Pn 终止,称作贝塞尔多边形(或控制多边形)。贝塞尔多边形的凸包(convex hull)包含有贝塞尔曲线。

线性贝塞尔曲线函数中的 t 会经过由 P0 至P1 的 B(t) 所描述的曲线。例如当 t=0.25 时,B(t) 即一条由点 P0 至 P1 路径的四分之一处。就像由 0 至 1 的连续 t,B(t) 描述一条由 P0 至 P1 的直线。


为建构二次贝塞尔曲线,可以中介点 Q0 和 Q1 作为由 0 至 1 的 t

由 P0 至 P1 的连续点 Q0,描述一条线性贝塞尔曲线。由 P1 至 P2 的连续点 Q1,描述一条线性贝塞尔曲线。由 Q0 至 Q1 的连续点 B(t),描述一条二次贝塞尔曲线。 

      


为建构高阶曲线,便需要相应更多的中介点。对于三次曲线,可由线性贝塞尔曲线描述的中介点 Q0、Q1、Q2,和由二次曲线描述的点 R0、R1 所建构:

      

对于四次曲线,可由线性贝塞尔曲线描述的中介点 Q0、Q1、Q2、Q3,由二次贝塞尔曲线描述的点 R0、R1、R2,和由三次贝塞尔曲线描述的点 S0、S1 所建构:

      

P(t)=(1-t)P0+tP1 , 。
矩阵表示为:
  , 。
P(t)=(1-t)2P0+2t(1-t)P1+t2P2, 。
矩阵表示为:
  , 。


  P(t)=(1-t)3P0+3t(1-t)2P1+3t2(1-t)P2+t3P
矩阵表示为:
, 。
(6-3-2) 
, 。 
在(6-3-2)式中,Mn+1是一个n+1阶矩阵,称为n次Bezier矩阵。
 (6-3-3)

其中,

利用(6-3-3)式,我们可以得到任意次Bezier矩阵的显式表示,例如4次和5次Bezier矩阵为:

 
可以证明,n次Bezier矩阵还可以表示为递推的形式:
 (6-3-4)
 

二、算法(c++)

工程目录是:Win32App 
vc6.0

#include

  HDC hdc;
  static POINT pt[NUM];
  TEXTMETRIC tm;
  static int cxClient,cyClient;
  HPEN hpen;
  int i,j,k,n,t;

  switch(message)
  {
  case WM_CREATE:
      static int cxchar;
      hdc = GetDC(hwnd);
      GetTextMetrics(hdc,&tm);
      cxchar = tm.tmAveCharWidth;
      ReleaseDC(hwnd,hdc);

  case WM_SIZE:
       cxClient = LOWORD(lparam);
      cyClient = HIWORD(lparam);
      return 0;
  case WM_PAINT:
       hdc = GetDC(hwnd);
       srand(time(0));

       Rectangle(hdc,0,0,cxClient,cyClient);
      for(i=0; i<500; i++)
          {
            SelectObject(hdc,GetStockObject(WHITE_PEN));
            PolyBezier(hdc,pt,NUM);
            for(j=0; j<NUM; j++)
            {
                pt[j].x = rand()%cxClient;
                pt[j].y = rand()%cyClient;
            }
            hpen = CreatePen(PS_INSIDEFRAME,3,RGB(rand()%256,rand()%256,rand()%256));
             DeleteObject(SelectObject(hdc,hpen));
            PolyBezier(hdc,pt,NUM);
            for(k=0; k<50000000;k++);
          }
      for(i=0; i<100;i++)
      {
        Ellipse(hdc,rand()%cxClient,rand()%cyClient,rand()%cxClient,rand()%cyClient);

        Pie(hdc,j=rand()%cxClient,k=rand()%cyClient,n=rand()%cxClient,t=rand()%cyClient,rand()%cxClient,rand()%cyClient,rand()%cxClient,rand()%cyClient) ; 

      }
       if((n=(n+j)/2)>cxchar*20) n=cxchar*20;  
        SetTextColor(hdc,RGB(rand()%256,rand()%256,rand()%256));
        TextOut(hdc,n/2,(t+k)/2,TEXT("瑾以此向Pierm Bezier致敬!"),lstrlen(TEXT("瑾以此向Pierm Bezier致敬!")));
        ReleaseDC(hwnd,hdc);
          DeleteObject(hpen);
          ValidateRect(hwnd,NULL);
   return 0;

  case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hwnd,message,wparam,lparam);
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭