南昌大学计算机图形学实验报告.docx
《南昌大学计算机图形学实验报告.docx》由会员分享,可在线阅读,更多相关《南昌大学计算机图形学实验报告.docx(34页珍藏版)》请在冰点文库上搜索。
南昌大学计算机图形学实验报告
实验报告
实验课程:
计算机图形学
学生姓名:
涂汉江
学号:
6100410181
专业班级:
数媒101班
2012年12月16号
目录
实验1绘制直线和圆……………………………………………………………….1
实验2种子填充算法……………………………………………………………….3
实验3线条的剪裁………………………………………………………………….6
实验4B样条曲线绘制……………………………………………………………..10
实验5deboor曲线的绘制…………………………………………………………..13
南昌大学实验报告
涂汉江学号:
6100410181专业班级:
数字媒体101班
实验类型:
□验证□综合■设计□创新
实验日期:
2012-12-16
实验1绘制直线和圆
1.实验目的
掌握基本图形的绘制
2.实验内容
1.、绘制一条直线
2、.绘制一个圆
3.实验环境
1、个人计算机
2、Windows7操作系统
3、VS2010
4.实验步骤
主要的代码:
1、线的实现代码:
这里采用的是数值微分法的方法
voidC线与圆2View:
:
dda(intx0,inty0,intx1,inty1,intcolor,CDC*pDC)
{
floatdx,dy,k,y;
dx=x1-x0;
dy=y1-y0;
k=dy/dx;
y=y0;
for(intx=x0;x<=x1;x++)
pDC->SetPixelV(x,int(y+0.5),RGB(255,0,0));
y=y+k;
}
2、圆的实现代码
这里采用的是中点画圆算法
midcircle(intr,intcolor,CDC*pDC)
intx=0;
inty=r;
floatd;
d=1.25-r;
pDC->SetPixelV(x+100,y+100,RGB(255,0,0));
while(x{if(d<0){d+=2*x+3;x++;}else{d+=2*(x-y)+5;x++;y--;}pDC->SetPixelV(x+100,y+100,RGB(255,0,0));pDC->SetPixelV(y+100,x+100,RGB(255,0,0));pDC->SetPixelV(-x+100,y+100,RGB(255,0,0));pDC->SetPixelV(x+100,-y+100,RGB(255,0,0));pDC->SetPixelV(-x+100,-y+100,RGB(255,0,0));pDC->SetPixelV(-y+100,x+100,RGB(255,0,0));pDC->SetPixelV(y+100,-x+100,RGB(255,0,0));pDC->SetPixelV(-y+100,-x+100,RGB(255,0,0));}}3、头文件包含的文件#include"stdafx.h"//SHARED_HANDLERS可以在实现预览、缩略图和搜索筛选器句柄的//ATL项目中进行定义,并允许与该项目共享文档代码。#ifndefSHARED_HANDLERS#include"线与圆.h"#endif#include"线与圆Doc.h"#include"线与圆View.h"#ifdef_DEBUG#definenewDEBUG_NEW#endif4、调用部分voidC线与圆View::OnDraw(CDC*pDC){C线与圆Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;midcircle(50,RGB(255,0,0),pDC);dda(200,200,300,300,RGB(255,0,0),pDC);}这里画的是原点为(100,100)半径为50的圆和一条以(200,200)和(300,300)为端点的线段。5、实验结果如下截图:5.实验思考和问题解决本来只能做出1/4的圆的,通过改变中心坐标和坐标正负号,重复循环4次,最后得到一个整圆。前面有做直线的经验,所以总体来说还是比较顺利的。上个学期学习了数值分析课程,也用过类似的描点函数,同样是设计函数,实现循环描点。 南昌大学实验报告学生姓名:涂汉江学号:6100410181专业班级:数字媒体101班实验类型:□验证□综合■设计□创新实验日期:2012-12-16实验2种子填充算法1.实验目的掌握图形的填充算法2.实验内容1.绘制一个矩形2.用种子填充算法为其上色3.实验环境1.个人计算机2.Windows7操作系统3.VS20104.实验步骤主要代码部分://seedfillView.cpp:implementationoftheCSeedfillViewclass//#include"stdafx.h"#include"seedfill.h"#include"seedfillDoc.h"#include"seedfillView.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CSeedfillViewIMPLEMENT_DYNCREATE(CSeedfillView,CView)BEGIN_MESSAGE_MAP(CSeedfillView,CView)//{{AFX_MSG_MAP(CSeedfillView)//NOTE-theClassWizardwilladdandremovemappingmacroshere.//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!//}}AFX_MSG_MAP//StandardprintingcommandsON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CSeedfillViewconstruction/destructionCSeedfillView::CSeedfillView(){//TODO:addconstructioncodehere}CSeedfillView::~CSeedfillView(){}BOOLCSeedfillView::PreCreateWindow(CREATESTRUCT&cs){//TODO:ModifytheWindowclassorstylesherebymodifying//theCREATESTRUCTcsreturnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CSeedfillViewdrawingvoidCSeedfillView::OnDraw(CDC*pDC){CSeedfillDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereDrawRectangle(pDC);seed(210,210,(255,0,0),(225,255,225),pDC);} voidCSeedfillView::seed(intx,inty,intfillcolor,intoldcolor,CDC*pDC){intccolor;ccolor=pDC->GetPixel(x,y);if(ccolor!=oldcolor&&ccolor!=fillcolor){pDC->SetPixelV(x,y,fillcolor);seed(x+1,y,fillcolor,oldcolor,pDC);seed(x-1,y,fillcolor,oldcolor,pDC);seed(x,y+1,fillcolor,oldcolor,pDC);seed(x,y-1,fillcolor,oldcolor,pDC);} }voidCSeedfillView::DrawRectangle(CDC*pDC){for(inti=200;i<=300;i++){pDC->SetPixelV(200,i,RGB(0,0,0));pDC->SetPixelV(300,i,RGB(0,0,0));pDC->SetPixelV(i,200,RGB(0,0,0));pDC->SetPixelV(i,300,RGB(0,0,0));}}///////////////////////////////////////////////////////////////////////////////CSeedfillViewprintingBOOLCSeedfillView::OnPreparePrinting(CPrintInfo*pInfo){//defaultpreparationreturnDoPreparePrinting(pInfo);}voidCSeedfillView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addextrainitializationbeforeprinting}voidCSeedfillView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CSeedfillViewdiagnostics#ifdef_DEBUGvoidCSeedfillView::AssertValid()const{CView::AssertValid();}voidCSeedfillView::Dump(CDumpContext&dc)const{CView::Dump(dc);}CSeedfillDoc*CSeedfillView::GetDocument()//non-debugversionisinline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSeedfillDoc)));return(CSeedfillDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////////////////////////////////////////////////////CSeedfillViewmessagehandlers运行结果如下:5.实验思考和问题解决参考书上的伪代码并且与同学室友相互讨论实践才得到最后的结果,结果也差强人意,图显示的效果不好,很小。 南昌大学实验报告学生姓名:涂汉江学号:6100410181专业班级:数字媒体101班实验类型:□验证□综合■设计□创新实验日期:2012-12-16实验3线条的剪裁1.实验目的掌握对线条的剪裁算法2.实验内容1.绘制一条直线2.绘制一个矩形3.计算矩形内的线段4.绘制矩形内的线段3.实验环境1.个人计算机2.Windows7操作系统3.VS20104.实验步骤//LineCutView.cpp:implementationoftheCLineCutViewclass//#include"stdafx.h"#include"LineCut.h"#include"LineCutDoc.h"#include"LineCutView.h"#ifdef_DEBUG#definenewDEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[]=__FILE__;#endif///////////////////////////////////////////////////////////////////////////////CLineCutViewIMPLEMENT_DYNCREATE(CLineCutView,CView)BEGIN_MESSAGE_MAP(CLineCutView,CView)//{{AFX_MSG_MAP(CLineCutView)//NOTE-theClassWizardwilladdandremovemappingmacroshere.//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!//}}AFX_MSG_MAP//StandardprintingcommandsON_COMMAND(ID_FILE_PRINT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView::OnFilePrintPreview)END_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CLineCutViewconstruction/destructionCLineCutView::CLineCutView(){//TODO:addconstructioncodehere}CLineCutView::~CLineCutView(){}BOOLCLineCutView::PreCreateWindow(CREATESTRUCT&cs){//TODO:ModifytheWindowclassorstylesherebymodifying//theCREATESTRUCTcsreturnCView::PreCreateWindow(cs);}///////////////////////////////////////////////////////////////////////////////CLineCutViewdrawingvoidCLineCutView::OnDraw(CDC*pDC){CLineCutDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahereDrawRectangle(pDC);DrawLine(100,200,400,300,RGB(255,0,0),pDC);C_S_Line_Clip(100,200,400,300,pDC);}voidCLineCutView::DrawRectangle(CDC*pDC){for(inti=200;i<=300;i++){pDC->SetPixelV(200,i,RGB(0,0,0));pDC->SetPixelV(300,i,RGB(0,0,0));pDC->SetPixelV(i,200,RGB(0,0,0));pDC->SetPixelV(i,300,RGB(0,0,0));}}voidCLineCutView::DrawLine(intx0,inty0,intx1,inty1,intcolor,CDC*pDC){intx;floatdx,dy,k,y;dx=x1-x0;dy=y1-y0;k=dy/dx;y=y0;for(x=x0;x<=x1;x++){pDC->SetPixelV(x,int(y+0.5),color);y=y+k;}}voidCLineCutView::encode(floatx,floaty,int&code){intc;c=0;if(xc=c|LEFT;elseif(x>XR)c=c|RIGHT;if(yc=c|BOTTOM;elseif(y>YT)c=c|TOP;code=c;}voidCLineCutView::C_S_Line_Clip(floatx1,floaty1,floatx2,floaty2,CDC*pDC){intx,y;intcode1,code2,code;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);}elseif((RIGHT&code)!=0){x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);}elseif((BOTTOM&code)!=0){y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);}elseif((TOP&code)!=0){y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);}if(code==code1){x1=x;y1=y;encode(x,y,code1);}else{x2=x;y2=y;encode(x,y,code2);}}//DISplayLine(x1,y1,x2,y2);DrawLine(x1,y1,x2,y2,RGB(0,0,0),pDC);DrawLine(x1,y1,x2,y2,RGB(0,0,255),pDC);return;}///////////////////////////////////////////////////////////////////////////////CLineCutViewprintingBOOLCLineCutView::OnPreparePrinting(CPrintInfo*pInfo){//defaultpreparationreturnDoPreparePrinting(pInfo);}voidCLineCutView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addextrainitializationbeforeprinting}voidCLineCutView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CLineCutViewdiagnostics#ifdef_DEBUGvoidCLineCutView::AssertValid()const{CView::AssertValid();}voidCLineCutView::Dump(CDumpContext&dc)const{CView::Dump(dc);}CLineCutDoc*CLineCutView::GetDocument()//non-debugversionisinline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLineCutDoc)));return(CLineCutDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////
if(d<0)
d+=2*x+3;
x++;
else
d+=2*(x-y)+5;
y--;
pDC->SetPixelV(y+100,x+100,RGB(255,0,0));
pDC->SetPixelV(-x+100,y+100,RGB(255,0,0));
pDC->SetPixelV(x+100,-y+100,RGB(255,0,0));
pDC->SetPixelV(-x+100,-y+100,RGB(255,0,0));
pDC->SetPixelV(-y+100,x+100,RGB(255,0,0));
pDC->SetPixelV(y+100,-x+100,RGB(255,0,0));
pDC->SetPixelV(-y+100,-x+100,RGB(255,0,0));
3、头文件包含的文件
#include"stdafx.h"
//SHARED_HANDLERS可以在实现预览、
缩略图和搜索筛选器句柄的
//ATL项目中进行定义,并允许与该项目共享文档代码。
#ifndefSHARED_HANDLERS
#include"线与圆.h"
#endif
#include"线与圆Doc.h"
#include"线与圆View.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
4、调用部分
voidC线与圆View:
OnDraw(CDC*pDC)
C线与圆Doc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(!
pDoc)
return;
midcircle(50,RGB(255,0,0),pDC);
dda(200,200,300,300,RGB(255,0,0),pDC);
这里画的是原点为(100,100)半径为50的圆和一条以(200,200)和(300,300)为端点的线段。
5、实验结果如下截图:
5.实验思考和问题解决
本来只能做出1/4的圆的,通过改变中心坐标和坐标正负号,重复循环4次,最后得到一个整圆。
前面有做直线的经验,所以总体来说还是比较顺利的。
上个学期学习了数值分析课程,也用过类似的描点函数,同样是设计函数,实现循环描点。
实验2种子填充算法
掌握图形的填充算法
1.绘制一个矩形
2.用种子填充算法为其上色
1.个人计算机
2.Windows7操作系统
3.VS2010
主要代码部分:
//seedfillView.cpp:
implementationoftheCSeedfillViewclass
//
#include"seedfill.h"
#include"seedfillDoc.h"
#include"seedfillView.h"
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
/////////////////////////////////////////////////////////////////////////////
//CSeedfillView
IMPLEMENT_DYNCREATE(CSeedfillView,CView)
BEGIN_MESSAGE_MAP(CSeedfillView,CView)
//{{AFX_MSG_MAP(CSeedfillView)
//NOTE-theClassWizardwilladdandremovemappingmacroshere.
//DONOTEDITwhatyouseeintheseblocksofgeneratedcode!
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_COMMAND(ID_FILE_PRINT,CView:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:
ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:
OnFilePrintPreview)
END_MESSAGE_MAP()
//CSeedfillViewconstruction/destruction
CSeedfillView:
CSeedfillView()
//TODO:
addconstructioncodehere
~CSeedfillView()
BOOLCSeedfillView:
PreCreateWindow(CREATESTRUCT&cs)
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCView:
PreCreateWindow(cs);
//CSeedfillViewdrawing
voidCSeedfillView:
CSeedfillDoc*pDoc=GetDocument();
adddrawcodefornativedatahere
DrawRectangle(pDC);
seed(210,210,(255,0,0),(225,255,225),pDC);
seed(intx,inty,intfillcolor,intoldcolor,CDC*pDC)
intccolor;
ccolor=pDC->GetPixel(x,y);
if(ccolor!
=oldcolor&&ccolor!
=fillcolor)
pDC->SetPixelV(x,y,fillcolor);
seed(x+1,y,fillcolor,oldcolor,pDC);
seed(x-1,y,fillcolor,oldcolor,pDC);
seed(x,y+1,fillcolor,oldcolor,pDC);
seed(x,y-1,fillcolor,oldcolor,pDC);
DrawRectangle(CDC*pDC)
for(inti=200;i<=300;i++)
pDC->SetPixelV(200,i,RGB(0,0,0));
pDC->SetPixelV(300,i,RGB(0,0,0));
pDC->SetPixelV(i,200,RGB(0,0,0));
pDC->SetPixelV(i,300,RGB(0,0,0));
//CSeedfillViewprinting
OnPreparePrinting(CPrintInfo*pInfo)
//defaultpreparation
returnDoPreparePrinting(pInfo);
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
addextrainitializationbeforeprinting
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
addcleanupafterprinting
//CSeedfillViewdiagnostics
AssertValid()const
CView:
AssertValid();
Dump(CDumpContext&dc)const
Dump(dc);
CSeedfillDoc*CSeedfillView:
GetDocument()//non-debugversionisinline
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSeedfillDoc)));
return(CSeedfillDoc*)m_pDocument;
#endif//_DEBUG
//CSeedfillViewmessagehandlers
运行结果如下:
参考书上的伪代码并且与同学室友相互讨论实践才得到最后的结果,结果也差强人意,图显示的效果不好,很小。
实验3线条的剪裁
掌握对线条的剪裁算法
1.绘制一条直线
2.绘制一个矩形
3.计算矩形内的线段
4.绘制矩形内的线段
//LineCutView.cpp:
implementationoftheCLineCutViewclass
#include"LineCut.h"
#include"LineCutDoc.h"
#include"LineCutView.h"
//CLineCutView
IMPLEMENT_DYNCREATE(CLineCutView,CView)
BEGIN_MESSAGE_MAP(CLineCutView,CView)
//{{AFX_MSG_MAP(CLineCutView)
//CLineCutViewconstruction/destruction
CLineCutView:
CLineCutView()
~CLineCutView()
BOOLCLineCutView:
//CLineCutViewdrawing
voidCLineCutView:
CLineCutDoc*pDoc=GetDocument();
DrawLine(100,200,400,300,RGB(255,0,0),pDC);
C_S_Line_Clip(100,200,400,300,pDC);
DrawLine(intx0,inty0,intx1,inty1,intcolor,CDC*pDC)
intx;
for(x=x0;x<=x1;x++)
pDC->SetPixelV(x,int(y+0.5),color);
encode(floatx,floaty,int&code)
intc;
c=0;
if(xc=c|LEFT;elseif(x>XR)c=c|RIGHT;if(yc=c|BOTTOM;elseif(y>YT)c=c|TOP;code=c;}voidCLineCutView::C_S_Line_Clip(floatx1,floaty1,floatx2,floaty2,CDC*pDC){intx,y;intcode1,code2,code;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);}elseif((RIGHT&code)!=0){x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);}elseif((BOTTOM&code)!=0){y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);}elseif((TOP&code)!=0){y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);}if(code==code1){x1=x;y1=y;encode(x,y,code1);}else{x2=x;y2=y;encode(x,y,code2);}}//DISplayLine(x1,y1,x2,y2);DrawLine(x1,y1,x2,y2,RGB(0,0,0),pDC);DrawLine(x1,y1,x2,y2,RGB(0,0,255),pDC);return;}///////////////////////////////////////////////////////////////////////////////CLineCutViewprintingBOOLCLineCutView::OnPreparePrinting(CPrintInfo*pInfo){//defaultpreparationreturnDoPreparePrinting(pInfo);}voidCLineCutView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addextrainitializationbeforeprinting}voidCLineCutView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CLineCutViewdiagnostics#ifdef_DEBUGvoidCLineCutView::AssertValid()const{CView::AssertValid();}voidCLineCutView::Dump(CDumpContext&dc)const{CView::Dump(dc);}CLineCutDoc*CLineCutView::GetDocument()//non-debugversionisinline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLineCutDoc)));return(CLineCutDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////
c=c|LEFT;
elseif(x>XR)
c=c|RIGHT;
if(yc=c|BOTTOM;elseif(y>YT)c=c|TOP;code=c;}voidCLineCutView::C_S_Line_Clip(floatx1,floaty1,floatx2,floaty2,CDC*pDC){intx,y;intcode1,code2,code;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);}elseif((RIGHT&code)!=0){x=XR;y=y1+(y2-y1)*(XR-x1)/(x2-x1);}elseif((BOTTOM&code)!=0){y=YB;x=x1+(x2-x1)*(YB-y1)/(y2-y1);}elseif((TOP&code)!=0){y=YT;x=x1+(x2-x1)*(YT-y1)/(y2-y1);}if(code==code1){x1=x;y1=y;encode(x,y,code1);}else{x2=x;y2=y;encode(x,y,code2);}}//DISplayLine(x1,y1,x2,y2);DrawLine(x1,y1,x2,y2,RGB(0,0,0),pDC);DrawLine(x1,y1,x2,y2,RGB(0,0,255),pDC);return;}///////////////////////////////////////////////////////////////////////////////CLineCutViewprintingBOOLCLineCutView::OnPreparePrinting(CPrintInfo*pInfo){//defaultpreparationreturnDoPreparePrinting(pInfo);}voidCLineCutView::OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addextrainitializationbeforeprinting}voidCLineCutView::OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/){//TODO:addcleanupafterprinting}///////////////////////////////////////////////////////////////////////////////CLineCutViewdiagnostics#ifdef_DEBUGvoidCLineCutView::AssertValid()const{CView::AssertValid();}voidCLineCutView::Dump(CDumpContext&dc)const{CView::Dump(dc);}CLineCutDoc*CLineCutView::GetDocument()//non-debugversionisinline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLineCutDoc)));return(CLineCutDoc*)m_pDocument;}#endif//_DEBUG///////////////////////////////
c=c|BOTTOM;
elseif(y>YT)
c=c|TOP;
code=c;
C_S_Line_Clip(floatx1,floaty1,floatx2,floaty2,CDC*pDC)
intx,y;
intcode1,code2,code;
encode(x1,y1,code1);
encode(x2,y2,code2);
while(code1!
=0||code2!
=0)
if((code1&code2)!
code=code1;
if(code1==0)
code=code2;
if((LEFT&code)!
x=XL;
y=y1+(y2-y1)*(XL-x1)/(x2-x1);
elseif((RIGHT&code)!
x=XR;
y=y1+(y2-y1)*(XR-x1)/(x2-x1);
elseif((BOTTOM&code)!
y=YB;
x=x1+(x2-x1)*(YB-y1)/(y2-y1);
elseif((TOP&code)!
y=YT;
x=x1+(x2-x1)*(YT-y1)/(y2-y1);
if(code==code1)
x1=x;
y1=y;
encode(x,y,code1);
x2=x;
y2=y;
encode(x,y,code2);
//DISplayLine(x1,y1,x2,y2);
DrawLine(x1,y1,x2,y2,RGB(0,0,0),pDC);
DrawLine(x1,y1,x2,y2,RGB(0,0,255),pDC);
//CLineCutViewprinting
//CLineCutViewdiagnostics
CLineCutDoc*CLineCutView:
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CLineCutDoc)));
return(CLineCutDoc*)m_pDocument;
///////////////////////////////
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2