第五章 二维变换与裁剪
- 格式:ppt
- 大小:3.01 MB
- 文档页数:86


实验五二维图形的裁剪和变换一.实验目的:1.理解二维图形变换的含义。
2.掌握二维平移变换的实现。
3.掌握二维旋转变换的实现。
4.掌握二维比例变换的实现。
5.掌握二维平移变换的实现。
二.实验内容:1.分别实现二维图形变换,并测试你的算法。
三.实验过程#include <graphics.h>#include <stdio.h>#define LEFT 1#define RIGHT 2#define BOTTOM 4#define TOP 8int encode(float x,float y,float XL,float XR,float YB,float YT){int c=0;if(x<XL)c|=LEFT;if(x>XR)c|=RIGHT;if(y<YB)c|=BOTTOM;if(y>YT)c|=TOP;return c;}void CS_LineClip(x1,y1,x2,y2,XL,XR,YB,YT)float x1,y1,x2,y2,XL,XR,YB,YT;{int code1,code2,code;float x,y;code1=encode(x1,y1,XL,XR,YB,YT); code2=encode(x2,y2,XL,XR,YB,YT); while((code1!=0 )||(code2!=0)){if((code1&code2)!=0)return;if(code1!=0)code=code1;elsecode=code2;if((LEFT&code)!=0){x=XL;y=y1+(y2-y1)*(XL-x1)/(x2-x1);}else if((RIGHT&code)!=0){x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);}else if((BOTTOM & code )!=0){y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);}else if((TOP & code) !=0){y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);}if(code==code1){x1=x;y1=y;code1=encode(x1,y1,XL,XR,YB,YT);}else{x2=x;y2=y;code2=encode(x2,y2,XL,XR,YB,YT);}}setcolor(255);line(x1,y1,x2,y2);}main(){int graphdriver=DETECT,graphmode;int x1,y1,x2,y2;initgraph( &graphdriver, &graphmode,"\TC\Turboc 2");line(45,15,45,200);line(45,15,400,15);line(45,200,400,200);line(400,15,400,200);CS_LineClip(20.0,30.0,200.0,400.0,45.0,400.0,15.0,200.0); outtextxy(x1,y1,"start point");outtextxy(x2,y2,"end point");getch();closegraph();}。
二维线裁剪主要方法在计算机图形学领域,二维线裁剪是一项重要的技术,它被广泛应用于计算机图形学、计算机辅助设计和游戏开发等方面。
二维线裁剪的主要任务是通过对线段进行裁剪,将不在指定区域内的线段部分删除,从而实现对图形的简化和优化。
在本文中,将介绍二维线裁剪的主要方法,包括Cohen-Sutherland算法、Liang-Barsky算法和梁友栋-差值判断算法,通过对这些方法的介绍,读者可以更加全面地了解二维线裁剪的原理和实现。
Cohen-Sutherland算法Cohen-Sutherland算法是一种用于二维线裁剪的经典算法,它将裁剪区域划分为九个部分,分别对应于裁剪区域的内部、上下左右和四个角落。
在进行裁剪时,首先对线段进行编码,然后根据编码结果和裁剪区域的编码进行比较,通过判断编码结果的变化来确定线段是否在裁剪区域内,如果线段完全在裁剪区域内,则保留整条线段;如果线段完全在裁剪区域外,则删除整条线段;如果线段跨越裁剪区域边界,则对线段进行裁剪,得到部分在裁剪区域内的线段。
Liang-Barsky算法Liang-Barsky算法是另一种常用的二维线裁剪算法,它通过参数化的方式对线段进行裁剪。
算法首先计算线段与裁剪区域边界的交点,并根据线段在裁剪区域内的参数化表示来确定线段的裁剪结果。
通过参数化的方式,Liang-Barsky算法能够高效地计算出线段与裁剪区域的交点,并对线段进行裁剪,从而实现对线段的快速剪裁。
梁友栋-差值判断算法梁友栋-差值判断算法是一种基于差值判断的二维线裁剪算法,它通过计算线段与裁剪区域边界的差值来判断线段的裁剪结果。
算法首先计算线段与裁剪区域的交点,并根据线段在裁剪区域内的差值来确定线段的裁剪结果。
通过差值判断的方式,梁友栋-差值判断算法能够高效地计算出线段与裁剪区域的交点,并对线段进行裁剪,从而实现对线段的快速剪裁。
总结以上介绍了三种常用的二维线裁剪算法,它们分别是Cohen-Sutherland算法、Liang-Barsky算法和梁友栋-差值判断算法。