• 多边形绘制


    代码部分

    CRect rect;
    GetClientRect(rect);
    pDC->SetMapMode(MM_ANISOTROPIC);
    pDC->SetWindowExt(rect.Width(), rect.Height());
    pDC->SetViewportExt(rect.Width(), -rect.Height());
    pDC->SetViewportOrg(rect.Width()/2, rect.Height()/2);

    CPen PenBlue(PS_SOLID, 5, RGB(0, 0, 255));
    CPen *pOldPen = pDC->SelectObject(&PenBlue);

    CBrush brushRed(RGB(255, 0, 0));
    CBrush *pOldBrush = pDC->SelectObject(&brushRed);

    pDC->SetPolyFillMode(ALTERNATE);

    int r = 200;
    CPoint p[5];
    double Alpha = 2 * PI / 5;
    for (int i = 0; i < 5; i++)
    {
    p[i].x = Round(r * cos(i * Alpha));
    p[i].y = Round(r * sin(i * Alpha));
    }

    // double Beta=2*PI/5;//定义每条边的转角β
    // double Alpha=PI/10;//定义起始角α
    // for(int i=0;i<5;i++)
    // {
    // p[i].x=Round(r*cos(i*Beta+Alpha));//计算正五边形顶点坐标
    // p[i].y=Round(r*sin(i*Beta+Alpha));
    // }

    CPoint v[5];
    v[0] = p[0]; v[1] = p[2]; v[2] = p[4]; v[3] = p[1]; v[4] = p[3];
    pDC->Polygon(v, 5);
    pDC->SelectObject(pOldPen);
    pDC->SelectObject(pOldBrush);

    代码中注释的那部分和其上面的功能一样,只是它绘的五角星是正绘的。

    “Polygon(v, 5);”这个函数是用来绘多边形的,一笔绘,这个很重要,不然“v[0] = p[0]; v[1] = p[2]; v[2] = p[4]; v[3] = p[1]; v[4] = p[3];”可能看不懂。

    “SetPolyFillMode(ALTERNATE);”两种填充方式。ALTERNATE是扫描线,填奇偶相邻的线段之间的封闭区域;WINDING是由封闭区域向外引虚构的射线,如果穿过的线段就填充,很明显,从封闭区向外引线就一定会穿过线段。

  • 相关阅读:
    IOS中UIImage用代码压缩
    自定义UILabel设置垂直方向的居上,居中,居下
    IOS开发之数据加密与解密:AES256+Base64转码
    IOS开发之网络数据Json处理
    Unity3d中CharacterController的移动和碰撞分析
    关于Unity3d中物体之间碰撞检测的方法
    WPF 调用Win32控件
    C# 扩展方法
    颜色空间转换 RGB到HSV
    加速计算技术-- Intel 的IPP库
  • 原文地址:https://www.cnblogs.com/qbin/p/4973165.html
Copyright © 2020-2023  润新知