Canvas学习:绘制箭头

您所在的位置:网站首页 canvas绘制流程图线 Canvas学习:绘制箭头

Canvas学习:绘制箭头

2024-07-07 13:50| 来源: 网络整理| 查看: 265

原文出处:https://www.w3cplus.com/canvas/drawing-arrow.html (本文对错误做了纠正,博主有一系列实用Canvas教程)

在这篇文章中主要来聊在Canvas中怎么绘制箭头。在Canvas的CanvasRenderingContext2D对象中是没有提供绘制箭头的方法,言外之意,在Canvas中要绘制箭头是需要自己封装函数来处理。那今天的主题就是来看怎么封装绘制箭头的函数。

了解一些基础知识

平常我们常常看到的一些箭头样式如下图所示:

在绘制箭头最关键之处就是处理箭头:

其包括几个部分:

一条直线,从起点P1到终点P2终点P2向这条直线两侧扩展,将会产生一个P3和P4点另外P2P3或者P2P4构成箭头斜线率箭头斜线和直线有一个夹角theta(θ)指定箭头的长度d

从上图上我们可以看出,控制一个箭头,可以通过这几个参数来控制:

起点P1((fromX, fromY))终点P2((toX, toY))斜线长度headlen夹角theta(θ)

对于箭头的P3和P4点,我们就需要通过相应的三角函数计算得来。

那么P3的坐标可以轻易计算出来(错误):

p3[0] = P2[0] - Math.cos(θ * Math.PI / 180); // P3对应的X坐标 p3[1] = p2[1] - Math.sin(θ * Math.PI / 180); // P3对应的Y坐标

个人补充: 上面应该是错误的。根据上图公式求x,y的值应该是: x=cosθ * r, y=sinθ * r, 所以应该是:

p3[0] = P2[0] - Math.cos(θ * Math.PI / 180) * headlen; // P3对应的X坐标 p3[1] = p2[1] - Math.sin(θ * Math.PI / 180) * headlen; // P3对应的Y坐标 用同样的方法可以计算出 P4 坐标(错误): p4[0] = P2[0] - Math.cos(θ * Math.PI / 180); // P4对应的X坐标 p3[1] = p2[1] + Math.sin(θ * Math.PI / 180); // P4对应的Y坐标

同样计P4坐标时headlen也要参与运算:

p4[0] = P2[0] - Math.cos(θ * Math.PI / 180) * headlen; // P4对应的X坐标 p3[1] = p2[1] + Math.sin(θ * Math.PI / 180) * headlen; // P4对应的Y坐标 除此之外, 还有一个关键,就是箭头的角度 。获取箭头的角度,可以直接通过 atan2(y,x) 来获取。这也就涉及到三角函数中的 反正切函数 。

在三角函数中,两个参数的函数atan2是正切函数tan的一个变种。对于任意不同时等于0的实参数x和y,atan2(y,x)所表达的意思是坐标原点为起点,指向(x,y)的射线在坐标平面上与x轴正方向之间的角的角度。当y>0时,射线与x轴正方向的所得的角的角度指的是x轴正方向绕逆时针方向到达射线旋转的角的角度;而当y



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3