Cohen-Sutherland直线剪裁算法
1. 模块设计
main主函数功能:
a) 提供原始数据:起点坐标、终点坐标,颜色值。
b) 初始化图形环境。
c) 调用用户函数draw_win()
d) 调用用户函数clipline()。
e) 等待图形显示。
f) 恢复屏幕显示状态。
draw_win()用户函数:
功能:绘出窗口。
clipline()用户函数:
功能:用Cohen-Sutherland直线剪裁算法完成直线剪裁。
a) 调用encode()用户函数,完成直线端点的编码。
b) 调用accept()用户函数,确定两个端点是否均在窗口内。
c) 调用reject()用户函数,确定两个端点是否均在窗口外。
d) 调用swapyn()用户函数,判断是否进行交换处理。若起点在窗口内,终点在窗口外,则将起点和终点的坐标值及其编码进行交换。
e) 剪裁并确定交点坐标。
f) 画出窗口内的直线。
encode()用户函数:
功能:完成直线端点的编码。
accept()用户函数:
功能:确定两个端点是否均在窗口内,决定是否接受显示。
reject()用户函数:
功能:确定两个端点是否均在窗口外,决定是否拒绝显示。
swapyn()用户函数:
功能:判断是否进行交换处理。若起点在窗口内,终点在窗口外,则将起点和终点的坐标值及其编码进行交换。
2. 模块结构图
main
draw_win
clipline encode accept reject
swapyn
3. 数据设计
起点坐标:x1,
y1
终点坐标:x2,
y2
直线端点编码数组:code1[4],code2[4]
剪裁完毕标志:done
显示标志:display
4.
程序代码设计《在TC中运行!》
#include
#include
int xw_min,xw_max,yw_min, yw_max;
main()
{
int driver,mode;
int x1,y1,x2,y2;
xw_min=150; yw_min=100;
xw_max=500; yw_max=300;
driver=DETECT;
initgraph(&driver,&mode,"");
draw_win(3);
x1=60;y1=120;x2=580;y2=270;
clipline(x1,y1,x2,y2);
/*x1=30;y1=480;x2=200;y2=300;
clipline(x1,y1,x2,y2);
x1=200;y1=360;x2=280;y2=250;
clipline(x1,y1,x2,y2);
x1=350;y1=170;x2=550;y2=200;
clipline(x1,y1,x2,y2);
x1=260;y1=150;x2=220;y2=60;
clipline(x1,y1,x2,y2);*/
getch();
closegraph();
}