三次Bezier曲线的实现方法

上传人:lis****210 文档编号:124415789 上传时间:2022-07-24 格式:DOCX 页数:9 大小:54.77KB
返回 下载 相关 举报
三次Bezier曲线的实现方法_第1页
第1页 / 共9页
三次Bezier曲线的实现方法_第2页
第2页 / 共9页
三次Bezier曲线的实现方法_第3页
第3页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Bezier曲线原理及实现代码(。+)一、原理:贝塞尔曲线于1962年.由法国工程师皮埃尔贝塞尔(Pierre Bezier )所广泛发表.他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul de Casteljau于1959年运用de Casteljau算法开发.以稳定数值的方法求出贝塞尔曲线。线性贝塞尔曲线给定点P。、P线性贝塞尔曲线只是一条两点之间的直线。这条线由下式给出:B = Po + (Pi - PM = (l-t)Po +tPi ,iG 0,1且其等同于线性插值二次方贝塞尔曲线的路径由给定点P。、P1、P2的函数B(t)追踪: B(/)=(i-i)2p0+2t(i-z)p1,顷虹。TrueType字型就运用了以贝塞尔样条组成的二次贝塞尔曲线。P。、P1、P2、P3四个点在平面或在三维空间中定义了三次方贝塞尔曲线。曲线起始于Po走 向P1.并从P2的方向来到?3。一般不会经过P1或P2;这两个点只是在那里提供方向资讯。 Po和P1之间的间距.决定了曲线在转而趋进P3之前.走向P2方向的“长度有多长”。曲线的参数形式为:B=Pq(1 I),+ 3P】f(l f) + 3P2t2(1 -f) + P3/3 , tG0,l。现代的成象系统.如PostScript、Asymptote和Metafont.运用了以贝塞尔样条组成的三次贝塞尔曲线.用来描绘曲线轮廓。一般化P0、P1、Pn.其贝塞尔曲线即BW = E1=Q凯(1一” = Po(l_f 尸+)例如:B(f) = Pg(1f 尸+5Pd(lf)J10P4(l一甲+10PbF(1f)+5P 我 4(1f)-如上公式可如下递归表达:用BpFiPn表示由点P0、P1、.、Pn所决定的贝塞尔曲 线。则B(t)= Bpqpip” (0=(1- OPoPl-Pii-ltO + fBpiPzFn (f)用平常话来说.阶贝塞尔曲线之间的插值。一些关于参数曲线的术语.有ni=Q即多项式又称作n阶的伯恩斯坦基底多项式.定义00 = 1。点Pj称作贝塞尔曲线的控制点。多边形以带有线的贝塞尔点连接而成.起始于P0并以Pn 终止.称作贝塞尔多边形(或控制多边形)。贝塞尔多边形的凸包(convex hull)包含有 贝塞尔曲线。线性贝塞尔曲线函数中的t会经过由P0至九 的B(t)所描述的曲线。例如当t=0.25 时.B(t)即一条由点P0至P路径的四分之一处。就像由0至1的连续t.B(t)描述一 条由P0至P1的直线。口 op,为建构二次贝塞尔曲线.可以中介点Q0和Q1作为由0至1的t: 由P。至P1的连续点Q。.描述一条线性贝塞尔曲线。 由P1至P2的连续点Q1.描述一条线性贝塞尔曲线。 由Q0至Q1的连续点B(t).描述一条二次贝塞尔曲线。为建构高阶曲线.便需要相应更多的中介点。对于三次曲线.可由线性贝塞尔曲线描述的中 介点Q0、Q1、和由二次曲线描述的点R。、Ri所建构:对于四次曲线.可由线性贝塞尔曲线描述的中介点Q0、Q1、Q2、Q3.由二次贝塞尔曲线描述的 点R0、R1、R2.和由三次贝塞尔曲线描述的点S0、S1所建构:P(t)=(1-t)P+tP , 01矩阵表示为:P(t) = (1-t) 2P0+2t(1-t)P1+t2P2, 矩阵表示为:P(t) = (1-t) 3P0+3t(1-t) 2P1+3t2 (1-t)P2+t3P3矩阵表示为:(632)在(632)式中.Mn+1是一个n + 1阶矩阵.称为n次Bezier矩阵。(633)其中.利用(633)式.我们可以得到任意次Bezier矩阵的显式表示.例如4次和5次Bezier矩阵为:可以证明.n次Bezier矩阵还可以表示为递推的形式:(634)二、算法(c+)工程目录是:Win32Appvc6.0#include#include#include#define NUM 10LRESULT CALLBACK Winproc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstanc,LPSTR lpCmdLine,int nShowCmd)MSG msg;static TCHAR szClassName = TEXT(:Bezier 样条计算公式由法国 雷诺汽车公司的工程师Pierm Bezier于六十年代提出);HWND hwnd;WNDCLASS wc;wc.cbClsExtra =0;wc.cbWndExtra =0;wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wc.hCursor = LoadCursor(NULL,IDC_ARROW);wc.hIcon = LoadIcon(NULL,IDI_APPLICATION);wc.hInstance = hInstance;wc.lpfnWndProc = Winproc;wc.lpszClassName = szClassName;wc.lpszMenuName = NULL;wc.style = CS_HREDRAW|CS_VREDRAW;if(!RegisterClass(&wc)MessageBox(NULL,TEXT(注册失败),TEXT(警告框),MB_ICONERROR);return 0;hwnd = CreateWindow(szClassName,szClassName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance, NULL);ShowWindow(hwnd,SW_SHOWMAXIMIZED);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0) TranslateMessage(&msg);DispatchMessage(&msg); return msg.wParam;LRESULT CALLBACK Winproc(HWND hwnd,UINT message, WPARAM wparam,LPARAM lparam) HDC hdc;static POINT ptNUM;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; i500; i+)SelectObject(hdc,GetStockObject(WHITE_PEN);PolyBezier(hdc,pt,NUM);for(j=0; jNUM; j+) ptj.x = rand()%cxClient;ptj.y = rand()%cyClient;hpen =CreatePen(PS_INSIDEFRAME,3,RGB(randO%256,rand()%256,rand()%256);DeleteObject(SelectObject(hdc,hpen);PolyBezier(hdc,pt,NUM);for(k=0; k50000000;k+);for(i=0; icxchar*20) n=cxchar*20;SetTextColor(hdc,RGB(rand0%256,rand()%256,rand0%25 6);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);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!