直线段剪裁实验报告

直线段剪裁实验报告
直线段剪裁实验报告

《计算机图形学》实验报告

《实验名称》

直线段裁剪

学号

专业

班级

天津大学计算机科学与技术学院

一、实验目的

熟练掌握Cohen-Sutherland直线裁剪算法,并编程实现

二、实验内容

(1) 裁剪窗口为矩形窗口,且矩形边和坐标轴平行,长宽自己定。

(2) 待裁剪线段端点坐标自己定;裁剪线段涵盖完全可见、不完全可见、

完全不可见类型。

(3) 要求显示待裁剪线段并用不同颜色标示出裁剪结果。

实现方法:一般情况下,需要判断一条直线是全部可见,全部不可见,部分裁剪(一段裁剪),全部裁剪(两端裁剪)。通过把裁剪区域分成许多部分,然后给每一段被裁剪的线段的两端分配一位代码,通过少量if语句和一个case语句就可以判断出具体情况。

伪代码如下:

#define CLIP_CODE_C 0x0000

#define CLIP_CODE_N 0x0008

#define CLIP_CODE_S 0x0004

#define CLIP_CODE_E 0x0002

#define CLIP_CODE_W 0x0001

#define CLIP_CODE_NE 0x000a

#define CLIP_CODE_SE 0x0006

#define CLIP_CODE_NW 0x0009

#define CLIP_CODE_SW 0x0005

实验步骤:

1)生成裁剪窗口,窗口由直线xl=250,xr=850,yb=250,yt=450

2)绘制直线段

3)编写Cohen-Sutherland直线裁剪算法,对直线段进行裁剪

编码定义规则:

第一位C1:若端点位于窗口之左侧,即X

第二位C2:若端点位于窗口之右侧,即X>xr,则C2=1,否则C2=0。

第三位C3:若端点位于窗口之下侧,即Yyt,则C4=1,否则C4=0。

裁剪步骤:

对所有直线的端点都建立了区域码之后,就可按区域码判断直线在窗口

之内或窗口之外。这可分为如下几种情况:

①若一直线的两个端点的区域码均为0000则此直线在窗口边界之内,应

子保留。

②若一直线的两个端点的区域码的同一位同时为1,则此直线全部在窗

口边界之外,应子裁剪。例如,若一直线的一个端点的区域码为1001,另一个端点的区域码为0101,则此两端点的区域码的第一位均为1,说明此两端点均在窗口边界之左,因此,直线在窗口边界之外,应予裁剪。可用将直线两个端点的区域码进行与操作的方法,判断直线是否在窗口之外,若与操作的结果为0000则两端点的区域码任何位均不同时为1此直线不一定被裁剪。

③以上两种情况之外的直线,有可能穿过窗口,也有可能不穿过窗口,

下图中所示的两条直线都不符合情况②的要求,但一条直线(P1P2)穿过窗口,另一直线(P3P4)不穿过窗口。对这类直线可以进行如下处理:取窗口外的一个端点与窗口边界比较以确定可排除直线的哪一部分,然后,把直线剩下的部分与其他边界比较,这样一直到直线全部被排除或确定直线的哪一部分在窗口之内为止。可按“左、右、下、上”的次序建立检查直线端点与窗口边界关系的算法。

图③

三、实验结果

画线效果一:

画线效果二:

其他效果用户可自行绘制

四、实验分析和总结

掌握了openGL的基本用法,掌握了Cohen-Sutherland直线裁剪算法,并编程实现出来.

五、源代码

void CCsLineView::Cohen()//Cohen-Sutherland算法

{

BOOL Change;

double x,y;

RC0=EnCode(Pointx[0],Pointy[0]);

RC1=EnCode(Pointx[1],Pointy[1]);

while(TRUE)

{

Change=FALSE;

if(0 == (RC0|RC1))

{//简取之

return;

}

else if(0!=(RC0 & RC1))

{//简弃之

return;

}

else

{

if(0==RC0)//如果P0点在窗口内,交换P0和P1,保证p0点在窗口外

//交换点的坐标值

double TPointx,TPointy;

TPointx=Pointx[0];TPointy=Pointy[0];

Pointx[0]=Pointx[1];Pointy[0]=Pointy[1];

Pointx[1]=TPointx;Pointy[1]=TPointy;

//交换点的编码值

unsigned int TRC;

TRC=RC0;RC0=RC1;RC1=TRC;

}

//按左、右、下、上的顺序裁剪

if(RC0 & LEFT )//P0点位于窗口的左侧

{

x=wxl;//求交点y

y=Pointy[0]+(Pointy[1]-Pointy[0])*(x-Pointx[0])/(Pointx[1]-Pointx[0]);

Pointx[0]=x;Pointy[0]=y;

Change=TRUE;

RC0=EnCode(Pointx[0],Pointy[0]);RC1=EnCode(Pointx[1],Pointy[1]); }

if(RC0 & RIGHT )//P0点位于窗口的右侧

{

x=wxr;//求交点y

y=Pointy[0]+(Pointy[1]-Pointy[0])*(x-Pointx[0])/(Pointx[1]-Pointx[0]);

Pointx[0]=x;Pointy[0]=y;

Change=TRUE;

RC0=EnCode(Pointx[0],Pointy[0]);RC1=EnCode(Pointx[1],Pointy[1]); }

if(RC0 & BOTTOM )//P0点位于窗口的下侧

{

y=wyb;//求交点x

x=Pointx[0]+(Pointx[1]-Pointx[0])*(y-Pointy[0])/(Pointy[1]-Pointy[0]);

Pointx[0]=x;Pointy[0]=y;

Change=TRUE;

RC0=EnCode(Pointx[0],Pointy[0]);RC1=EnCode(Pointx[1],Pointy[1]); }

if(RC0 & TOP )//P0点位于窗口的上侧

{

y=wyt;//求交点x

x=Pointx[0]+(Pointx[1]-Pointx[0])*(y-Pointy[0])/(Pointy[1]-Pointy[0]);

Pointx[0]=x;Pointy[0]=y;

Change=TRUE;

RC0=EnCode(Pointx[0],Pointy[0]);RC1=EnCode(Pointx[1],Pointy[1]); }

if(FALSE==Change)

return;

}

}

}

}

void CCsLineView::OnDraw(CDC* pDC)

{

CRect Rect;

GetClientRect(&Rect);//获得客户区的大小

CBitmap Bitmap,*pBitmap;

Bitmap.LoadBitmap(IDB_BITMAP1);

CDC M emDC;

MemDC.CreateCompatibleDC(GetDC());

pBitmap=MemDC.SelectObject(&Bitmap);

MemDC.BitBlt(0,0,Rect.Width(),Rect.Height(),&Picture,0,0,SRCCOPY);

MemDC.TextOut((wxl+wxr)/2,wyb-20,"窗口");//窗口标题

//绘制窗口和直线

CPen Pen3,*pOldPen3;//定义3个像素宽度的画笔

Pen3.CreatePen(PS_SOLID,2,RGB(0,0,0));

pOldPen3=MemDC.SelectObject(&Pen3);

MemDC.MoveTo(wxl,wyt);MemDC.LineTo(wxr,wyt);

MemDC.LineTo(wxr,wyb);MemDC.LineTo(wxl,wyb);

MemDC.LineTo(wxl,wyt);MemDC.SelectObject(pOldPen3);

Pen3.DeleteObject();

CPen Pen1,*pOldPen1;//定义1个像素宽度的画笔

Pen1.CreatePen(PS_SOLID,2,RGB(255,0,0));

pOldPen1=MemDC.SelectObject(&Pen1);

if(m_i>=1)

{

MemDC.MoveTo(ROUND(Pointx[0]),ROUND(Pointy[0]));

MemDC.LineTo(ROUND(Pointx[1]),ROUND(Pointy[1]));

}

MemDC.SelectObject(pOldPen1);

Pen1.DeleteObject();

CDC *dc=GetDC();

dc->BitBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,SRCCOPY);

MemDC.SelectObject(pBitmap);

}

void CCsLineView::Ondrawline() //屏幕画线函数

{

if(FALSE==m_Attatch)

{

Picture.CreateCompatibleDC(GetDC());

直接剪切试验报告

实验五 直接剪切试验 实验人: 学号: 一、概述 直接剪切试验就是直接对试样进行剪切的试验,简称直剪试验,是测定土的抗剪强度的一种常用方法,通常采用4个试样,分别在不同的垂直压力p 下,施加水平剪切力,测得试样破坏时的剪应力τ,然后根据库仑定律确定土的抗剪强度参数内摩擦角?和粘聚力c 。 二、仪器设备 1、直剪仪。采用应变控制式直接剪切仪,如图所示,由剪切盒、垂直加压设备、剪切传动装置、测力计以及位移量测系统等组成。加压设备采用杠杆传动。 2、测力计。采用应变圈,量表为百分表。 3、环刀。内径6.18cm ,高2.0cm 。 4、其他。切土刀、钢丝锯、滤纸、毛玻璃板、凡士林等。 三、操作步骤 1、将试样表面削平,用环刀切取试件,测密度,每组试验至少取四个试样,各级垂直荷载的大小根据工程实际和土的软硬程度而定,一般可按100kPa ,200kPa ,300kPa ,400kPa (即1.0 kg/cm 2,2.0 kg/cm 2,3.0 kg/cm 2,4.0 kg/cm 2)施加。 2、检查下盒底下两滑槽内钢珠是否分布均匀,在上下盒接触面上涂抹少许润滑油,对准剪切盒的上下盒,插入固定销钉,在下盒内顺次放洁净透水石一块及湿润滤纸一张。 图7-1 应变控制式直剪仪 1—轮轴;2—底座;3—透水石;4—测微表;5—活塞; 6—上盒;7—土样;8—测微表;9—量力环;10—下盒

3、将盛有试样的环刀平口朝下,刀口朝上,在试样面放湿润滤纸一张及透水石一块,对准剪切盒的上盒,然后将试样通过透水石徐徐压入剪切盒底,移去环刀,并顺次加上传压板及加压框架。 4、在量力环的安装水平测微表,装好后应检查测微表是否装反,表脚是否灵活和水平,然后按顺时针方向徐徐转动手轮,使上盒两端的钢珠恰好与量力环按触(即量力环中测微表指针被触动)。 5、顺次小心地加上传压板、钢珠,加压框架和相应质量的砝码(避免撞击和摇动)。 6、施加垂直压力后应立即拔去固定销(此项工作切勿忘记)。开动秒表,同时以每分钟4~12转的均匀速度转动手轮(学生可用6转/分),转动过程不应中途停顿或时快时慢,使试样在3~5分钟内剪破,手轮每转一圈应测记测微表读数一次,直至量力环中的测微表指针不再前进或有后退,即说明试样已经剪破,如测微表指针一直缓慢前进,说明不出现峰值和终值,则试验应进行至剪切变形达到4mm(手轮转20转)为止。 7、剪切结束后,吸去剪切盒中积水,倒转手轮,尽快移去砝码,加压框架,传压板等,取出试样,测定剪切面附近土的剪后含水率。 8、另装试样,重复以上步骤,测定其它三种垂直荷载(200kPa,300kPa,400kPa)下的抗剪强度。 四、成果整理 1、按式(7-1)计算抗剪强度: τ(7-1) = CR 式中R—量力环中测微表最大读数,或位移4mm时的读数。精确至0.01mm。 C—量力环校正系数,(N/mm2/0.01mm)。 2、按式(7-2)计算剪切位移: L- ?2.0(7-2) = R n 式中0.2 —手轮每转一周,剪切盒位移0.2mm; n—手轮转数。 3、制图 ?(1)以剪应力为纵坐标,剪切位移为横坐标,绘制剪应力τ与剪切位移L 的关系曲线,如试验图7-2所示。取曲线上剪应力的峰值为抗剪强度,无峰值时,取剪切位移4mm所对应的剪应力为抗剪强度。 (2)以抗剪强度为纵坐标,垂直压力为横坐标,绘制抗剪强度与垂直压力关系曲线(图7-3),直线的倾角为土的内摩擦角?,直线在纵坐标上的截距为土

直线段的裁剪

实验:直线段的裁剪 姓名:龙泽学号:20141090068 指导教师:吴昊 实验内容:采用Liang-Barsky算法对直线段进行裁剪。 实验设计:本次实验采用的是Liang-Barsky算法,根据这个算法需先定义直线段的起点坐标(x1,y1),终点坐标(x2,y2),以及裁剪框(矩形)的左边界(wxl),右边界(wxr),上边界(wyt),下边界(wyb),如void Line_Clipping(float x1, float y1, float x2, float y2,float Wxl,float Wxr,float Wyt,float Wyb),再结合鼠标mouse函数,实现点击鼠标左键显示矩形框和待裁剪的直线段,点击鼠标右键进行裁剪并显示裁剪过后的直线段,最终显示出来。 由于在Line_Clipping函数下用到了line函数,所以我在上面定义了个line 函数来绘制直线段(绘制直线段所采用的算法为Bresenham算法)。 程序代码: #include #include //初始化OpenGL场景 void myinit (void) { glClearColor (1, 1,1, 0); //将背景置成白色 glMatrixMode(GL_PROJECTION); gluOrtho2D(0,500,0,500); //设置投影变换,使用正交投影 } void setPixel(int x, int y)//在指定位置(x,y)绘制点图元 { glBegin (GL_POINTS);

glVertex2i(x,y);//绘制点的坐标 glEnd ( ); } // 绘制直线的方法 void line (int x1,int y1,int x2,int y2)//输入线段的两个端点坐标和画线颜色 { int x,y,dx,dy,s1,s2,p,temp,interchange,i; x=x1; y=y1;//设置象素坐标初值 dx=abs(x2-x1); dy=abs(y2-y1);//分别计算之间的差值 if(x2>x1) s1=1; else s1=-1; if(y2>y1) s2=1; else s2=-1; //判断起点和终点的位置,以确定是该加一个单位还是该减一个单位 if(dy>dx)//y方向增长快,将总步数设为y2-y1,每一步的y值为:y=y+1 { temp=dx;

直接剪切试验—慢剪实施细则

土工作业指导书 直接剪切试验—慢剪实施细则 文件编号: 版本号: 编制: 批准: 生效日期:

直接剪切试验—慢剪实施细则 1. 目的 为了规范标准固结试验中的各个环节,特制定本细则。 2. 适用范围 本试验方法适用细粒土。 3. 引用文件 GB/T50123-1999 土工试验方法标准。 4. 检测设备 本试验所用的主要仪器设备,应符合下列规定: 1、应变控制式直剪仪:由剪切盒、垂直加压设备、剪切传动装置、测力计、位移量测 系统组成。 2、环刀:内径61.8mm,高度20mm。 3、位移量测设备:量程为10mm,分度值为0.01mm的百分表;或准确度为全量程 0.2%的传感器。 5.操作步骤进行: 5.1试样的制备: 5.1.1原状土试样制备: a.将原土样筒按标明的上下方向放置,剥去蜡封和胶带,开启土样筒取出土样。检查土样结构,当确定土样已受扰动或取土质量不符合规定时,不应制备力学性质试验的试样。 b.根据试验要求用环刀切取试样时,应在环刀内壁涂一薄层凡士林,刃口向下放在土样上,将环刀垂直下压,并用切土刀沿环刀外侧切削土样,边压边削至土样高出环刀,根据试样的软硬采用钢丝锯或切土刀整平环刀两端土样,擦净环刀外壁,称环刀和土的总质量。 c.切削试样时,应对土样的层次、气味、颜色、夹杂物、裂缝和均匀性进行描述,对低塑性和高灵敏度的软土,制样时不得扰动。

d.测定试样的含水率和密度,取切下的余土测定土粒比重:对均质和含有机质的土样,宜采用天然含水率状态下代表性土样,供颗粒分析、界限含水率试验。对非均质土应根据试验项目取足够数量的土样,置于通风处凉干至可碾散为止。对砂土和进行比重试验的土样宜在105~110℃温度下烘干,对有机质含量超过5%的土、含石膏和硫酸盐的土,应在65~70℃温度下烘干。 5.1.2扰动土试样的制备和试样的制样: 试样的制备: a.将土样从土样筒或包装袋袋中取出,对土样的颜色、气味、夹杂物和土类及均匀程度进行描述,并将土样切成碎块,拌和均匀,取代表性土样测定含水率。 b、对均质和含有机质的土样,宜采用天然含水率状态下代表性土样,供颗粒分析、界限含水率试验。对非均质土应根据试验项目取足够数量的土样,置于通风处凉干至可碾散为止。对砂土和进行比重试验的土样宜在105~110℃温度下烘干,对有机质含量超过5%的土、含石膏和硫酸盐的土,应在65~70℃温度下烘干。 c.将风干或烘干的土样放在橡皮板上用木碾碾散,对不含砂和砾的土样,可用碎土器碾散(碎土器不得将土粒破碎)。 d.对分散后的粗粒土和细粒土,应按下表要求过筛。对含细粒土的砾质土,应先用水浸泡并充分搅拌,使粗细颗粒分离后按不同试验项目的要求进行过筛。

计算机图形学裁剪算法详解

裁剪算法详解 在使用计算机处理图形信息时,计算机部存储的图形往往比较大,而屏幕显示的只是图的一部分。因此需要确定图形中哪些部分落在显示区之,哪些落在显示区之外,以便只显示落在显示区的那部分图形。这个选择过程称为裁剪。最简单的裁剪方法是把各种图形扫描转换为点之后,再判断各点是否在窗。但那样太费时,一般不可取。这是因为有些图形组成部分全部在窗口外,可以完全排除,不必进行扫描转换。所以一般采用先裁剪再扫描转换的方法。 (a)裁剪前 (b) 裁剪后 图1.1 多边形裁剪 1直线段裁剪 直线段裁剪算法比较简单,但非常重要,是复杂图元裁剪的基础。因为复杂的曲线可以通过折线段来近似,从而裁剪问题也可以化为直线段的裁剪问题。常

用的线段裁剪方法有三种:Cohen-Sutherland,中点分割算法和梁友栋-barskey 算法。 1.1 Cohen-Sutherland裁剪 该算法的思想是:对于每条线段P1P2分为三种情况处理。(1)若P1P2完全在窗口,则显示该线段P1P2简称“取”之。(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 为使计算机能够快速判断一条直线段与窗口属何种关系,采用如下编码方法。延长窗口的边,将二维平面分成九个区域。每个区域赋予4位编码CtCbCrCl.其中各位编码的定义如下:

图1.2 多边形裁剪区域编码图5.3线段裁剪 裁剪一条线段时,先求出P1P2所在的区号code1,code2。若code1=0,且code2=0,则线段P1P2在窗口,应取之。若按位与运算code1&code2≠0,则说明两个端点同在窗口的上方、下方、左方或右方。可判断线段完全在窗口外,可弃之。否则,按第三种情况处理。求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段在窗口外,可弃之。在对另一段重复上述处理。在实现本算法时,不必把线段与每条窗口边界依次求交,只要按顺序检测到端点的编码不为0,才把线段与对应的窗口边界求交。 Cohen-Sutherland裁减算法 #define LEFT 1 #define RIGHT 2 #define BOTTOM 4

线段裁剪代码-MATLAB

四、线段裁剪 %Sutherland_Test.m文件,主文件函数 clear all; clc; MainMenu(); %check_callback.m文件,查看图形函数 function check_callback() %查看原始线段图形回调函数 %lines矩阵共四列,每一列的含义如下: %端点A x坐标端点A y坐标端点B x坐标端点B y坐标 % lines=getappdata(0,'lines'); if isempty(lines) errordlg('当前尚未生成线段,无法显示!'); return; end figure(); hold on; for i=1:length(lines(:,1)) plot(lines(i,[1,3]),lines(i,[2,4])); end hold off; end %Cohen_Sutherland.m文件,编码裁剪算法 function Lines=Cohen_Sutherland(line,Rectangle) %编码裁剪算法 %line为线段端点矩阵,共四列,其数据含义如下: % 端点A x坐标端点A y坐标端点B x坐标端点B y坐标 %Rectangle为窗口边界值,共四个元素,其含义分别为Xwl,Xwr,Ywb,Ywt。 % %首先检测参数是否合法 [row column]=size(line); if column<4||length(Rectangle)<4 Lines=[]; fprintf('参数不合法不合法'); return ; end % %程序中主要变量说明 %code为线段端点的编码矩阵,两行四列,第一行为点P1的编码,第二行为点P2的编码% 四列的含义为:D0,D1,D2,D3

直线电机工作原理,特点及应用(数控大作业)

《数控技术》大作业二 1.综述 直线电机的结构可以看作是将一台旋转电机沿径向剖开,并将电机的圆周展开成直线而形成的。其中定子相当于直线电机的初级,转子相当于直线电机的次级,当初级通入电流后,在初次级线圈之间的气隙中产生行波磁场,在行波磁场与次级永磁体的作用下产生驱动力,从而实现运动部件的直线运动。 直线电机的工作原理设想把一台旋转运动的感应电动机沿着半径的方向剖开,并且展平,这就成了一台直线感应图电动机。 初级做得很长,延伸到运动所需要达到的位置,也可以把次级做得很长;既可以初级固定、次级移动,也可以次级固定、初级移动.通入交流电后在定子中产生的磁通,根据楞次定律,在动体的金属板上感应出涡流。设产生涡流的感应电压为E,金属板上有电感L和电阻R,涡流电流和磁通密度将(费来明法则)产生连续的推力F。 2.工作原理 直线电动机的初级三相绕组通入三相交流电后,就会在气隙中产生一个沿直线移动的正弦波磁场,其移动方向由三相交流电的相序决定,如图所示。显然该行波磁场的移动速度与普通电机旋转磁场在定子内圆表面的线速度相等。 行波磁场切割次级上的导体后,在导体中感应出电动势和电流,该电流与气隙磁场作用,在次级中产生电磁力,驱动次级沿着行波磁场移动的方向作直线运行,或者利用反作用力驱动初级朝相反的方向运动。如果改变直线电动机初级绕组的通电相序,即可改变电动机的运行方向。因此直线电动机可实现往返直线运动。 3.直线电机的特点 直线电机是一种将电能直接转换成直线运动机械能而不需通过中问任何转换装置的新颖电机,它具有系统结构简单、磨损少、噪声低、组合性强、维护方便等优点。旋转电机所具有的品种,直线电机几乎都有相对应的品种,其应用范围正在不断扩大,并在一些它所能独特发挥作用的地方取得了令人满意的效果。 直线感应电动机的特点是:结构简单,维护方便;散热条件好,额定值高;适宜于高速运行;能承担特殊任务,如液态金属的运输、加工等。其缺点是气隙大,功率因数低,力能指标差,低速运行时需采用低频电源,使控制装置复杂。 4.直线电机的应用

改进的cohen-sutherland线段裁剪算法

改进的cohen-sutherland线段裁剪算法 王艳娟肖刚强任洪海 (大连交通大学软件学院116052) 摘要:针对目前的conhen-sutherland线段裁剪算法不能有效地判断出线段是否完全在窗口外的问题,提出了一种改进的conhen-sutherland线段裁剪算法,通过添加一个判断条件,使得所有完全位于窗口外的线段都能快速的过滤出来,从而减少了求交点的次数,提高了运算效率。 关键词:裁剪算法,cohen-sutherland线裁剪算法,求交运算0.引言 线段裁剪是复杂图元裁剪的基础,各种非线性边界都可以用直线段来近似,以减少计算量。目前广泛使用的3种经典裁剪算法分别是梁友栋-Barsky参数裁剪算法、 Cohen-sutherland编码裁剪算法和Nicholl-Lee-Nicholl多区域判别算法。这些算法各有特色,梁友栋-Barsky裁剪算法利用线段的参数表示形式,把被裁剪线段所在直线与矩形裁剪窗口边框线的交点坐标的计算,简化为对交点对应的参数值的计算,再根据交点参数与被裁剪线段的参数定义区间比较的结果,确定出有效的交点,从而得到裁剪后应保留的部分线段。Cohen-sutherland裁剪算法是一个最早开发的快速线段裁

剪算法,应用较为广泛。该算法通过初始测试来减少交点计算,从而减少线段裁剪算法所用的时间。Nicholl-Lee-Nicholl 算法通过在裁剪窗口边界创立多个区域,从而避免对一个直线段进行多次裁剪。由于Cohen-sutherland线段裁剪算法实现简单,应用广泛,本文对此算法进行了一些改进。1.Cohen-sutherland线段裁剪算法描述 Cohen-sutherland线段裁剪算法对每条线段的端点都赋予一个四位二进制编码,称为‘区域码’。区域码的每一位用来标示端点相对于相应裁剪边界的里面还是外面,分别用‘0’和‘1’表示。这样,四个窗口边界一起生成了九个区域,每个区域都有一个唯一的区域码,如图1所示。 图1 裁剪窗口的九个位置区域码 一旦给所有的线段端点建立了区域码,就可以快速判断哪条线段完全在裁剪窗口内,哪条线段完全在窗口之外。完全在窗口边界内的线段,其两个端点的区域码均为0000,因此保留这些线段。若两个端点的区域码中,有某一相同位置

直线段的裁剪

{ 实验:直线段的裁剪 姓名:龙泽学号:20141090068 指导教师:吴昊 实验内容:采用Liang-Barsky 算法对直线段进行裁剪。 实验设计:本次实验采用的是Liang-Barsky 算法,根据这个算法需先定义直线段的起点坐标(x1,y1 ),终点坐标(x2,y2 ),以及裁剪框(矩形)的左边界(wxl), 右边界(wxr) ,上边界(wyt) ,下边界(wyb) ,如void Line_Clipping(float x1, float y1, float x2, float y2,float Wxl,float Wxr,float Wyt,float Wyb) ,再结合鼠标mouse函数,实现点击鼠标左键显示矩形框和待裁剪的直线段,点击鼠标右键进行裁剪并显示裁剪过后的直线段,最终显示出来。 由于在Line_Clipping 函数下用到了line 函数,所以我在上面定义了个line 函数来绘制直线段(绘制直线段所采用的算法为Bresenham算法)。 程序代码: #include #include //初始化OpenGL场景 void myinit (void) { glClearColor (1, 1,1, 0); // 将背景置成白色 glMatrixMode(GL_PROJECTION); gluOrtho2D(0,500,0,500); // 设置投影变换,使用正交投影 } void setPixel(int x, int y)// 在指定位置(x,y)绘制点图元 glBegin (GL_POINTS);

直接剪切试验

试验八 直接剪切试验 (一) 概述 直接剪切试验就是直接对试样进行剪切的试验,是测定抗剪强度的一种常用方法,,通常采用4个试样,分别在不同的垂直压力施加水平剪力,测试样破坏时的剪应力,然后根据库仑定律确定土的抗剪强度参数?与c (二) 试验方法 直接剪切试验一般可分为慢剪、固结快剪和快剪三种试验方法。 1.慢剪试验。先使土样在某一级垂直压力作用下,固结至排水变形稳定(变形稳定标准为每小时变形不大于0.005mm),再以小于每分钟0.02 mm 的剪切速量缓慢施加水平剪应力,在施加剪应力的过程中,使土样内始终不产生孔隙水压力, 用几个土样在不同垂直压力下进行剪切,将得到有效应力抗剪强度参数c s 和Фs 值,但历时较长,剪切破坏时间可按下式估算 ) 18(5050 ?=t t f 式中 t f ——达到破坏所经历的时间; t 50——固结度达到50%的时间。 2.固结快剪试验。先使土样在某一级垂直压力作用下,固结至排水变形稳定,再以每分钟0.8mm 的剪切速率施加剪力,直至剪坏,一般在3~5min 内完成,适用于渗透系数小于10-6cm/s 的细粒土。由于时间短促,剪力所产生的超静水压力不会转化为粒间的有效应力,用几个土样在不同垂直压力下进行慢剪,便能求得抗剪强度参数cq cq C 与? 值,这种c cq 、cq ?值称为总应力法抗剪强度参数。 3.快剪试验。采用原状土样尽量接近现场情况,以每分钟0.8mm 的剪切速率施加剪力,直至剪坏,一般在3~5 min 内完成,适用于渗透系数小于10-6cm/s 的细粒土。种方法将使粒间有效应力维持原状,不受试验外力的影响,但由于这种粒间有效应力的数值无法求得,所以试验结果只能求得(σtanФq +c q )的混合值。快速法适用于测定粘性土天然强度,但φq 角将会偏大。 (三)仪器设备 1..直剪仪。采用应变控制式直接剪切仪,如图8-1所示,由剪切盒、垂直

线段裁剪算法

计算机图形学 实验报告 实验(四) 实验题目:线段裁剪算法 指导老师:吴颖斌 专业:数字媒体技术 班级: 1306班 姓名: xx(20131006xx) 2014年 11月19日

一、实验类型 验证性。 二、实验目的和要求 目的:编写线段裁剪算法程序,验证算法的正确性。 要求:编写Cohen-Sutherland直线剪裁算法程序,编译、调试,查看运行结果。 三、实验中用到的硬件设备及软件环境 Microsoft Visual C++ 6.0和PC机 四、实验主要程序代码 Cohen-Sutherland直线剪裁算法 (1)主要步骤和代码: 步骤1:创建Code_Clip工程文件; 步骤2:在主程序的程序头部定义符号常量(鼠标双击“CCode_ClipView”,添 加至 “class CCode_ClipView : public …………”之前) #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8 步骤3:定义成员变量和成员函数(鼠标双击“CCode_ClipView”,添加至“class CCode_ClipView : public …………”之内)) int WT; int WB; int WR; int WL; 步骤4:在构造函数中为窗口边界变量赋初值 CCode_ClipView::CCode_ClipView() { // TODO: add construction code here WL=100;WR=400;WB=100;WT=300; } 步骤5:编写成员函数程序(在“CCode_ClipView”单击鼠标右键-->Add member function……) void CCode_ClipView::encode(int x, int y, int *code) {

直线裁剪算法研究(Cohen-Sutherland算法和Liang-Barsky算法)

直线裁剪算法研究 摘要:直线裁剪是计算机图形学中的一个重要技术,在对常见的直经线裁剪的算法分析的基础上,针对Cohen-Sutherland算法和Liang-Barsky算法进行了分析研究。并对两种算法了计算直线与窗口边界的交点时,进行了有效有比较。 关键词:裁剪;算法;Cohen-Sutherland;Liang-Barsky; 1 引言 直线是图形系统中使用最多的一个基本元素。所以对于直线段的裁剪算法是被研究最深入的一类算法,目前在矩形窗口的直线裁剪算法中,出现了许多有效的算法。其中比较著名的有:Cohen-Sutherland算法、中点分割算法、Liang-Ba rsky算法、Sobkow-Pospisil-Yang算法,及Nicholl-Lee-Ncholl算法等。 2 直线裁剪的基本原理 图1所示的为直线与窗口边界之间可能出现的几种关系。可以通过检查直线的两个端点是否在窗口之内确定如何对此直线裁剪。如果一直线的两个端点均在窗口边界之内(如图1中P5到P6的直线),则此直线应保留。如果一条直线的一个端点在窗口外(如P9)另一个点在窗口内(如P10),则应从直线与边界的交点(P9)处裁剪掉边界之外的线段。如果直线的两个端点均在边界外,则可分为两种情况:一种情况是该直线全部在窗口之外;另一种情况是直线穿过两个窗口边界。图中从P3到P4的直线属于前一种情况,应全部裁剪掉;从P7到P8的直线属于后一种情况,应保留P7到P8的线段,其余部分均裁剪掉。 图1直线相对干窗口边界的栽剪 直线裁剪算法应首先确定哪些直线全部保留或全部裁剪,剩下的即为部分裁剪的直线。对于部分裁剪的直线则首先要求出这些直线与窗口边界的交点,把从交点开始在边界外的部分裁剪掉。一个复杂的画面中可能包含有几千条直线,为了提高算法效率,加快裁剪速度,应当采用计算量较小的算法求直线与窗口边界的交点。

计算机图形学代码_CS法直线段裁剪

这段代码主要是用CS法对一个直线段进行裁剪。 运行在VC环境下。 typedef struct { float x,y; }Point; typedef struct { unsigned all; unsigned left,right,top,bottom; }OutCode; void CompOutCode(Point p,RECT* rect,OutCode *outCode) { outCode->all=0; outCode->top=outCode->bottom=0; if>(float)rect->bottom) { outCode->top=1; outCode->all+=1; } else if<(float)rect->top) { outCode->bottom=1; outCode->all+=1; } outCode->left=outCode->right=0; if>(float)rect->right) { outCode->right=1; outCode->all+=1; } else if<(float)rect->left) { outCode->left=1; outCode->all+=1; } } void Cohen_SutherlandLineClip(Point p0,Point p1,RECT *rect,CDC* pDC) { bool accept=false,done=false;

OutCode outCode0,outCode1; OutCode *outCodeOut; Point p; CompOutCode(p0,rect,&outCode0); CompOutCode(p1,rect,&outCode1); do { if(!&&! accept=done=true; else if(&!=0) done=true; else { if outCodeOut=&outCode0; else outCodeOut=&outCode1; if(outCodeOut->left) { =+ =(float)rect->left; } else if(outCodeOut->top) { =+ =(float)rect->top; } else if(outCodeOut->right) { =+ =(float)rect->right; } else if(outCodeOut->bottom) { =+ =(float)rect->bottom; } if(outCodeOut->all== { =; =; CompOutCode(p0,rect,&outCode0);

直线电机的工作原理

直线电机的工作原理 直线电机是一种将电能直接转换成直线运动机械能,而不需要任何中间转换机构的传动装置。它可以看成是一台旋转电机按径向剖开,并展成平面而成,如图1所示。 由定子演变而来的一侧称为初级,由转子演变而来的一侧称为次级。在实际应用时,将初级和次级制造成不同的长度,以保证在所需行程范围内初级与次级之间的耦合保持不变。直线电机可以是短初级长次级,也可以是长初级短次级。考虑到制造成本、运行费用,目前一般均采用短初级长次级。 直线电动机的工作原理与旋转电动机相似。以直线感应电动机为例:当初级绕组通入交流电源时,便在气隙中产生行波磁场,次级在行波磁场切割下,将感应出电动势并产生电流,该电流与气隙中的磁场相作用就产生电磁推力。如果初级固定,则次级在推力作用下做直线运动;反之,则初级做直线运动。 直线电机的优缺点介绍

直线电机是一种将电能转化为动能的机械装置,通常应用于工业生产当中。与直线电机相对应的一种装置是旋转电机,两者的工作原理类似。但是直线电机是进行直线运动的电机,而旋转电机是进行旋转运动的电机。直线电机可以直接将电能转化为动能,而不需要中间装置。 直线电机的优点 直线电机一般有平板式、U型式、管式几种。直线电机的工作系统是通过内部直线导轨来完成工作,用环保材料将线圈压缩成电路板的动子和电热调节器连接,然后在稀土磁铁的磁轨上进行动力推动,不需要像旋转电机一样,将动子固定在旋转轴承的支撑架上来保证相

对运动部分的稳定,通过直接反馈位置的直线编码器装置,就可以直接测量负载位置,从而保证负载位置的精确度。 由上看出,直线电机因为不需要中间转换装置,所以操作简单,非常适合进行非离心力的运动。直线电机的优势主要有以下几点: 首先,结构简洁。直线电机直接产生直线运动,位置精确度高,更为节省成本、稳定可靠、操作和维护简便。 第二,运动效率高。直线电机的气垫和磁垫中间存在缝隙,在运动时,不会出现机械接触,也不会出现摩擦和噪音,对零部件的损伤较小,从而具有较高的工作效率,可以进行高速直线运动。

梁友栋-Barsky直线裁剪算法计算机图形学课程设计

河南理工大学 万方科技学院 课程设计报告 2011 — 2012学年第二学期 课程名称计算机图形学 设计题目计算机图形学基本算法 演示系统设计 学生姓名 学号 专业班级网络11升—1班 指导教师徐文鹏 2012 年5 月28 日

目录 第1章设计内容与要求 (1) 1.1 总体目标和要求 (1) 1.2内容与要求 (1) 1.2.1 直线的生成 (1) 1.2.2 圆弧的生成 (1) 1.2.3 线段裁剪 (2) 1.2.4 多边形裁剪 (2) 1.2.5 综合 (2) 第2章总体设计 (3) 2.1 Bresenham算法画直线 (3) 2.1.1 Bresenham算法画直线理论基础 (3) 2.1.2 Bresenham算法画直线原理 (3) 2.2 Bresenham算法画圆 (4) 2.2.1 Bresenham算法画圆理论基础 (4) 2.2.2 Bresenham算法画圆原理 (5) 2.3 梁友栋-Barsky算法进行线段裁剪 (6) 2.3.1梁友栋-Barsky算法进行线段裁剪基本原理 (6) 2.4 Sutherland-Hodgman算法进行多边形裁剪 (8) 2.4.1 Sutherland—Hodgman多边形裁剪算法思想 (8) 2.4.2 点在边界内侧的判断方法 (8) 2.4.4 Sutherland-Hodgeman多边形裁剪算法特点 (8) 第3章详细设计 (9) 3.1 Bresenham算法画直线 (9) 3.1.1 Bresenham 算法画线算法具体实现过程 (9) 3.2 Bresenham算法画圆 (9) 3.2.1 Bresenham 算法画圆核心代码 (9)

图形学_直线裁剪__实验报告

实验报告 实验报告 实验报告三 一、实验目的 1、理解、巩固线段裁剪的含义; 2、掌握Cohen-Sutherland线段裁剪方法。 二、算法原理介绍 对于每条线段P1P2,分为三种情况处理。 (1)若P1P2完全在窗口内,则显示该线段P1P2,简称“取”之。 (2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。 (3)若线段既不满足“取”的条件,也不满足“弃”的条件,则把线段分为两段。 其中一段完全在窗口外,可弃之。然后对另一段重复上述处理。 三、程序源代码 #include #include #define LEFT 1 #define RIGHT 2 #define BOTTOM 4 #define TOP 8

#define XL 100 #define XR 300 #define YB 100 #define YT 300 void encode(float x,float y,int * code) { int c=0; if(xXR)c=c | RIGHT; if(yYT)c=c | TOP; *code=c; return; } /*(x1,y1)与(x2,y2)是线段端点坐标, 其它四个参数分别定义窗口的左,下,右,上边界*/ void C_S_LineCLip(float x1, float y1, float x2, float y2) { int code1,code2,code; float x,y; encode(x1,y1,&code1); encode(x2,y2,&code2); while((code1!=0) || (code2!=0)) { if((code1&code2)!=0)return; code=code1; if(code1==0)code=code2; if((LEFT&code)!=0)/*线段与左边界相交*/ { x=XL; y=y1+(y2-y1)*(XL-x1)/(x2-x1); } else if((RIGHT&code)!=0)/*线段与右边界相交*/ { x=XR;

直线电机的结构及工作原理

直线电机的结构及工作原理 来源:本站整理作者:佚名2010年02月25日 17:43 分享 订阅 [导读]直线电机的结构直线电机的结构可以看作是将一台旋转电机沿径向剖开,并将电机的圆周展开成直线而形成的。其中定子相 关键词:直线电机 直线电机的结构 直线电机的结构可以看作是将一台旋转电机沿径向剖开,并将电机的圆周展开成直线而形成的。其中定子相当于直线电机的初级,转子相当于直线电机的次级,当初级通入电流后,在初次级之间的气隙中产生行波磁场,在行波磁场与次级永磁体的作用下产生驱动力,从而实现运动部件的直线运动。 直线电机的工作原理 设想把一台旋转运动的感应电动机沿着半径的方向剖开,并且展平,这就成了一台直线感应图电动机。 初级做得很长,延伸到运动所需要达到的位置,也可以把次级做得很长;既可以初级固定、次级移动,也可以次级固定、初级移动. 通入交流电后在定子中产生的磁通,根据楞次定律,在动体的金属板上感应出涡流。设引起涡流的感应电压为E,金属板上有电感L和电阻R,涡流电流和磁通密度将按费来明法则产生连续的推力F。 直线电机的特点 高速响应由于系统中直接取消了一些响应时间常数较大的如丝杠等机械传动件,使整个闭环控制系统动态响应性能大大提高,反应异常灵敏快捷。 位精度高线驱动系统取消了由于丝杠等机械机构引起的传动误差减少了插补时因传动系统滞后带来跟踪误差。通过直线位置检测反馈控制,即可大大提高机床的定位精度。传动环节的弹性变形、摩擦磨损和反向间隙造成的运动滞后现象,同时提高了其传动刚度。 速度快、加减速过程短 行程长度不受限制在导轨上通过串联直线电机,就可以无限延长其行程长度。 动安静、噪音低由于取消了传动丝杠等部件的机械摩擦,且导轨又可采用滚动导轨或磁垫悬浮导轨(无机械接触),其运动时噪音将大大降低。 效率高由于无中间传动环节,消除了机械摩擦时的能量损耗。 直线电机的应用 直线电机主要应用于三个方面: 应用于自动控制系统,这类应用场合比较多; 作为长期连续运行的驱动电机; 应用在需要短时间、短距离内提供巨大的直线运动能的装置中。 U槽无刷直线电机可以直接驱动,无需将转动转为线性运动,机械结构简单可靠。电机运行超平稳,无齿槽效应,动态响应速度极快,惯量小,加速度可达20G,速度达到10-30m/s,低速1μm/s时运动平滑,刚性高,结构紧凑,可选配直线编码器做高精度位置控制,其位置精度取决于所选编码器。

计算机图形学_实验报告三_图形裁剪算法

图形裁剪算法 1.实验目的: 理解区域编码 设计直线裁剪算法 编程实现直线裁剪算法 2.实验描述: 设置裁剪窗口坐标为:wxl=250;wxr=850;wyb=250;wyt=450;裁剪前如下图所示: 裁剪后结果为: 3.算法设计: 直线裁剪算法: 假设裁剪窗口是标准矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr)四条边组成,如下图所示。延长窗口四条边形成9个区域。根据被裁剪直线的任一端点P(x,y)所处的窗口区域位置,可以赋予一组4位二进制区域码C4C3C2C1。

编码定义规则: 第一位C1:若端点位于窗口之左侧,即XWxr,则C2=1,否则C2=0。 第三位C3:若端点位于窗口之下侧,即YWyt,则C4=1,否则C4=0。 裁剪步骤: 1. 若直线的两个端点的区域编码都为0,即RC1|RC2=0(二者按位相或的结果为0,即RC1=0 且RC2=0),说明直线两端点都在窗口内,应“简取”。 2. 若直线的两个端点的区域编码都不为0,即RC1&RC2≠0(二者按位相与的结果不为0,即RC1≠0且RC2≠0,即直线位于窗外的同一侧,说明直线的两个端点都在窗口外,应“简弃”。 3. 若直线既不满足“简取”也不满足“简弃”的条件,直线段必然与窗口相交,需要计算直线与窗口边界的交点。交点将直线分为两段,其中一段完全位于窗口外,可“简弃”。对另一段赋予交点处的区域编码,再次测试,再次求交,直至确定完全位于窗口内的直线段为止。 4. 实现时,一般按固定顺序左(x=wxl)、右(x=wxr)、下(y=wyb)、上(y=wyt)求解窗口与直线的交点。

线段与多边形的裁剪

一、实验目标 1. CohenSutherland 线段裁剪; 2. LiangBarsky线段裁剪; 3. SutherlandHodgeman 多边形裁剪; 二、实验内容 一、实验内容 在给定的MFC程序模板中添加Cohen_Sutherland 线段裁剪、Liang_Barsky x 线段裁剪、Sutherland_Hodgeman 多边形裁剪,生成新的程序窗口中要有Cohen_Sutherland 线段裁剪、Liang_Barsky x线段裁剪、Sutherland_Hodgeman 多边形裁剪的菜单按钮,点击按钮分别弹出Cohen_Sutherland 线段裁剪、Liang_Barsky 线段裁剪、Sutherland_Hodgeman 多边形裁剪的窗口,通过点击鼠标操作实现裁剪框和线段以及多边形的定义和裁剪。 二、实验原理 1. Cohen_Sutherland 线段裁剪 该算法也称为编码算法,首先对线段的两个端点按所在的区域进行分区编码,根据编码可以迅速地判明全部在窗口内的线段和全部在某边界外侧的线段。只有不属于这两种情况的线段,才需要求出线段与窗口边界的交点,求出交点后,舍去窗外部分。对剩余部分,把它作为新的线段看待,又从头开始考虑。两遍循环之后,就能确定该线段是部分截留下来,还是全部舍弃。 编码 延长裁剪边框将二维平面分成九个区域,每个区域各用一个四位二进制代码标识。各区代码值如图中所示。四位二进制代码的编码规则是: (1)第一位置1:区域在左边界外侧(2)第二位置1:区域在右边界外侧 (3)第三位置1:区域在下边界外侧(4)第四位置1:区域在上边界外侧

(土工)直接剪切实验(报告)

直接剪切实验报告 专业班级学号姓名同组者姓名 实验编号实验名称直接剪切实验 实验日期批报告日期成绩 一、实验目的 直接剪切实验是测定土的抗剪强度的一种常用方法,通常采用四个试样,分别在不同的垂直压力下,施加水平剪切力进行剪切,测出破坏时剪应力,然后根据库仑定律确定土的抗剪强度指标:内摩擦角φ和粘聚力c。 二、实验原理 土的破坏都是剪切破坏,土的抗剪强度是土在外力作用下,其一部分土体对于另一部分土体滑动时所具有的抵抗剪切的极限强度。土体的一部分对于另一部分移动时,便认为该点发生了剪切破坏。无粘性土的抗剪强度与法向应力成正比;粘性土的抗剪强度除和法向应力有关外,还决定于土的粘聚力。土的摩擦角φ、粘聚力c是土压力、地基承载力和土坡稳定等强度计算必不可少的指标。 三、实验仪器 1.应变控制式直剪仪:由剪切容器、垂直加压设备、水平力推力座、量力环等组成。 2.其它辅助设备:百分表、天平、环刀、秒表、饱和器、透水石、削土刀等。 四、实验步骤 (见实训指导书,不要都抄,自己总结,写关键步骤即可。) 1.按要求的干密度,称出一个环刀体积所需的风干试样。本实验使用扰动土试样。制备四份试样,在四种不同竖向压力下进行剪切试验。 2. .取出剪切容器的加压盖及上部透水石,将上下盒对准,插入固定销。 3.将试样徐徐倒入剪切容器内,在试样面上依次放好透水石、加压盖、钢珠

和加力框架。 4. 徐徐转动手轮至量力环上的百分表长针微微转动为止,将百分表的长针 调至零,即R 0=0。 5. 在试样面上施加第一级垂直压力P=100kpa 。 6. 拔去固定销,以8s/r 的均匀速率转动手轮,使试样在3--5分钟内剪破。 剪破标准: (1)当百分表读数不变或明显后退,(2)百分表指针不后退时, 以剪切位移为4mm 对应的剪应力为抗剪强度,这时剪切至剪切位移达6mm 时才停止剪切。 7. 卸除压力,取下加力框架、钢珠、加压盖等,倒出试样,刷净剪切盒。 8.重复2-7步骤,改变垂直压力,使分别为200、300、400kpa 进行试验。 五、 注意事项 1.先安装试样,再装量表。安装试样时要用透水石把土样从环刀推进剪切盒里,试验 前量表中的大指针调至零。 2.加荷时,不要摇晃砝码;剪切时要拔出销钉。 六、 实验数据记录与处理 直接剪切试验记录 仪器编号 试样面积(cm 2) 垂直压力p (kPa ) 100 200 300 400 量力环最大变形R (0.01mm ) 量力环号数 量力环系数C (Kpa/0.01mm ) 抗剪强度CR =τ(Kpa ) 抗剪强度指标 C= kpa , ?= °

Cohen-Sutherland直线裁剪算法

实验三图形裁剪算法 1.实验目的: 理解区域编码(Region Code,RC) 设计Cohen-Sutherland直线裁剪算法 编程实现Cohen-Sutherland直线裁剪算法 2.实验描述: 设置裁剪窗口坐标为:wxl=250;wxr=850;wyb=250;wyt=450;裁剪前如下图所示: 裁剪后结果为: 3.算法设计: Cohen-Sutherland 直线裁剪算法: 假设裁剪窗口是标准矩形,由上(y=wyt)、下(y=wyb)、左(x=wxl)、右(x=wxr)四条边组成,如下图所示。延长窗口四条边形成9个区域。根据被裁剪直线的任一端点P(x,y)所处的窗口区域位置,可以赋予一组4位二进制区域码C4C3C2C1。

为了保证窗口内直线端点的编码为零,编码规则定义如下: 第一位:若端点位于窗口之左侧,即xwxr,则C2=1,否则C2=0。 第三位:若端点位于窗口之下侧,即ywyt,则C4=1,否则C4=0。 裁剪步骤: 1. 若直线的两个端点的区域编码都为零,即RC1|RC2=0(二者按位相或的结果为零,即RC1=0 且RC2=0),说明直线两端点都在窗口内,应“简取”之。 2. 若直线的两个端点的区域编码都不为零,即RC1&RC2≠0(二者按位相与的结果不为零,即RC1≠0且RC2≠0,即直线位于窗外的同一侧,说明直线的两个端点都在窗口外,应“简弃”之。 3. 若直线既不满足“简取”也不满足“简弃”的条件,直线必然与窗口相交,需要计算直线与窗口边界的交点。交点将直线分为两段,其中一段完全位于窗口外,可“简弃”之。对另一段赋予交点处的区域编码,再次测试,再次求交,直至确定完全位于窗口内的直线段为止。 4. 实现时,一般按固定顺序左(x=wxl)、右(x=wxr)、下(y=wyb)、上(y=wyt)求解窗口与直线的交点。

相关文档
最新文档