多边形绘制

代码部分

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

时间: 2024-10-04 15:43:56

多边形绘制的相关文章

opengl基础学习专题 (三) 多边形绘制的几种样式

题外话 聪明人之所以不会成功,是由于他们缺乏坚韧的毅力. ——艾萨克·牛顿(1643年1月4日—1727年3月31日)英国 也许可以理解为 想更深一步的时候,坚持,努力和聪明缺一不可. 挺直腰杆在此向您致敬,愿您仍在天国 仍潇洒的思索着,奔跑着. 正文 在第二课中,我们学习了如何绘制几何图形,但大家如果多写几个程序,就会发现其实还是有些郁闷之处. 例如:点太小,难以看清楚:直线也太细,不舒服:或者想画虚线,但不知道方法只能用许多短直线,甚至用点组合而成. 这些问题将在本课中被解决. 下面就点.直

百度地图多边形绘制之多边形预判

js文件:https://pan.baidu.com/s/1hsIR8Ni 百度地图提供了多边形绘制的功能,但是对于不符合多边形规则的图形却没有做限制:   所以我们在绘制的时候需要判断当前绘制的图形是否是多边形: 1:下载百度地图开源库里面的鼠标绘制工具条库:DrawingManager.js 2:找到DrawingManager.prototype._bindPolylineOrPolygon方法里面的startAction方法,在我们绘制的时候会触发该方法,在startAction里我们会

[原]OpenGL基础教程(二)多边形绘制

上篇介绍了最基本的三角形绘制,本篇介绍如何使用索引的方式绘制多边行. 为什么要使用索引方式,总体来说提高性能.如何提高:使用顶点数组的好处是避免大量的函数调用.即避免每画一个顶点就调用1次glVertex*(). 另一个好处是避免多边形相邻顶点的冗余指定.例如正方体,分别描述6个正方形,会造成每个顶点被重复描述3次. 如果以上没有说服力,看看这个, gl.Begin(),gl.End()对是一种低效的方式,因此opengl es干脆不再支持他们了,同时高版本的opengl都在弃用gl.Begin

[原]OpenGL基础教程(一)多边形绘制

1.opengl开发环境搭建 参考http://brothergrup.iteye.com/blog/1602471 2.为三角形填充颜色: 填充颜色函数为glColor(3/4)*(r,g,b)  3或4 表示 rgb/rgba;* 表示rgba的数值类型(b,i..) 最终都会被映射到[0-1]. 如何映射的呢 就是拿写的值/当前类型最大值 比如byte是-128~127 glColor3b(1,0,0) 等价于 glColor3f(1/127f,0,0)  小于0的 就当0处理 void

[WebGL入门]十四,绘制多边形

注:文章译自http://wgld.org/,原作者杉本雅広(doxas),文章中如果有我的额外说明,我会加上[lufy:],另外,鄙人webgl研究还不够深入,一些专业词语,如果翻译有误,欢迎大家指正. 这是本次的demo的运行结果 绘制流程 这次终于该绘制多边形了,之前的文章(十一,着色器的编译和连接)中介绍了HTML,顶点着色器和片段着色器,这次看一下javascript从开始到最终的全部处理.如果前两篇文章介绍的内容完全理解的话,这次的内容也应该不难了.或许会有不容易理解的地方,不要着急

第02课 OpenGL 多边形

你的第一个多边形: 在第一个教程的基础上,我们添加了一个三角形和一个四边形.也许你认为这很简单,但你已经迈出了一大步,要知道任何在OpenGL中绘制的模型都会被分解为这两种简单的图形.读完了这一课,你会学到如何在空间放置模型,并且会知道深度缓存的概念. 第一课中,我教您如何创建一个OpenGL窗口.这一课中,我将教您如何创建三角形和四边形.我们讲使用来创建GL_TRIANGLES一个三角形,GL_QUADS来创建一个四边形. 在第一课代码的基础上,我们只需在DrawGLScene()过程中增加代

OpenGL(三)之基础绘制篇

本文将会介绍使用OpenGL进行点,线,三角形乃至多边形的绘制,,, 下图是采用不同类型的图形效果 一.点 点”是一切的基础. OpenGL提供了一系列函数指定一个点.它们都以glVertex开头,后面跟一个数字和1~2个字母. 例如: glVertex2d glVertex2f glVertex3f glVertex3fv 等等. 数字表示参数的个数:2表示有两个参数,3表示三个,4表示四个. 字母表示参数的类型: s表示16位整数(OpenGL中将这个类型定义为GLshort), i表示32

cocos2d-js中多边形画线出现突刺的问题(drawNode)

今天在项目中有个玩家属性雷达图的画图需求,当我把五个维度对应的点数组传入drawPoly函数中时,出现了如下的现象,查了半天,网上没有相关的问题解答,我就在群里请教,有位大神说这个是数组的点有重合的,所以会出现这样的问题,我测试了下,确实是这样的,后来我就对数组进行了判断,有相等的我就给他自增一下,结果发现当两个点的距离很近的时候也会出现这个问题! this.drawNode.drawPoly(dotsArr, cc.color.RED, 1, cc.color.YELLOW); 总结: 1,多

python-openCV 绘制图形

文档链接:https://docs.opencv.org/trunk/dc/da5/tutorial_py_drawing_functions.html 文档描述了OpenCV的几个绘图功能: 绘制圆 绘制矩形 绘制直线 绘制椭圆 绘制多边形 绘制文字 以绘制直线演示一下: import cv2 import numpy as np from matplotlib import pyplot as plt gray = np.zeros((512,512),np.uint8)#生成一个空灰度图像