关键词搜索

源码搜索 ×
×

canvas笔记-画一个五角星(含算法)

发布2020-05-31浏览2475次

详情内容

算法如下:

上面的图是正三角形:

说下算法,关于上面那些x,y是怎么算出来的。

这里大圆的5个顶点,每个顶点占用的角度为360/5 = 72度,左边那个18度是通过90 - 72 = 18度。

大圆半径为R,所以

x为cos(18度) * R

y为-sin(18度) * R

这个负是因为坐标y,是因为向下为正。

其他角度通过加72度就可以了!

 

下面来看下那个54度是怎么算的!

72 * 2 - 90 = 54度,同样半径为r

x为cos(54度) * r

y为-sin(54度) * r

其他角度通过加72度就可以了!

 

如果要旋转角度,只要画点时,每个点加一个对应的角度即可!

 

下面是代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <body>
  8. <canvas id="canvas" style="border:1px solid #aaa;display:block;margin:50px auto;">
  9. 当前浏览器不支持Canvas,请更换浏览器后再试
  10. </canvas>
  11. <script>
  12. window.onload = function() {
  13. let canvas = document.getElementById("canvas");
  14. canvas.width = 800;
  15. canvas.height = 800;
  16. let context = canvas.getContext("https://cdn.jxasp.com:9143/image/2d");
  17. context.lineWidth = 10;
  18. drawStar(context, 150, 300, 400, 400, 0);
  19. }
  20. function drawStar(cxt, r, R, x, y, rot){
  21. cxt.beginPath();
  22. for(let i = 0; i < 5; i++){
  23. cxt.lineTo(Math.cos((18 + i * 72 - rot) / 180 * Math.PI) * R + x,
  24. -Math.sin((18 + i * 72- rot) / 180 * Math.PI) * R + y);
  25. cxt.lineTo(Math.cos((54 + i * 72 - rot) / 180 * Math.PI) * r + x,
  26. -Math.sin((54 + i * 72 - rot) / 180 * Math.PI) * r + y);
  27. }
  28. cxt.closePath();
  29. cxt.stroke();
  30. }
  31. </script>
  32. </body>
  33. </html>

程序运行截图如下:

这里有一个要注意的,就是cos里面要传弧度,下面是度和弧度转换的格式:

1弧度=180/pai 度

1度=pai/180 弧度

 

 

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载