我们来自五湖四海,不为别的,只因有共同的爱好,为中国互联网发展出一分力!
领航时时彩重庆版

重庆时时彩后真能赚钱:关于画图底层算法

2014年05月22日21:42 阅读: 31655 次

领航时时彩重庆版 www.9nwl5.cn 平时, 用惯了API、CDC和封装好的内部函数,关于画线,画圆这些东西都是信手拈来...
最近学习计算机图形学,不得不深入内部研究一下底层算法...
在这里贴几个代码分享一下!
(这里只给出MFC的OnDraw函数)

一、画线的三个算法:
1。DDA(数值微分)法:


void CDDALineView::OnDraw(CDC* pDC)
{
    CDDALineDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int x,x0(200),y0(200),x1(500),y1(500);
    float dx,dy,y,k;
    dx=x1-x0;
    dy=y1-y0;
    k=dy/dx;
    y=y0;
    for(x=x0;x<=x1;x++)
    {
        pDC->SetPixel(x,(int)(y+0.5),RGB(255,0,0));
        y+=k;
    }
}


2.中点画线算法


void CMidpointLineView::OnDraw(CDC* pDC)
{
    CMidpointLineDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int a,b,d1,d2,d,x,y;
    int x0(200),x1(500),y0(200),y1(500);
    a=y0-y1;
    b=x1-x0;
    d=2*a+b;
    d1=2*a;
    d2=2*(a+b);
    x=x0;
    y=y0;
    pDC->SetPixel(x,y,RGB(0,255,0));
    while(x<x1)
    {
        if(d<0)
        {
            x++;
            y++;
            d+=d2;
        }
        else
        {
            x++;
            d+=d1;
        }
        pDC->SetPixel(x,y,RGB(0,255,0));
    }
}


3。Bresenham算法:


void CBresenhamline2View::OnDraw(CDC* pDC)
{
    CBresenhamline2Doc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int x0(200),y0(200),x1(500),y1(500);
    int x,y,dx,dy;
    dx=x1-x0;
    dy=y1-y0;
    int e=-dx;
    x=x0;
    y=y0;
    for(int i=0;i<=dx;i++)
    {
        pDC->SetPixel(x,y,RGB(0,0,255));
        x=x+1;
        e=e+2*dy;
        if(e>=0)
        {
            y++;
            e=e-2*dx;
        }
    }
}


二、中点画圆算法:


void CMidPointCircleView::OnDraw(CDC* pDC)
{
    CMidPointCircleDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    int r=100;            //半径
    int m(300),n(250);    //圆心坐标 
    int x,y;
    float d;
    x=0;
    y=0+r;
    d=1.25-r;
    //中点画圆算法

    pDC->SetPixel(m+x,n+y,RGB(255,0,0));
    pDC->SetPixel(m+y,n+x,RGB(255,0,0));
    pDC->SetPixel(m-x,n+y,RGB(255,0,0));
    pDC->SetPixel(m+y,n-x,RGB(255,0,0));
    pDC->SetPixel(m+x,n-y,RGB(255,0,0));
    pDC->SetPixel(m-y,n+x,RGB(255,0,0));
    pDC->SetPixel(m-x,n-y,RGB(255,0,0));
    pDC->SetPixel(m-y,n-x,RGB(255,0,0));
    while(x<=y)
    {
        if(d<0)
            d+=2*x+3;
        else
        {
            d+=2*(x-y)+5;
            y--;
        }
        x++;
        pDC->SetPixel(m+x,n+y,RGB(255,0,0));
        pDC->SetPixel(m+y,n+x,RGB(255,0,0));
        pDC->SetPixel(m-x,n+y,RGB(255,0,0));
        pDC->SetPixel(m+y,n-x,RGB(255,0,0));
        pDC->SetPixel(m+x,n-y,RGB(255,0,0));
        pDC->SetPixel(m-y,n+x,RGB(255,0,0));
        pDC->SetPixel(m-x,n-y,RGB(255,0,0));
        pDC->SetPixel(m-y,n-x,RGB(255,0,0));        
    }
}
分享到: 更多
©2018 安全焦点 版权所有.

  • 奚国华委员:新兴际华将党建六大优势转化为发展优势 2018-12-06
  • 创业女青年哈丽娟:世界是自己的 与他人没关系 2018-12-06
  • 移植2胚怀5胎 一针减3化风险 十堰市人民医院再创生命奇迹 2018-11-06
  • 首届妈祖信俗“立德”论坛成功举办 2018-10-25
  • 郧西男孩两条腿“长”在一起 十堰市人民医院手术整形帮他迈开双腿 2018-10-25
  • 重磅 江西省委副书记李炳军同志任省委党校校长 2018-10-19
  • 商务部新闻发言人对美白宫6月18日声明发表谈话 2018-10-12
  • 从献血条件,看看你的身体是否达标 2018-09-26
  • 全国“非遗”保护工作先进名单公布 2018-09-26
  • 储大同 中国医学科学院肿瘤医院首席科学家 2018-08-15
  • 【理上网来·喜迎十九大】扶贫也创新!十八大以来年均减贫人数超1300万 获历史突破 2018-08-15
  • 开创美丽中国建设新局面 2018-08-13
  • 毛泽东三游故宫看了些什么 2018-08-13
  • 独家视频:新时代来啦! 2018-08-12
  • 旅游市场再创佳绩端午假期河北接待游客2026.77万 揽金147.79亿 2018-08-12
  • 212| 111| 865| 411| 915| 108| 40| 756| 426| 30|