简体   繁体   English

javascript canvas - 跟随鼠标的线 position

[英]javascript canvas - line that follow mouse position

im trying to make line in canvas to follow mouse position in 360 degrees, starting from circle center.我试图在 canvas 中画线以 360 度跟随鼠标 position,从圆心开始。

This is my code so far but i cant make right angles.到目前为止,这是我的代码,但我不能直角。 Any solution thanks.任何解决方案谢谢。

https://jsfiddle.net/1L3j2vyw/ https://jsfiddle.net/1L3j2vyw/

var canvas = document.getElementById('paint');
var ctx = canvas.getContext('2d');

canvas.addEventListener('mousemove',function(e){
    //mouse position
    var x = e.clientX - this.offsetLeft;
    var y = e.clientY - this.offsetTop;
    //clear canvas
    ctx.clearRect(0,0,640,640);
    //draw circle
    ctx.strokeStyle = 'yellow';
    ctx.beginPath();
    ctx.arc(200, 200, 150, 0, 2 * Math.PI);
    ctx.stroke();
    //line lenght and position
    var length = 150;
    var angle = 0;
    var newPosX = x - 200;
    var newPosY = y - 200;
    var theta = newPosY/newPosX;
    var angle = Math.atan2(-newPosX, -newPosY) * 180/Math.PI - 90;
    angle = angle < 0 ? 360 + angle : angle; 
    var pi = Math.PI;
    angle =  angle * (pi/180);
    var x2 = 200 + length * Math.cos(angle),
        y2 = 200 + length * Math.sin(angle);
    //draw line
    ctx.strokeStyle = 'blue';
    ctx.lineWidth = 3;
    ctx.beginPath();
    ctx.moveTo(200, 200);
    ctx.lineTo(x2, y2);
    ctx.stroke();
}); 

This formula will calculate the angle you need.这个公式将计算你需要的角度。

var angle = -Math.atan2(newPosX, newPosY) * 180 / Math.PI + 90;

Working Snippet:工作片段:

 var canvas = document.getElementById('paint'); var ctx = canvas.getContext('2d'); canvas.addEventListener('mousemove',function(e){ //mouse position var x = e.clientX - this.offsetLeft; var y = e.clientY - this.offsetTop; //clear canvas ctx.clearRect(0,0,640,640); //draw circle ctx.strokeStyle = 'yellow'; ctx.beginPath(); ctx.arc(200, 200, 150, 0, 2 * Math.PI); ctx.stroke(); //line lenght and position var length = 150; var angle = 0; var newPosX = x - 200; var newPosY = y - 200; var theta = newPosY/newPosX; var angle = -Math.atan2(newPosX, newPosY) * 180/Math.PI + 90; angle = angle < 0? 360 + angle: angle; var pi = Math.PI; angle = angle * (pi/180); var x2 = 200 + length * Math.cos(angle), y2 = 200 + length * Math.sin(angle); //draw line ctx.strokeStyle = 'blue'; ctx.lineWidth = 3; ctx.beginPath(); ctx.moveTo(200, 200); ctx.lineTo(x2, y2); ctx.stroke(); });
 <canvas id="paint" width="640" height="640"></canvas>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM