这篇文章将为大家详细讲解有关帆布如何实现一个六边形能力图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
<强>一、前言强>
六边形能力图如下,由6个六边形组成,每一个顶点代表其在某一方面的能力。这篇文章我们就来看看如何基于画布去绘制这么一个六边形能力图。当然,你也可以基于其他开源的js方案来实现,如EChars。js等。
如上图,绘制一个六边形有以下几个关键点:
1。紫色矩形区域我们可以看成是帆布的画布。其大小可以认为是(宽度、高度).center (centerX centerY)是其中心点,即(宽/2,高/2).
2。绘制六边形的关键是计算出它的6个顶点的坐标。而如上图所示,这里面最关键的又是计算出六边形所在矩形区域的左上角坐标(左)。对照上图,(左)的计算公式如下。
要计算出(左)需要先计算出x, y,而x, y的值与六边形的边长有关。
3。如上的x, y的计算公式为
4。因此,X1 (X1, y1, X2 (X2, y2), X3 (X3, y3), X4 (X4, y4), X5 (X5,日元),X6 (X6,日元)的坐标计算为
因此,得到绘制六边形的代码为:
function computeHexagonPoints(宽度、高度,祝福;边缘),{ ,,,let centerX =, width /, 2; ,,,let centerY =, height /, 2; ,,,let x =, edge *, Math.sqrt (3),/, 2; ,,,let left =, centerX 作用;x; ,,,let x1, x2, x3, x4, x5, x6; ,,,let y1, y2, y3、y4,日元,日元; ,,,x5 =, x6 =,离开; ,,,x2 =, x3 =, left +, x *, 2; ,,,x1 =, x4 =, left +, x; ,,,let y =, edge /, 2; ,,,let top =, centerY 作用;2,*,y; ,,,y1 =,最高; ,,,y2 =, y6 =, top +, y; ,,,y3 =, y5 =, top +, 3, *, y; ,,,y4 =, top +, 4, *, y; ,,,let points =, new 数组(); ,,,点[0],=,(x1, y1); ,,,点[1],=,(x2, y2); ,,,点[2],=,(x3,, y3); ,,,点[3],=,(x4, y4); ,,,点[4],=,(x5,日元); ,,,点[5],=,(x6,日元); ,,,return 点; 以前,,}><强>三,绘制六维能力图强>
, <强> 3.1绘制6个六边形强>
基于画布上绘制,首先就是需要获取背景。
_context =, canvas.getContext (& # 39; 2 d # 39;);而绘制的话,已经知道6个顶点了,那只需要将这6个点用连线的方式连接起来就可以了。主要用到函数(x, y)和画线(x, y)两个方法。这里总共需要绘制6个六边形,那只要按等比例减小边的值就可以了。因此绘制六边形能力图的主要代码如下。
function drawHexagonInner(边缘),{ ,,,_context.strokeStyle =, _color; ,,,for (var 小姐:=,0;,小姐:& lt;, 6;,我+ +),{ ,,,,,_allPoints[我],=,computeHexagonPoints (_width, _height,, edge 作用;小姐:*,edge /, 5); ,,,,,_context.beginPath (); ,,,,,_context.moveTo (_allPoints[我][5][0],_allPoints[我][5][1]); ,,,,,for (var j =, 0;, j & lt;, 6。, j + +), { ,,,,,,,_context.lineTo (_allPoints[我][j] [0], _allPoints[我][j] [1]); ,,,,,} ,,,,,_context.closePath (); ,,,,,_context.stroke (); ,,,} 以前,,}>代码中还有3个相关的API.beginPath()和closePath()主要就是绘制得到一个封闭的路径.stroke()主要是得到一个镂空的形状。当然,相应的就有填满()得到填充的形状。
3.2绘制3条直线
帆布如何实现一个六边形能力图