Javascript 如何使svg对象以恒定速度沿圆形轨迹移动,D3.js

Javascript 如何使svg对象以恒定速度沿圆形轨迹移动,D3.js,javascript,d3.js,Javascript,D3.js,我想让一个物体绕着一个中心作圆周运动。下面是我的代码。当物体在圆弧上移动时,我期望一个恒定的速度,但是运动速度不是恒定的,它在过渡的中间加速,在过渡的开始和结束时它是非常缓慢的。我不知道为什么,请帮忙 function generatePointOnCircle(angle,w,h){//in degree var rads = angle/180*Math.PI; var r = Math.sqrt(w*w + h*h); var x = Math.cos(rads)*r; v

我想让一个物体绕着一个中心作圆周运动。下面是我的代码。当物体在圆弧上移动时,我期望一个恒定的速度,但是运动速度不是恒定的,它在过渡的中间加速,在过渡的开始和结束时它是非常缓慢的。我不知道为什么,请帮忙

function generatePointOnCircle(angle,w,h){//in degree
  var rads = angle/180*Math.PI;
  var r = Math.sqrt(w*w + h*h);
  var x = Math.cos(rads)*r;
  var y = Math.sin(rads)*r;

  return {x:x,y:y};
}

function generateDefenders(svg){

  var distance = 73;

  the_target_object.transition().duration(10000)
  .attrTween("transform",function(d,i){
    var it = d3.interpolateRound(1,360);
    return function(t){

    var p = generatePointOnCircle(it(t),distance);
    return "translate(" + (p.x + width/2) + "," + (p.y + height/2)+")";
  }

  }).remove();
}

只需要向过渡添加一个线性缓解函数,如下所示

the_target_object.transition().duration(10000).ease("linear") .....
默认情况下,ease函数为“立方输入输出”