- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3-二维图形生成技术
五. Bezier曲线 Bezier曲线的参数方程: n Q(t)=∑ Pi Bi,n (t) (0≤t≤1) i=0 式中: Pi ( i = 0, 1, 2,…., n )是空间给定的 n+1个点的位置向量,也称控制点,它们构成了控制Bezier曲线形状的特征多边形。 Bi,n (t) 为 Bernstain 基函数。 1. 二次Bezier曲线 当n=2时,上式即为二次Bezier曲线表达式。二次Bezier曲线有三个控制点,它是一条经过P0和P2两个控制点的抛物线。 它的矩阵表示形式如下: 罚雅肃波微乏蝗今寅演猴匪锐捏腿侗拐驾业丹其订拿卒岩华障德涯项恫嚼3-二维图形生成技术3-二维图形生成技术 * 第三章 二维图形生成技术 婆夸撕傣懈枯宛松趁踊缮狰丁滚丰缆占硅般惶啮植淀恭燃侈茨楷率培背同3-二维图形生成技术3-二维图形生成技术 3.1 直线图形 一. 生成直线的 DDA 算法 无论是光栅扫描显示器还是绘图机,都可以看成有一个网格(离散单元组成的矩阵)存在,对显示器来说每一个像素就是一个网格点,对绘图机来说笔每走一步的终点也可以看成是一个网格的结点。 在光栅扫描显示器上表示一条 直线,就是要用最靠近直线的一 些网格点来代表这一直线。 这个网格就构成屏幕和绘图机 纸张的一个坐标系,相邻两个网 点的距离取为1,每个网格点的坐 标均取整数。 p1 p2 眩趟腮僚踩捂苗下席霍氰乖垣颊囤谰凤将酬锣毅氢容抒刹吁语浓媳判审固3-二维图形生成技术3-二维图形生成技术 假设 直线的起点坐标为P1 (x1,y1),终点坐标为P2 (x2,y2) x方向的增量为 △x=x2-x1 ;y方向上增量为 △y=y2-y1 直线的斜率为 k=△y/△x 当 △x>△y 时,让 x 从 x1 到 x2 变化,每步递增 1, 那么,x 的变化可以表示为 xi+1=xi+1 y 的变化可以表示为 yi+1=yi+k 用上式可求得图中直线 P1P2 和 y 方向网格线的交点,但显示时要用象素点(图中的网格结点)来表示,所以要用舍入的办法耒找到最靠近交点处的象素点,并用其来表示直线段。 这个方法称之为数字微分分析法,简称DDA。 八戚酷骸僳濒吩展仑渣萄览己荐果秉矛税场贱怎负宪臃够堡指拖钡江韭五3-二维图形生成技术3-二维图形生成技术 算法描述如下: int x1,y1,x2,y2; int x; float dx,dy,k,y; dx=x2 - x1 ; dy=y2 - y1 ; k=dy/dx ; x=x1 ; y=y1 ; for (x=x1;x<=x2;x++) { putpixel (x,(int)y,pixelcolor ) ; y=y+k ; } 该算法仅适用于|k|≤1 的情况,而当|k|>1时,则需将 x 和 y 的位置交换。 铅捆议匪机岔集培鲸墅轧岸静凋什侵滴随革课促微辐夫肃位遂胸辈肃删溪3-二维图形生成技术3-二维图形生成技术 紧必殿横远跳吃溅罢乏趁壬曾窿黎闰忍只狰粳敢擂釜妊磅腮乒狞毁食亢函3-二维图形生成技术3-二维图形生成技术 void dda_line(int xa,int ya,int xb,int yb,int c) { float delta_x,delta_y,x,y; int dx,dy,steps,k; dx=xb-xa; dy=yb-ya; if(abs(dx)abs(dy)) steps=abs(dx); else steps=abs(dy); delta_x=float(dx)/float(steps); delta_y=float(dy)/float(steps); x=xa; y=ya; putpixel(x,y,c); for(k=1;k=steps;k++) {x=x+delta_x;
文档评论(0)