• VisualStudio实现任意情况bresenham画直线算法


      bresenham算法在计算机绘图时十分常用,其原理在网上都能找到,这里就不做赘述啦,很多小伙伴在网上找能在Visual Sudio MFC环境下实现的代码,总是遇到各种问题,不能正常运行,这里直接上能在VS上实现代码(亲测有效)。

       CDC * pDC = this->GetDC();
        int  dx, dy, x, y;
        int increment;
        bool if_xy_swap = false;
        if (abs(x1 - x0) < abs(y1 - y0))
        {   
            if_xy_swap = true;               
            swap(&x0, &y0);
            swap(&x1, &y1);
        }
        if (x0 > x1) {               
            swap(&x0, &x1);           
            swap(&y0, &y1);
        }
        increment = y0 < y1 ? 1 : -1;
        dx = x1 - x0;   
        dy = y1 - y0;
        int h = abs(2 * dy) - dx;
        if (if_xy_swap)
            pDC->SetPixel(y0, x0, RGB(255, 0, 0));
        else
            pDC->SetPixel(x0, y0, RGB(255, 0, 0));
        x = x0;     
        y = y0;
        while (x < x1)
        {
            
            if (h > 0) {
                h += abs(2 * dy) - 2 * dx;
                y += increment;
                if_xy_swap ? pDC->SetPixel(y, x, RGB(255, 0, 0)) : pDC->SetPixel(x, y, RGB(255, 0, 0));
            }
            else {
                h += abs(2 * dy);
                if_xy_swap ? pDC->SetPixel(y, x, RGB(255, 0, 0)) : pDC->SetPixel(x, y, RGB(255, 0, 0));
    
            }
            x++;
        }

    大家可以去执行下,应该是能成功实现(除了垂直的直线——代码较简单,没写在里面了)。

    注意:x0,y0,x1,y1分别是所画的直线两点的坐标,值在MFC对话框中传入。

    ------------------------------------------------------------------------

    (在下写博客,是记下平时学习程中常遇到的问题,代码中若有不合理之处,还望各位大佬指正)

  • 相关阅读:
    unity, texture import settings
    unity, 最简单的additive shader
    unity, shader input and output
    unity, multi pass shader中的surface pass
    unity, 荧光效果(bloom)
    unity, 查看内置shader源码
    unity, Find References In Scene
    unity 主循环
    unity 显示帧率
    HttpUrlConnection的setDoOutput与setDoInput的区别
  • 原文地址:https://www.cnblogs.com/djlobster/p/12917633.html
Copyright © 2020-2023  润新知