基本图形生成算法

本文介绍了使用MFC进行图形编程,重点探讨了光栅显示中DDA和Bresenham算法在直线段及圆弧生成上的应用。通过构建MFC工程,实现DDA和Bresenham算法的直线段生成,对比两者的效率和光滑度,并利用Bresenham算法绘制完整圆和任意角度的圆弧。
摘要由CSDN通过智能技术生成

                       基本图形生成算法

一.目的:

  1.学习使用MFC的图形编程。

    2.了解光栅显示的原理及基本图元线段和圆弧的生成算法。

二.内容:

    1.实现DDA直线段生成算法。

    2.实现Bresenham直线段生成算法。

    3.实现Bresenham圆弧生成算法。

三.要求:

    1.构建MFC工程:

    工程名:CgLineDraw和CgCircleDraw。

    选择单文档MFC框架结构:

     .app为应用程序;.doc为文档,用来存放数据;.view用来绘制文档数据图形;

     .MainFrame为主窗体。

    2.添加图形实验程序,修改View类,显示绘制OnDraw()。

    3.建立坐标系:

     (1)以屏幕中心为原点(0,0),X轴为横轴,Y轴为竖轴;

     (2)生成实例占据八个8分圆;

     (3)分别用DDA算法和Bresenham算法绘制直线段,重复绘制100次,比较两种算法绘制直线段的效率和光滑程度,并在屏幕上显示出来。

     (4)用Bresenham算法绘制完整的圆和任意角度的圆弧。

四.步骤:

   (1)算法介绍:

    i.数值微分法(DDA算法):直线扫描转换的最简单方法是先算出直线的斜率k=Δy/Δx,其中,Δx=x1-x0, Δy=y1-y0,(x0,y0)和(x1,y1)分别是直线的端点坐标。然后,从直线的起点开始,确定最佳逼近于直线的y坐标。假定端点坐标均为整数,让x从起点到终点变化,每步递增1,计算对应的y坐标,y=kx+B,并取象素(x,round(y))。

DDAline(int x1,int y1, int x2, int y2, CDC *pDC)
{
             int i,step;
             float x,y,dx,dy;
step = abs(x2-x1) > abs(y2-y1) ?
                           abs(x2-x1) :abs(y2-y1);
             dx = (float) (x2-x1) / step;
             dy = (float) (y2-y1) / step;
             x = x1 + 0.5;
             y = y1 +
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值