首页 > 其他分享 >canvas绘制箭头

canvas绘制箭头

时间:2023-10-11 11:26:41浏览次数:40  
标签:distance canvas ctx 箭头 dx dy var 绘制

<!DOCTYPE html>
<html>
<head>
    <title>箭头</title>
    <meta charset="utf-8">
</head>

<body style="">
    <canvas id="'myCanvas" width="1500" height="2000" ></canvas>
</body>

<script type="text/javascript">
    var canvas = document.getElementById("'myCanvas");
    var ctx = canvas.getContext("2d");
    function drawArrow(ctx, fromX, fromY, toX, toY) {
        // 保存画笔状态
        ctx.save();
        // 设置箭头样式
        ctx.lineWidth = 2;
        ctx.strokeStyle="#000000";
        ctx.fillStyle="#FF0000";
        ctx.lineCap="round";
        ctx.lineJoin="round";
        ctx.shadowBlur=2;
        ctx.shadowColor= "rgba(0, 0, 0, 0.5)";

        // 计算向量及其长度
        var dx = toX - fromX;
        var dy = toY - fromY;
        var distance = Math.sqrt(dx*dx + dy*dy);

        // 计算箭头头部的终点坐标
        var headX = toX - dx / distance * 10;
        var headY = toY - dy / distance * 10;

        // 绘制箭身
        ctx.beginPath();
        ctx.moveTo(fromX, fromY);
        ctx.lineTo(headX, headY);
        ctx.stroke();

        // 绘制箭头头部
        ctx.beginPath();
        ctx.moveTo(toX, toY);
        ctx.lineTo(headX - dy / distance * 5, headY + dx / distance * 5);
        ctx.lineTo(headX + dy / distance * 5, headY - dx / distance * 5);
        ctx.closePath();
        ctx.fill();

        // 恢复画笔状态
        ctx.restore();
    }
    
    drawArrow(ctx, 50, 50, 150, 150);

    </script>

</html>

  

标签:distance,canvas,ctx,箭头,dx,dy,var,绘制
From: https://www.cnblogs.com/boye169/p/17756588.html

相关文章

  • canvas实现星空动画
    效果大概就是星星的运动轨迹是一个椭圆形的面,逆时针旋转,会随机眨眼睛,随机速度,随机运动半径(但是运动轨迹导致椭圆中心的点最密集),不会录制gif,暂不放图实现每颗星星都有自己的属性,所以需要封装exportclassStar{radius:anyw:anyh:anytimePassed:anyspee......
  • 绘制系统(绘制系统简介,画笔和画刷,渐变系统,坐标系统,绘制文字和图片,图形视图框架)
    一、绘制系统简介QPainter、QPaintDevice和QPaintEngine这三个类。其中QPainter用来执行绘图操作;QPaintDevice提供绘图设备,它是一个二维空间的抽象,可以使用QPainter在其上进行绘制;QPaintEngine提供了一些接口,可以用于QPainter在不同的设备上进行绘制。在绘图系统中由QPainter来完成......
  • canvas实现睡眠波
    成果产品借鉴(抄袭)了华为运动健康App上对用户睡眠数据的展示,要我们也实现这种效果。App开发的同事虽然做出了一点样子,但是有点小丑,担子落到了web的头上(虽然笔者实现的效果也没有华为的好,但是还看的过去)分析与实现图形图形有点折线图和柱状图结合的意思,但是两者都不是,作为w......
  • OpenGL——着色器设置绘制对象颜色及透明度
     {https://blog.csdn.net/weixin_46568899/article/details/129217018} {。着色器的编写结构如下:1.声明版本(很重要,版本不对的话会得到不同的绘制结果)。2.使用location指定输入变量。3.定义输入输出变量(用in和out关键字)。4.main函数。以下是一个简单的例子:   constcha......
  • vue3绘制和回显多边形
    参考了这个:https://blog.csdn.net/weixin_42178050/article/details/130012696将其从vue2的语法改成了vue3,效果如下:代码如下:<template><divclass="app-container"><divclass="d-flexj-center"><el-container><el......
  • 前端canvas实现签名功能,可以横屏/竖屏签名
    页面展示效果,点保存后生成图片链接图片链接展示效果这里只展示了竖屏签名效果,横屏自己粘贴代码测试css.box{width:98%;display:flex;flex-direction:column;margin:auto;}.canvasbox{width:100%;border:1pxsolid#bbb;margin:0auto;overflow:hidden;}canvas......
  • 论文、开题报告中工作安排图、日程进度图绘制:Visio
      本文介绍基于Visio软件绘制时间轴、日程安排图、时间进度图等的方法。  在很多学习、工作场合中,我们往往需要绘制如下所示的一些带有具体时间进度的日程安排、工作流程、项目进展等可视化图表。  而基于Visio软件,我们就可以非常轻松地绘制出这样的图案。本文就详细介绍......
  • python 绘制y=2^x 和 y=0.1*2^x 在定义域为[-2,2]的曲线 并绘制灰色半透明刻度线 刻
    importmatplotlib.pyplotaspltimportnumpyasnpx=np.linspace(-2,2,1000)y1=2**xy2=0.1*2**xplt.plot(x,y1,label='y=2^x')plt.plot(x,y2,label='y=0.1*2^x')plt.xlabel('x')plt.ylabel('y')plt.t......
  • 题解 P9697【[GDCPC2023] Canvas】
    好题。后面的操作会覆盖前面的操作,这东西不好处理,我们不妨时光倒流,将问题转化为一个位置一旦被填了数,就再也不会变了。如果解决了这个问题,只需将操作序列倒过来,就得到了原问题的解。显然,所有\(x_i=y_i=2\)的操作会最先被执行,所有\(x_i=y_i=1\)的操作会最后被执行。只需要给......
  • HTML Canvas 画布
      HTML <canvas>画布元素用于通过脚本(通常是JavaScript)动态绘制图形。 <canvas> 画布元素只是图形的容器。您必须使用脚本来实际绘制图形。 <canvas>有几种用于绘制路径、框、圆、文本和添加图像的方法。绘制canvas<!DOCTYPEhtml><htmllang="en"><head><met......