canvas绘制--圆角多边形
context.arcTo()
arcTo() 方法在画布上创建介于两个切线之间的弧/曲线。
| JavaScript 语法: | context.arcTo(x1,y1,x2,y2,r); |
|---|
参数描述
| 参数 | 描述 |
|---|---|
| x1 | 弧的起点的 x 坐标。 |
| y1 | 弧的起点的 y 坐标。 |
| x2 | 弧的终点的 x 坐标。 |
| y2 | 弧的终点的 y 坐标。 |
| r | 弧的半径。 |
使用如下:
var c=document.getElementById("myCanvas");
var ctx=c.getContext("2d");
ctx.beginPath();
ctx.moveTo(20,20); // 创建开始点
ctx.lineTo(100,20); // 创建水平线
ctx.arcTo(150,20,150,70,50); // 创建弧
ctx.lineTo(150,120); // 创建垂直线
ctx.stroke(); // 绘制
上述代码绘制效果如下:
起点A,先画一条线AB,使用arcTo声明另外一条线CD,那么BC和CD组成一个夹角,arcTo绘制半径为50的圆弧,然后连接到E点

如果把创建弧的C点坐标改一下(150,0):ctx.arcTo(150,0,150,70,50);
如下图看到因为半径大,所以圆弧会撑开,圆弧的起点撑到了BC的线段的反向延长线上

我们把半径改小到20,ctx.arcTo(150,0,150,70,20)
如下图:

绘制圆角多边形
理解了arcTo画弧的逻辑,我们回到绘制圆角多边形的话题
需求简述如下图,三角形ABC,我们绘制成圆角,顶点处是个圆弧。

知道多半形顶点坐标,利用canvas的api方法 arcTo() 就可以实现了。
一个绘制圆角多边形简单的实现:
1 <!DOCTYPE html>
2 <html lang="en">
3
4 <head>
5 <meta charset="UTF-8" />
6 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7 <title>Document</title>
8 <style>
9 #canvas {
10 width: 400px;
11 height: 400px;
12 }
13 </style>
14 </head>
15
16 <body>
17 <canvas id="canvas" width="800" height="800"></canvas>
18 </body>
19 <script>
20 function draw() {
21 const p = [
22 [15, 20],
23 [20, 200],
24 [200, 300],
25 [300, 100],
26 [200, 20],
27 ];
28 const p1 = [
29 [300,50],
30 [400,50],
31 [350,150]
32 ]
33 const canvas = document.getElementById("canvas");
34 const ctx = canvas.getContext("2d");
35 drawRect(p, 30, ctx);
36 drawRect(p1, 10, ctx);
37 }
38
39 function drawRect(p, radius, ctx) {
40 ctx.beginPath();
41 const startPoint = [
42 (p[0][0] + p[p.length - 1][0]) / 2,
43 (p[0][1] + p[p.length - 1][1]) / 2,
44 ];
45 ctx.moveTo(...startPoint);
46 for (let i = 0; i < p.length; i++) {
47 if (i === p.length - 1) {
48 ctx.arcTo(...p[p.length - 1], ...p[0], radius);
49 } else {
50 ctx.arcTo(...p[i], ...p[i + 1], radius);
51 }
52 }
53 ctx.closePath();
54 ctx.stroke();
55 }
56 window.onload = function() {
57 draw();
58 };
59 </script>
60
61 </html>
实现效果如下图:

canvas绘制--圆角多边形的更多相关文章
- [原译]WPF绘制圆角多边形
原文:[原译]WPF绘制圆角多边形 介绍 最近,我发现我需要个圆角多边形.而且是需要在运行时从用户界面来绘制.WPF有多边形.但是不支持圆角.我搜索了一下.也没找到可行的现成例子.于是就自己做吧.本文 ...
- canvas绘制圆角头像
如果你想绘制的网页包含一个圆弧形的头像的canvas图片,但是头像本身是正方形的,需要的方法如下:首先, 拿到头像在画布上的坐标和宽高:(具体怎么获取不在此做具体介绍) 使用canvas绘制圆弧动画 ...
- canvas 绘制圆角矩形
<!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas</ ...
- JavaScript+canvas 绘制多边形
效果图: <body> <canvas id="square" width="500"></canvas> <canv ...
- canvas绘制多边形
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 小程序canvas绘制纯色圆角区域 setdata数组某一项
小程序canvas绘制纯色圆角区域: //方法: roundRectPath:function(ctx, x, y, w, h, r) { ctx.beginPath(); ctx.moveTo(x ...
- Canvas学习:封装Canvas绘制基本图形API
Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习 从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...
- 学习笔记:HTML5 Canvas绘制简单图形
HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...
- Canvas绘制图形
1.Canvas绘制一个蓝色的矩形 <!DOCTYPE html> <html> <head lang="en"> <meta chars ...
- HTML5 Canvas自定义圆角矩形与虚线(Rounded Rectangle and Dash Line)
HTML5 Canvas自定义圆角矩形与虚线(RoundedRectangle and Dash Line) 实现向HTML Canvas 2d context绘制对象中添加自定义的函数功能演示,如何 ...
随机推荐
- 【Python后端开发】Flask之ORM数据库操作
一.前言 ORM 对象映射关系程序. 通过orm将编程语言的对象模型和数据库的关系模型建立映射关系,这样我们在使用编程语言对数据库进行操作的时候可以直接使用编程语言的对象模型进行操作就可以了,而不用直 ...
- Kubernetes-9:Service介绍及演示
Service Kubernetes 的Service定义了这样一种抽象:一个 Pod 的逻辑分组,一种可以访问他们的策略 -- 微服务,这一组Pod能够被Service访问到,通常是通过tabel ...
- 【YashanDB知识库】绑定参数,同一个sql多个执行计划的问题
问题现象 同一个sql有两个执行计划,是否合理? 它的EXECUTIONS,ELAPSED_TIME等统计信息怎么看,是独立分开的还是统一计算的? 如下图: 问题影响版本 tpcc测试:23.2.1. ...
- git merge 详细操作,看完就懂
[root@hostname git_test]# git init hint: Using 'master' as the name for the initial branch. This def ...
- Round #2022/12/03
问题 B: 约数个数 题目描述 有 \(t\) 次询问,每次给你一个数 \(n\) ,求在 \([1,n]\) 内约数个数最多的数的约数个数. 输入 第一行一个正整数 \(t\) . 之后 \(t\) ...
- Goby漏洞发布 | 0day NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞【已验证】
漏洞名称:NACOS /nacos/v1/cs/ops/data/removal RCE代码执行漏洞 English Name:NACOS /nacos/v1/cs/ops/data/removal ...
- 深度学习模型训练的过程理解(训练集、验证集、测试集、batch、iteration、epoch、单步预测、多步预测、kernels、学习率)
呜呜呜呜,感谢大佬学弟给我讲干货. 本来是讨论项目的,后面就跑偏讲论文模型了. 解答了我一直以来的疑问: 数据放模型里训练的过程. 假设我们有一个数据集26304条数据,假设设置模型读入1000条,如 ...
- Angular 18+ 高级教程 – Angular 的局限和 Github Issues
前言 Angular 绝对有很多缺陷,Issue 非常多,workaround 非常多. 我以前至少有 subscribe 超过 20 个 Issues,几年都没有 right way 处理的. An ...
- 3.1 migration to 5.0
记入我遇到的问题 : 1. localizer.WithCulture 废弃了 https://github.com/dotnet/aspnetcore/issues/7756 其实讨论很久了, 只是 ...
- SQL Server 中的 NUL 设备/NIL设备
SQL Server 中的 NUL 设备/NIL设备 在 SQL Server 中,有一个特殊的设备叫做 NUL(注意,不是 NULL),它类似于文件系统中的"黑洞".NUL 设备 ...