Advertisement
lemansky

Untitled

Dec 13th, 2022
939
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 1.49 KB | None | 0 0
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6.     <title>Document</title>
  7.     <script>
  8.         document.addEventListener('DOMContentLoaded', (e) => {
  9.             let canvas = document.querySelector('canvas');
  10.             let ctx = canvas.getContext('2d');
  11.  
  12.             let x0, y0, x1, y1, dx, dy, norm, udx, udy, ax, ay, bx, by;
  13.  
  14.             canvas.addEventListener('mousedown', (e) => {
  15.                 x0 = e.offsetX;
  16.                 y0 = e.offsetY;
  17.                 canvas.addEventListener('mousemove', follow);
  18.             });
  19.  
  20.             canvas.addEventListener('mouseup', (e) => {
  21.                 canvas.removeEventListener('mousemove', follow);               
  22.             });
  23.  
  24.             function follow(evt){
  25.                 ctx.closePath();
  26.                 ctx.clearRect(0,0, canvas.width, canvas.height);
  27.                 ctx.beginPath();
  28.                 ctx.moveTo(x0, y0);
  29.                 ctx.lineTo(evt.offsetX, evt.offsetY);
  30.                 ctx.stroke();
  31.                 x1 = evt.offsetX;
  32.                 y1 = evt.offsetY;
  33.                 dx = x0 - x1;
  34.                 dy = y0 - y1;
  35.                 norm = Math.sqrt(dx*dx + dy*dy);
  36.                 udx = dx/norm;
  37.                 udy = dy/norm;
  38.                 ax = udx*Math.sqrt(3)/2 - udy*1/2;
  39.                 ay = udx*1/2 + udy*Math.sqrt(3)/2;
  40.                 bx = udx*Math.sqrt(3)/2 + udy*1/2;
  41.                 by = -udx*1/2 + udy*Math.sqrt(3)/2;
  42.                 ctx.lineTo(x1+20*ax, y1+20*ay);
  43.                 ctx.stroke();
  44.                 ctx.moveTo(x1, y1);
  45.                 ctx.lineTo(x1+20*bx, y1+20*by);
  46.                 ctx.stroke();
  47.                 ctx.closePath();
  48.             }
  49.         });
  50.     </script>
  51.     <style>
  52.         canvas{
  53.             border:solid 2px black;
  54.         }
  55.     </style>
  56. </head>
  57. <body>
  58.     <canvas width="1000" height="1000"></canvas>
  59. </body>
  60. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement