结合前几节的教程,模拟了一个定时滚动的齿轮,分享一下,共同进步。
window.onload = function() {
var canvas = document.getElementById("start-canvas");
canvas.width = 800;
canvas.height = 800;
var ctx = canvas.getContext('2d');
let a = 0
var timer = setInterval(function() {
a++;
if (a <= 20) {
ctx.clearRect(0, 0, canvas.width, canvas.height);
mutiStart(ctx, 400, 400, 300, 150, 18, 5, 18 * a)
} else {
a = 0;
clearInterval(timer);
}
}, 1000)
}
/**
* @param {Object} ctx
* @param {Object} x Star的X轴偏移量
* @param {Object} y Star的y轴偏移量
* @param {Object} R 外圆半径
* @param {Object} r 内圆半径
* @param {Object} rot Star旋转度数(顺时针)
* @param {Object} multi 几边形
* @param {Object} angel Star旋转度数(逆时针)
*/
function mutiStart(ctx, x, y, R, r, rot, multi, angel) {
ctx.beginPath();
ctx.fillStyle = "#F1FA0C";
ctx.strokeStyle = "#F1FA0C";
for (var i = 0; i < multi; i++) {
ctx.lineTo(Math.cos((angel + (360 / multi) * i - rot) / 180 * Math.PI) * R + x,
y - Math.sin((angel + (360 / multi) * i - rot) / 180 * Math.PI) * R
)
ctx.lineTo(Math.cos((angel + 360 / (multi * 2) + (360 / multi) * i - rot) / 180 * Math.PI) * r + x,
y - Math.sin((angel + 360 / (multi * 2) + (360 / multi) * i - rot) / 180 * Math.PI) * r
)
}
ctx.closePath();
ctx.fill();
ctx.stroke();
}
画五角星代码
五角星坐标图示
画了个美队的盾牌:
喜欢这样的五角星
函数绘制。
许多图形的绘制可以基于圆形来找到基准位置
五角星顶点坐标计算
画一个五角星
封装五角星函数
画一个五角星
给五角星函数加上旋转的角度
完整五角星源代码
动态指定五角星的十个点
需要理解清楚这两句的来源
角度转弧度需要除以180*π
在直角坐标系上,当角<90°,以你要测得角作为三角形的一个角,你可以画出一个直角三角形,取得一系列坐标(坐标正负保留)这个角的
对边除以斜边就是sin值,
这个角的临边除以斜边就是这个角的cos值,
大于90小于180,取它补角,然后用x坐标除以y坐标这是在角在极限情况下可以取到1或者-1
三角函数确定五角星的点的坐标
五角星绘制
画star,按照三角函数来算
五角星的凹点在内圆上,凸点在外圆上。
canvas画布的坐标系相较于笛卡尔坐标系X轴正指向不变,Y轴正方向向下
五角星绘制
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<canvas id="canvas" style="border: 1px solid black;display: block;margin:10px auto;"></canvas>
<script type="text/javascript">
window.onload=function(){
var c=document.getElementById("canvas");
c.width=800;
c.height=800;
var context=c.getContext("2d");
//调用函数
drawStar(context,200,300,400,400,15);
}
//封装一个绘制五角星的函数
/*参数说明
* ctx:为canvas上下文环境变量
* r:小圆半径
* R;大圆半径
* x,y:为五角心中心坐标
* rot:旋转角度
*/
function drawStar(ctx,r,R,x,y,rot){
ctx.beginPath();
for(var i=0;i<5;i++){
ctx.lineTo(Math.cos((18+i*72-rot)/180*Math.PI)*R+x,//角度转换为弧度
-Math.sin((18+i*72-rot)/180*Math.PI)*R+y);
ctx.lineTo(Math.cos((54+i*72-rot)/180*Math.PI)*r+x,
-Math.sin((54+i*72-rot)/180*Math.PI)*r+y);
}
ctx.closePath();
ctx.lineWidth=10;
ctx.stroke();
}
</script>
</body>
</html>