Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我需要在画布上画一个五颜六色的六边形_Javascript_Canvas - Fatal编程技术网

Javascript 我需要在画布上画一个五颜六色的六边形

Javascript 我需要在画布上画一个五颜六色的六边形,javascript,canvas,Javascript,Canvas,我需要在画布上画一个六边形,但每个边都需要不同的颜色 我不能只画边,因为我需要一个半径和旋转值 以图像为例 var canvas=document.querySelector(“canvas”); var ctx=canvas.getContext(“2d”); 功能圆(x、y、r、填充){ ctx.beginPath() 弧(x,y,r,0,数学π*2) 如果(填写){ ctx.fill(); }否则{ ctx.stroke(); } } 函数多边形(边、半径、填充、星形缠结){ if(st

我需要在画布上画一个六边形,但每个边都需要不同的颜色

我不能只画边,因为我需要一个半径和旋转值

以图像为例

var canvas=document.querySelector(“canvas”);
var ctx=canvas.getContext(“2d”);
功能圆(x、y、r、填充){
ctx.beginPath()
弧(x,y,r,0,数学π*2)
如果(填写){
ctx.fill();
}否则{
ctx.stroke();
}
}
函数多边形(边、半径、填充、星形缠结){
if(startAngle的类型==“未定义”){
var startAngle=-90;
}
可变角度=360/边;
ctx.beginPath();
对于(变量i=0;i游戏旋转){
对策r-=10;
}
}
window.requestAnimationFrame(绘制);
ctx.restore();
}
Draw();
document.onkeydown=函数(e){
开关(e.which){
案例39://右箭头
游戏旋转+=(360/6);
打破
案例37://左箭头
游戏旋转-=(360/6);
打破
}
}

跟踪
形状的位置、角度和每个角

然后在需要时使用
Math.cos
Math.sin
计算边:

var Shape=(函数(){
/**
*创建形状的实例。
*
*@param{ICoord}[position={x:0,y:0}]
*@param{ICoord[]}[points=[]]
*@param{number}[角度]
*
*形状不规则
*/
功能形状(位置、点、角度){
如果(位置===无效0){
职位={
x:0,,
y:0
};
}
如果(点===无效0){
点数=[];
}
这个位置=位置;
这个点=点;
这个角度=0;
如果(角度!=无效0){
这是设定角(角度);
}
}
Shape.degreetoRadian=函数(度){
返回度*(数学PI/180);
};
/**
*从位置、半径、顶点数和角度(以度[0;360]为单位)创建形状
*
*@静态
*@param{ICoord}[position={x:0,y:0}]
*@param{number}[radius=10]
*@param{number}[stops=4]
*@param{number}[angle=0]
*@returns{Shape}
*
*形状不规则
*/
Shape.poly=函数(位置、半径、停止、角度){
如果(位置===无效0){
职位={
x:0,,
y:0
};
}
如果(半径===void 0){
半径=10;
}
如果(停止===无效0){
停止=4次;
}
如果(角度===无效0){
角度=0;
}
var点=[];
对于(var指数=0;指数<360;指数+=(360次/次)){
点。推({
x:Math.cos(这个度数弧度(索引))*半径,
y:Math.sin(这个.度数弧度(索引))*半径
});
}
返回新形状(位置、点、角度);
};
/**
*将角度设置为介于0和360之间的值
*
*@param{number}[value=this.angle]
*@returns{Shape}
*
*形状不规则
*/
Shape.prototype.setAngle=函数(值){
如果(值===void 0){
值=此角度;
}
this.angle=Math.abs(值)%360;
归还这个;
};
/**
*将点分解为直线,旋转以匹配形状的方向
*
*@returns{{start:{x:number,y:number},end:{x:number,y:number}[]}
*
*形状不规则
*/
Shape.prototype.getLines=函数(){
varθ=形状度弧度(该角度);
var边缘=[];
for(var indexa=0;indexa>测试
//多姆
var c=document.createElement(“画布”);
c、 宽度=100;
c、 高度=100;
文件.正文.附件(c);
var ctx=c.getContext(“2d”);
//形状
var图纸=[
形状多边形({
x:50,
y:50
}, 50, 6, 360 / 12),
形状多边形({
x:50,
y:50
}, 30, 6),
形状多边形({
x:50,
y:50
}, 30, 3)
];
//渲染
var颜色=[“红色”、“绿色”、“黄色”、“蓝色”、“洋红”];
var区间;
间隔=设置间隔(函数(){
ctx.clearRect(0,0,c.宽度,c.高度);
对于(变量drawingIndex=0;drawingIndex}, 1000 / 60);似乎你忘了在问题中包含一个问题。为什么我不能只画边,因为我还需要一个半径和旋转值。有什么变化吗?向我们展示如何使用单一颜色,我们将能够非常快速地帮助您。以下是我目前正在做的,但我如何以不同的方式绘制每条边:您必须分两步完成:存储所有多边形的点;然后,为每个点创建一条新路径,移动到(它)和线到(下一个)或用你的笔:通过填充等腰梯形。感谢你的回答,尽管是一个快速的问题,你如何防止角看起来像是两条线与此解决方案相交?我不完全确定你的意思,因为我的解决方案是直线相交。如果要修改线端点,可以设置?