计算机图形学_扫描线填色程序

上传人:第*** 文档编号:38796998 上传时间:2018-05-08 格式:DOC 页数:5 大小:54KB
返回 下载 相关 举报
计算机图形学_扫描线填色程序_第1页
第1页 / 共5页
计算机图形学_扫描线填色程序_第2页
第2页 / 共5页
计算机图形学_扫描线填色程序_第3页
第3页 / 共5页
计算机图形学_扫描线填色程序_第4页
第4页 / 共5页
计算机图形学_扫描线填色程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《计算机图形学_扫描线填色程序》由会员分享,可在线阅读,更多相关《计算机图形学_扫描线填色程序(5页珍藏版)》请在金锄头文库上搜索。

1、扫描线填色程序主程序名为 fill_area(count, x, y),其中参数 x, y 是两个一维数组,存放多边 形顶点(共 count 个)的 x 和 y 坐标。它调用 8 个子程序,彼此的调用关系如 图所示。各子程序的功能为:图 2.3.5 fill_area 的程序结构typedef struct int y_top; float x_int; int delta_y; floaat x_change_per_scan; EACH_ENTRY;EACH_ENTRY SIDESMAX_POINT; int xMAX_POINT, yMAX_POINT; int side_count,

2、first_s, last_s, scan, bottomscan, x_int_count, r; fill_area(count, x, y) int count, x , y ; sort_on_bigger_y(count); first_s=1; last_s=1; for (scan=sides1.y_top; scanbottomscan ?; scan - -)up date_first_and_last(count, scan);process_x_intersections(scan, first_s, last_s);draw_lines (scan, x_int_cou

3、nt, first_s);update-_sides_list ( ); void put_in_sides_list(entry, x1, y1, x2, y2, next_y); int entry, x1, y1, x2, y2, next_y; int maxy; float x2_temp, x_change_temp; x_change_temp = (float) (x2-x1) / (float) (y2-y1); x2_temp =x2; /*以下为退缩一点操作. */ if (y2y1) x2_temp+=x_change_temp; /* 以下为插入活性表操作. */ m

4、axy = (y1 y2)? y1: y2; while ( entry 1) entry - -; sidesentry. y_top=maxy; sidesentry. delta_y =abs(y2-y1)+1; if (y1y2)sidesentry. x_int =x1; elsesidesentry.x_int=x2_temp;sidesentry. x_change_per_scan=x_change_temp; void sort_on_bigger_y(n) int n; int k, x1, y1; side_count=0; y1=yn; x1=xn; bottomsca

5、n=yn;for (k=1; k=scan) sort_on_x(k, first_s); void draw_lines(scan, x_int_count, index) int scan, x_int_count, index; int k, x, x1, x2; for (k=1; k0)sidesk.delta_y - -;sidesk. x_int - = sidesk. x_change_per_scan; 1、sort_on_bigger_y 子程序的主要功能是按照输入的多边形,建立起活性边表。 操作步骤是:对每条边加以判断:如非水平边则调用 put_in_side_list

6、子程序放 入活性边来;如是水平边则直接画出。 2、put_in_sides_list 子程序的主要功能是将一条边存入活性边表之内。操作步骤 是:对该边判别是否左顶点或右顶点,如果将入边之终点删去,按照 y_top 的 大小在活性边表中找到该点的合适位置,在该边的位置中填入数据。 3、update_first_and_last 子程序的主要功能是刷新活性边表的 first 和 last 两根指 针的所指位置,以保证指针指出激活边的范围。 4、process_x_intersections 子程序的主要功能是对活性边表中的激活边(即位于 first 和 last 之间的,并且? y? 0 的边)按

7、照 x_int 的大小排序。操作步骤是:从 first 到 last,对每一根? y? 0 的边,调用 sort_on_x 子程序排入活性边表中合适 位置。 5、sort_on_x 子程序主要功能是将一条边 sideentry,在活性边表的 first 到 entry 之间按 x_int 的大小插入合适位置。操作步骤是:检查位于 entry 的边的 x_int 是否小于位置 entry-1 的边的 x_int,如是,调用 swap 子程序交换两条边的 彼此位置。 6、swap 子程序的主要功能是交换活性边表中两条相邻位置边的彼此位置。 7、draw_lines 子程序的主要功能是在一条扫描线位于多边形内的部分,填上指 定的色彩。操作步骤是:在活性边表的激活边范围内,依次取出 y 0 两边的 x_int,作为两个端点(x1, scan) ,(x2, scan),画一条水平线。 8、update_sides_list 子程序的主要功能是刷新活性边表内激活边的值:y=Dy-1x_int=x_int_x_chang_per_scan;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 初中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号