JavaScript Canvas 弧教程
最后修改于 2025 年 4 月 3 日
在本文中,我们探讨 JavaScript 中的 Canvas 弧方法。这些方法对于在 HTML canvas 上绘制圆、弧和饼图至关重要。掌握弧形对于创建圆形图形和可视化至关重要。
基本定义
Canvas 弧是指圆周的片段。arc 方法可以绘制完整的圆、部分圆和饼形楔形。弧形由中心点、半径、起始角和结束角以及方向定义。
主要的 arc 方法是 arc()
,它创建一个圆形弧。arcTo()
方法在两个切线之间创建弧。角度以弧度测量(完整圆为 0 到 2π)。
基本圆绘制
此示例演示了如何在 canvas 上绘制一个简单的圆。
<!DOCTYPE html> <html> <head> <title>Basic Canvas Circle</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(150, 100, 50, 0, Math.PI * 2); ctx.strokeStyle = 'blue'; ctx.lineWidth = 3; ctx.stroke(); </script> </body> </html>
在这个基本示例中,我们创建了一个 canvas 元素并获取其 2D 渲染上下文。我们开始一个路径并调用 arc()
方法来定义一个圆。
弧形中心位于 (150,100),半径为 50。角度从 0 到 2π (Math.PI * 2) 创建一个完整的圆。然后我们用蓝色和 3px 的宽度描边路径。
部分弧绘制
此示例展示了如何绘制一个部分弧(一个半圆)。
<!DOCTYPE html> <html> <head> <title>Partial Arc</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(150, 100, 60, 0, Math.PI); // 0 to π radians (180 degrees) ctx.strokeStyle = 'red'; ctx.lineWidth = 5; ctx.stroke(); </script> </body> </html>
在这里,我们通过指定从 0 到 π 弧度(180 度)的角度来绘制一个半圆。弧形中心位于 (150,100),半径为 60 像素。
请注意,弧形是从起始角到结束角顺时针绘制的。为了更好的可见性,线条样式为红色和 5px 宽度。
填充弧(饼图切片)
此示例演示了如何创建一个填充的饼图切片。
<!DOCTYPE html> <html> <head> <title>Filled Pie Slice</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.moveTo(150, 100); // Center point ctx.arc(150, 100, 70, 0, Math.PI / 2); // 0 to 90 degrees ctx.closePath(); // Connect back to center ctx.fillStyle = 'rgba(0, 128, 0, 0.7)'; ctx.fill(); ctx.strokeStyle = 'darkgreen'; ctx.stroke(); </script> </body> </html>
这通过首先移动到中心点,然后绘制一个 90 度弧(0 到 π/2 弧度),然后将路径闭合回中心点来创建饼图切片。
切片以半透明的绿色填充,并以深绿色勾勒。此技术对于创建饼图和圆形图很有用。
逆时针弧
此示例展示了如何以逆时针方向绘制弧形。
<!DOCTYPE html> <html> <head> <title>Counter-Clockwise Arc</title> </head> <body> <canvas id="myCanvas" width="300" height="200"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); ctx.beginPath(); ctx.arc(150, 100, 60, 0, Math.PI / 2, true); // Counter-clockwise ctx.strokeStyle = 'purple'; ctx.lineWidth = 4; ctx.stroke(); // Draw reference lines ctx.beginPath(); ctx.moveTo(150, 100); ctx.lineTo(210, 100); ctx.moveTo(150, 100); ctx.lineTo(150, 40); ctx.strokeStyle = 'gray'; ctx.stroke(); </script> </body> </html>
这里的关键区别在于 arc()
的第六个参数设置为 true,这使得弧形以逆时针方向绘制。我们还绘制了参考线来可视化角度。
灰色线条显示了弧形的起始(3 点钟位置)和结束(12 点钟)点。紫色弧形沿与默认顺时针行为相反的方向绘制。
ArcTo 方法示例
此示例演示了 arcTo()
方法用于创建圆角。
<!DOCTYPE html> <html> <head> <title>arcTo Method</title> </head> <body> <canvas id="myCanvas" width="400" height="300"></canvas> <script> const canvas = document.getElementById('myCanvas'); const ctx = canvas.getContext('2d'); // Draw a rectangle with rounded corner using arcTo ctx.beginPath(); ctx.moveTo(50, 50); ctx.lineTo(250, 50); ctx.arcTo(300, 50, 300, 100, 50); // Top-right corner ctx.lineTo(300, 200); ctx.arcTo(300, 250, 250, 250, 50); // Bottom-right corner ctx.lineTo(50, 250); ctx.arcTo(0, 250, 0, 200, 50); // Bottom-left corner ctx.lineTo(0, 100); ctx.arcTo(0, 50, 50, 50, 50); // Top-left corner ctx.closePath(); ctx.strokeStyle = 'orange'; ctx.lineWidth = 3; ctx.stroke(); </script> </body> </html>
arcTo()
方法在两条线(切线)之间创建弧。它接受五个参数:两个控制点、一个终点和一个半径。
此示例绘制了一个所有四个角都圆化的矩形。每个角使用 50px 半径的 arcTo()
。该方法自动计算平滑连接线的弧形。
来源
在本文中,我们探索了在 HTML canvas 上绘制弧形和圆形的各种技术。这些方法对于在 Web 应用程序中创建圆形图形、饼图和圆角形状至关重要。
作者
列出 所有 JS Canvas 教程。