2017-05-24 10 views
1

D3の助けを借りて、その中心の周りをさまざまな速度で回転させたいと思っています。 回転速度が高すぎない限り、すべてが正常に動作します。しかし、回転中心が(視覚的に)固定されているにもかかわらず、最終的にオブジェクトは、の回転を開始します。D3:鈍いサイコロ(望ましくない)

私は何をするか、誤って理解したのですか?http://jsfiddle.net/mcqnpgn6/ `

// initialize rotation angles 
var dAngle = 10 
var angles = [] 
var angle = 0; 
for (i = 0; i < T; i++) { 
    angles[i] = angle 
    angle += dAngle > 0 ? dAngle : i 
} 

// create dice .... 

// rotate dice 
for (i = 0; i < T; i++) { 
    dice.transition() 
    .delay(i * dt) 
    .duration(dt) 
    .ease("linear") 
    .attr("transform", "rotate(" + angles[i] + "," + cx + "," + cy + ")") 
} 

でタンブリングサイコロを探しますかさんはこの作業をどのように解決できますか?

+0

私は' requestAnimationFrame'代わりに 'for'ループの中で、独自のアニメーションを書くの使用だろう、と私は、これは'移行を必要とは思いません。どのフレームでも、速度変数に反比例するように、ある角度を回転させる必要があります。 – anbnyc

答えて

1

私のコメントに精緻化:http://jsfiddle.net/mcqnpgn6/25/。以下の主なセクションは: `)(

var theta = dAngle; 

function rotate(){ 
    theta += dAngle; 
    dice.attr("transform", "rotate(" + theta + "," + cx + "," + cy + ")") 
    window.requestAnimationFrame(rotate); 
} 

rotate(); 
+0

ありがとうございます。 requestAnimationFrameはトゥイーン化を行いますか?私のアプローチがより速いスピードではうまくいかない理由を説明していますか? –

+0

'requestAnimationFrame'にはトゥイーンがありません。連続した静的フレームを約60fpsでレンダリングするだけです。 D3の 'transition()'は、エレメントの開始位置と終了位置が固定されている場合に意味があります。 (移行を繰り返す場合は、次の例を参照してください:https://bl.ocks.org/mbostock/1125997)。 あなたが 'dAngle'を大きくすると(500回試して)、転倒の理由がより明確になります:D3は回転の中心を補間して、要素が回転されるだけでなく回転されるようにします。 – anbnyc

+0

ありがとうございます。 「D3が回転中心を補間しています」とはどういう意味ですか?回転の中心は私に固定されているようだ。 –

関連する問題