关键词搜索

源码搜索 ×
×

canvas笔记-使用canvas画圆及点阵的使用

发布2020-05-27浏览1548次

详情内容

如下例子:

  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" width="1024" height="768" 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. let context = canvas.getContext("https://cdn.jxasp.com:9143/image/2d");
  15. context.lineWidth = 5;
  16. context.strokeStyle = "#005588";
  17. context.arc(300, 300, 200, 0.5 * Math.PI, 1.5 * Math.PI, true);
  18. context.stroke();
  19. }
  20. </script>
  21. </body>
  22. </html>

程序运行截图如下:

这里首先要介绍一个函数:arc()他的参数依此如下:

arc(圆心X轴, 圆心Y轴, 圆半径, 画圆的起始位置, 画圆的结束位置, 最后是个缺省值默认是false为逆时针画圆)

arc中画起始位置和结束位置填写xxpi就可以了。

 

如果要封口如下面的效果:

需要将其进行beginPath()及closePath()即可

代码如下:

  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" width="1024" height="768" 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. let context = canvas.getContext("https://cdn.jxasp.com:9143/image/2d");
  15. context.lineWidth = 5;
  16. context.strokeStyle = "#005588";
  17. context.beginPath();
  18. context.arc(300, 300, 200, 0.5 * Math.PI, 1.5 * Math.PI, true);
  19. context.closePath();
  20. context.stroke();
  21. }
  22. </script>
  23. </body>
  24. </html>

再如下的例子

源码如下:

  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" width="1024" height="768" 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. let context = canvas.getContext("https://cdn.jxasp.com:9143/image/2d");
  15. context.lineWidth = 5;
  16. context.strokeStyle = "#005588";
  17. for(let i = 0; i < 10; i++){
  18. context.beginPath();
  19. context.arc(50 + i * 100, 60, 40, 0, 2 * Math.PI * (i + 1) / 10);
  20. context.closePath();
  21. context.stroke();
  22. }
  23. }
  24. </script>
  25. </body>
  26. </html>

下面是点阵相关的例子,

截图如下:

源码如下:

test.js

  1. ;
  2. digit = [
  3. [
  4. [0, 0, 1, 1, 1, 0, 0],
  5. [0, 1, 1, 0, 1, 1, 0],
  6. [1, 1, 0, 0, 0, 1, 1],
  7. [1, 1, 0, 0, 0, 1, 1],
  8. [1, 1, 0, 0, 0, 1, 1],
  9. [1, 1, 0, 0, 0, 1, 1],
  10. [1, 1, 0, 0, 0, 1, 1],
  11. [1, 1, 0, 0, 0, 1, 1],
  12. [0, 1, 1, 0, 1, 1, 0],
  13. [0, 0, 1, 1, 1, 0, 0]
  14. ]
  15. ];
  16. let WINDOW_WIDTH = 1024;
  17. let WINDOW_HEIGHT = 768;
  18. let RADIUS = 8;
  19. let MARGIN_TOP = 60;
  20. let MARGIN_LEFT = 30;
  21. window.onload = function () {
  22. let canvas = document.getElementById("canvas");
  23. let context = canvas.getContext("https://cdn.jxasp.com:9143/image/2d");
  24. canvas.width = WINDOW_WIDTH;
  25. canvas.height = WINDOW_HEIGHT;
  26. render(context);
  27. }
  28. function render(cxt) {
  29. let zero = 0;
  30. cxt.fillStyle = "rgb(0, 102, 153)";
  31. for(let i = 0; i < digit[0].length; i++){
  32. for(let j = 0; j < digit[0][i].length; j++){
  33. if(digit[0][i][j] == 1){
  34. cxt.beginPath();
  35. cxt.arc(MARGIN_TOP + j * 2 * (RADIUS + 1) + (RADIUS + 1), MARGIN_LEFT + i * 2 * (RADIUS + 1) + (RADIUS + 1), RADIUS, 0, 2 * Math.PI);
  36. cxt.closePath();
  37. cxt.fill();
  38. }
  39. }
  40. }
  41. }

canvas2.html

  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 src="js/test.js"></script>
  12. </body>
  13. </html>

这里有一点要提醒的也就是最大的问题是画点阵的圆心坐标

如下面这个点阵:

  1. [0, 0, 1, 1, 1, 0, 0],
  2. [0, 1, 1, 0, 1, 1, 0],
  3. [1, 1, 0, 0, 0, 1, 1],
  4. [1, 1, 0, 0, 0, 1, 1],
  5. [1, 1, 0, 0, 0, 1, 1],
  6. [1, 1, 0, 0, 0, 1, 1],
  7. [1, 1, 0, 0, 0, 1, 1],
  8. [1, 1, 0, 0, 0, 1, 1],
  9. [0, 1, 1, 0, 1, 1, 0],
  10. [0, 0, 1, 1, 1, 0, 0]

如:

i表示横轴,

j表示纵轴,

R为圆的半径,

R+1为比半径多1点的空格,让每个圆都独立,

那么第(i, j)个圆的圆心位置:

  1. centerX:j * 2 * (R + 1) + (R + 1)
  2. centerY:i * 2 * (R + 1) + (R + 1)

如果要搞一排的点阵,只需将centerX平移下,将centerY平移下,如

  1. centerX:100 + j * 2 * (R + 1) + (R + 1)
  2. centerY:200 + i * 2 * (R + 1) + (R + 1)

 

相关技术文章

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

提示信息

×

选择支付方式

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