计算机图形学.3培训资料.ppt

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机图形学.3培训资料.ppt

计算机图形学;曲线和曲面; 曲线分规则曲线和非规则曲线。规则曲线指有确定描述函 数的曲线,如直线、圆锥曲线等。由离散点构造的函数所描述 的曲线称为非规则曲线。非规则曲线又分插值曲线和逼近曲线 (统称拟合曲线)。插值曲线通过定义曲线的离散点,逼近曲线 则不通过。非规则曲线也称作自由曲线。;t=0;与非参数方法相比,参数方法有如下优点: 1. 曲线、曲面方程与坐标系无关,方程形式不因坐标系的改 变而改变(称为几何不变性),易于进行几何变换; 2. 提供更多自由度控制曲线、曲面的形状; 3. 方程中的代数量和几何量分离,便于把低维空间的曲线、 曲面推广到高维空间; 4. 容易处理无穷大斜率,计算不会因其无穷大而中断; 5. 易于处理多值问题; 6. 规格化的参变量(如 t∈[0,1]),使相应几何分量有界, 易于规定曲线、曲面的边界; 7. 便于曲线、曲面的分段、分片描述; 8. 易于用矢量和矩阵形式表示几何分量,既简化计算又易于 编程。;Ferguson曲线;写成矩阵形式为;三次Hermite插值基函数;1. 位置矢量 对于三维参数曲线,曲线上任一点的位置矢量为 P(t) = [x(t) y(t) z(t)] 位置矢量常常是构造曲线的型值点。 2. 切矢量 对于三维参数曲线,曲线上任一点处的切矢量为 P’(t) = [x’(t) y’(t) z’(t)] 切矢量反映了曲线在该点处的变化速度和变化方向。 对于一般参数t,若|dP/dt|≠0,称T T = dP/dt / |dP/dt| 为单位切矢量。对于弧长参数s,切矢量T为 T = dP/ds = dP/dt / ds/dt 其中,ds2=dx2+dy2+dz2 。 ;3. 曲率 设曲线以弧长s为参数,则参数曲线上任一点处的曲率为 k = |dT/ds| ∵ T = dP/ds = P’(s),∴ k= |d2P/ds2| = |P”(s)|,即 k = [(d2x/ds2)2 + (d2y/ds2)2 + (d2z/ds2)2]1/2 称ρ=1/k为曲率半径。曲率反映了曲线在该点处的弯曲程度。 4. 法矢量 空间曲线上任一点处的所有垂直于切矢量的矢量都是法矢 量,它们位于同一平面上,该平面称为法平面。矢量dT/ds即 是一个与切矢量T垂直的法矢量,称其为主法线矢量,其单位 矢量记作N,并称为单位主法线矢量。矢量B=T·N是一个与T和N 垂直的矢??,称为单位副法线矢量。T,B,N是三个互相垂直的 单位矢,它们决定了曲线在该点处三个基本方向,构成了曲线 在该点处的一个直角坐标系,其三个面分别称为密切面(TN), 法平面(NB),化直面(BT)。;5. 挠率 以弧长为参数的参数曲线上的任一点处的挠率为 τ=|dB/ds| 挠率反映了曲线在该点处扭出密切面的速度。 对于平面曲线,密切面就是曲线所在平面,其副法线矢量 是固定不变的,故dB/ds=0。因此,曲线是平面曲线的充要条件 是,曲线上任意点处的挠率为零。非平面曲线,τ≠0。;曲线段的连接条件;Bezier曲线;Bernstein调和函数的性质;4. 递推性;Bezier曲线的性质;;当n=1时,;二次Bezier曲线;三次Bezier曲线;/* 画三次 Bezier 曲线 */ #include graphics.h #include stdio.h“ typedef struct tagPOINT { int x; int y; } POINT; POINT CoordCalc (float u, POINT *P) /* 计算曲线上的点坐标 */ { POINT result; float u2=u*u; float u3=u2*u; float a=-u3+3*u2-3*u+1; float b=3*u3-6*u2+3*u; float c=-3*u3+3*u2; float d=u3; result.x=a*P[0].x + b*P[1].x + c*P[2].x + d*P[3].x; result.y=a*P[0].y + b*P[1].y + c*P[2].y + d*P[3].y; return result; };void DrawBezierCurve(POINT *P) /* 画 Bezier曲线 */ { float u; PO

文档评论(0)

yuzongxu123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档