码迷,mamicode.com
首页 > 其他好文 > 详细

多边形绘制

时间:2015-11-17 23:15:47      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

代码部分

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是由封闭区域向外引虚构的射线,如果穿过的线段就填充,很明显,从封闭区向外引线就一定会穿过线段。

多边形绘制

标签:

原文地址:http://www.cnblogs.com/qbin/p/4973165.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!