《计算机图形学》课程实验报告
- 格式:doc
- 大小:1.63 MB
- 文档页数:40
int length,i;
double x,y,dx,dy;
length=abs(x1-x0);
if(abs(y1-y0)>length)
length=abs(y1-y0);
dx=(x1-x0)/length;
dy=(y1-y0)/length;
x=x0+0.5;
y=0.5;
for(i=1;i<=length;i++){
pDC->SelectObject(pOldPen);
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(255,255,0));
pDC->TextOut(300,520,"开开心心每一天!!哦耶!");
姓名
班级
实验日期
学号
分组
无
实验成绩
实验名称
直线生成算法
}
}
姓名
班级
实验日期
学号
分组
无
实验成绩
实验名称
圆和椭圆生成算法
实
验
目
的
及
要
求
编写圆和椭圆的扫描转换算法程序,验证算法的正确性。
实
验
环
境
Visual C++集成编程环境
实
验
内
容
原理:通过对称性,可以通过八分画圆法从而确定其他部分!
算
法
描
述
及
实
验
步
骤
1.编写中点画圆法的扫描转换程序,考虑原点在(x0,y0)处程序的改动;
}
void CHufeng3View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
pDC->SelectStockObject(NULL_BRUSH);
}
}
void CHufeng2View::OnDraw(CDC* pDC)
{
CHufeng2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
int gi,gj;
pDC->TextOut(90,90,"(100,100)");
aahufeng2(pDC,100,100,600,400,RGB(255,0,0));
aahufeng2(pDC,100,400,600,100,RGB(255,0,0));
}
任务三:protected:
int m_ist;
CPoint m_p2;
CPoint m_p1;
public:
void aahufeng3(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color);
{
int x,y;
float d;
x=0;
y=r;
d=1.25-r;
CirPot(pDC,x0,y0,x,y,color);
while(x<=y)
{
if(d<0){
d+=2*x+3;
x++;
}else{
d+=2*(x-y)+5;
x++;
y--;
}
CirPot(pDC,x0,y0,x,y,color);
}
void CHufeng3View::aahufeng3(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color)
{
int length,i;
double x,y,dx,dy;
length=abs(x1-x0);
if(abs(y1-y0)>length)
length=abs(y1-y0);
dx=(float)(x1-x0)/length;
dy=(float)(y1-y0)/length;
x=x0+0.5;
y=y0+0.5;
for(i=1;i<=length;i++){
pDC->SetPixel((int)x,(int)y,color);
x=x+dx;y=y+dy;
任务三:加入鼠标功能,实现交互式画直线。
算
法
描
述
及
实
验
步
骤
一:1.输入直线的两端点p0(x0,y0)和p1(x1,y1),假设k>=0且k<=1。
2.计算初始值△x,△y,d0=0.5-k,x=x0,y=y0。
3.绘制点(x,y)判断d的符号:若d<0,则(x,y)更新为(x+1,y+1),d更新为d+1-k;否则(x,y)更新为(x+1,y),d更新为d-k。
4.当直线没有画完时,重复步骤3,否则结束。
二:将像素点扩大十倍。
三:通过添加OnButtonDown()函数实现。
调
试
过
程
及
实
验
结
果
总
结
清楚的认识到了中点Bresenham算法的原理。
附
录
任务—:void CHufengView::aahufeng(CDC *pDC, int x0, int y0, int x1, int y1, COLORREF color)
pDC->LineTo(gi,400);
}
pDC->TextOut(590,410,"(600,400)");
aahufeng2(pDC,100,100,600,400,RGB(255,0,0));
aahufeng2(pDC,600,100,600,400,RGB(255,0,0));
aahufeng2(pDC,100,100,100,400,RGB(255,0,0));
if(!m_ist)
{
m_p1=m_p2=point;
m_ist++;
}
else{
m_p2=point;
m_ist--;
aahufeng3(pDC,m_p1.x,m_p1.y,m_p2.x,m_p2.y,RGB(255,0,0));
}
ReleaseDC(pDC);
CView::OnLButtonDown(nFlags, point);
附
录
CRect rect(200,40,660,500);
CRect rect1(300,190,350,240);
CRect rect2(510,190,560,240);
pDC->Ellipse(200,40,660,500);
CBrush Brush(HS_CROSS,RGB(255,0,0)),*pOldBrush;
《计算机图形学》课程实验报告
姓名
班级
实验日期
学号
分组
无
实验成绩
实验名称
Visual C++图形程序设计
实
验
目
的
及
要
求
Visual C++是在Microsoft C的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今Visual C++已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。本章以Visual C++ 6.0为对象,主要介绍Visual C++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对Visual C++的学习,掌握Visual C++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。
{
int length,i,tx,ty;
double x,y,dx,dy;
length=abs(x1-x0);
if(abs(y1-y0)>length)
length=abs(y1-y0);
dx=(float)(x1-x0)/length;
dy=(float)(y1-y0)/length;
x=x0;
y=y0;
CPoint p1(430,190),p2(430,350);
CPen Pen,*pOldPen;
Pen.CreatePen(PS_SOLID,12,RGB(0,0,255));
pOldPen=pDC->SelectObject(&Pen);
pDC->MoveTo(p1);
pDC->LineTo(p2);
pDC->SetPixel((int)x,(int)y,color);
x=x+dx;y=y+dy;
}
}
void CHufengView::OnDraw(CDC* pDC)
{
CHufengDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CHufeng3View::CHufeng3View()
{
// TODO: add construction code here