1 / 18
文档名称:

计算机图形学实验报告.doc

格式:doc   大小:143KB   页数:18页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

计算机图形学实验报告.doc

上传人:taoapp 2021/11/1 文件大小:143 KB

下载得到文件列表

计算机图形学实验报告.doc

文档介绍

文档介绍:实验一 实现任意直线的中点划线算法
一、实验目的:
通过<<计算机图形学>>的实验课程,能熟练地掌握各种图形的生成原理,理解各种图形的基本算法,并能将算法用程序实现,最终运用c语言编写绘图程序,得到所需结果。
二、仪器、设备:计算机
三、参考资料: 计算机图形学、实验指导书
四、实验内容(步骤):
基本原理
假定直线段的斜率m∈[0,1],并且左下方的端点为,,右上方的端点为。直线段的方程为:y=mx+B……y-x-B=0
这里用到了直线的正负划分性,直线F(x,y)=0将整个二维空间分割成三个部分,直线上方的为正,下方的为负,直线上当然为零。现在假定已经求得像素,由四舍五入的取整原则可知 由假设的斜率范围可知,和的交点的纵坐标在直线上,区间内存在两个像素NE和E。根据整原则,当在中点上方时,取像素NE,否则取像素E,即
而“在M上方”等价于“F(M)〈=0”。
若取判别式,
则式变为,
以上两式即为中点判别式。
计算判别式的递推公式如下:
算法的初始条件为
直线段中点算法描述如下:
初始化中点判别式
确定取像素E和NE时判别式的增量
以x为自变量循环自增判断判别式的增量,即确定下一个是取E和NE中的哪个点并将其描出
五、实验程序(代码)记录:
将DDA算法改成中点划线算法即可
#include ""
#include ""
#include ""
#include ""
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDDAView
IMPLEMENT_DYNCREATE(CDDAView, CView)
BEGIN_MESSAGE_MAP(CDDAView, CView)
//{{AFX_MSG_MAP(CDDAView)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
ON_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()
/////////////////////////////////////////////////////////////////////////////
// CDDAView construction/destruction
CDDAView::CDDAView()
{
// TODO: add construction code here
}
CDDAView::~CDDAView()
{
}
BOOL CDDAView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CDDAView drawing
void CDDAView::OnDraw(CDC* pDC)
{
CDDADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int xx,yy,x2,y2,m,n;
float dx,dy,k,x,y;
int