首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使一幅画跟随另一幅(html画布)

如何使一幅画跟随另一幅(html画布)
EN

Stack Overflow用户
提问于 2017-11-18 20:36:04
回答 2查看 48关注 0票数 0

我有两幅画:一条弧线和一条圆圈,我想让这个圆圈跟在圆弧的末端。基本上,我需要获取弧的endAngle的x&y,这样我就可以在圆圈上使用它来跟踪它。

代码语言:javascript
复制
 //Arc
 context.beginPath(); 
 var x2 = canvas.width / 2; 
 var y2 = canvas.height / 2; 
 var radius2 = 215; 
 var startAngle2 = 1.5 * Math.PI; 
 var endAngle2= 2.3 * Math.PI; 
 var counterClockwise2 = false; 
 context.arc(x2, y2, radius2, startAngle2, endAngle2, counterClockwise2); 
 context.lineWidth = 10; 
 context.strokeStyle = "blue"; 
 context.stroke(); 

 //Circle
 context.beginPath(); 
 var x3 = x2+ 130; 
 var y3 = y2 + 200; 
 var radius3 = 20; 
 var startAngle3 = 0 * Math.PI; 
 var endAngle3 = 2 * Math.PI; 
 var counterClockwise3 = false; 
 context.arc(x3, y3, radius3, startAngle3, endAngle3, counterClockwise3); 
 context.lineWidth = 5; 
 context.strokeStyle = "yellow"; 
 context.stroke();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-18 22:09:45

如果您想要得到弧尾的x,y坐标,您应该使用cos表示x,sin处理y。

得到你的弧的末端(x,y)如下:

代码语言:javascript
复制
var x3 = canvas.width / 2 + radius2*Math.cos(endAngle2);
var y3 = canvas.height / 2  + radius2*Math.sin(endAngle2);
票数 1
EN

Stack Overflow用户

发布于 2017-11-18 21:51:54

使用ctx.rotate(angle);更容易,旋转的中心是0,0标识的画布的起源。为了选择另一个,您需要使用ctx.translate(x, y);,其中x,y是旋转中心的坐标。

代码语言:javascript
复制
context.translate(x1,y1)
context.rotate(20*Math.PI/180)

最后,您需要更改坐标以引用新的中心。

代码语言:javascript
复制
    context.arc(x2, y2, radius2, startAngle2, endAngle2, counterClockwise2);
...

....

    var x3 = x2 + 130;
    var y3 = y2 + 200; 

变成了

代码语言:javascript
复制
context.arc(0, 0, radius2, startAngle2, endAngle2, counterClockwise2);
....

...
var x3 =  130;
var y3 =  200; 

,这是完整的代码:

代码语言:javascript
复制
  	var canvas=document.getElementById("clock");
      var context = canvas.getContext('2d');


context.beginPath();

      var x1 = canvas.width/2;
      var y1 = canvas.height/2;
      var radius1 = 200;
      var startAngle1 = 0 * Math.PI;
      var endAngle1 = 2 * Math.PI;
      var counterClockwise1 = false;

context.arc(x1, y1, radius1, startAngle1, endAngle1, counterClockwise1);
context.lineWidth = 20;
context.strokeStyle = 'black';
context.stroke();
context.font = "bold 76px Arial";
context.textAlign="center"; 
context.textBaseline="middle"; 
context.fillText("25:00", canvas.width/2, canvas.height/2);

 
context.beginPath();

context.translate(x1,y1)
context.rotate(Math.PI)
var radius2 = 215;
var startAngle2 = 1.5 * Math.PI;
var endAngle2 = 2.3 * Math.PI;
var counterClockwise2 = false;
context.arc(0, 0, radius2, startAngle2, endAngle2, counterClockwise2);
context.lineWidth = 10;
context.strokeStyle = "blue";
context.stroke();
context.beginPath();
var x3 = 130;
var y3 = 200;
var radius3 = 20;
var startAngle3 = 0 * Math.PI;
var endAngle3 = 2 * Math.PI;
var counterClockwise3 = false;
context.arc(x3, y3, radius3, startAngle3, endAngle3, counterClockwise3);
context.lineWidth = 5;
context.strokeStyle = "yellow";
context.stroke();
代码语言:javascript
复制
body {
  background-color: #50B3B9;
}

#clock {
  background-color: red;
  position:relative;
}

#time {
  position:absolute;
  top:0px;
}


----------
代码语言:javascript
复制
  <div class="container">
    <canvas id="clock" width="600" height="600">
      <div id="time">25:00</div>
    </canvas>
  </div>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47370773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档