2017-03-03 7 views
0

丸テーブルの周りにn個の椅子を均等に配置したいと思います。
サークルの周りのオブジェクトをアニメーションにするいくつかのソリューションを試しましたが、問題の解決にそれらを変換できません。
http://jsfiddle.net/m1erickson/dFctW/http://jsfiddle.net/Cu6Zv/1/テーブル周りの椅子の移動方法と回転方法

私が働いているプロジェクトでは、テーブルの選択された量の間で分けする必要が椅子の選択された量を必要とします。私はプロトタイプを作り上げることができましたが、椅子は均等に分かれておらず、テーブルの中央に向かって回転していません。

enter image description here

var step = 360/chairs; 
for(var count = 0; count < chairs; count++){ 
    angle += Math.acos(1-Math.pow(step/radius,2)/2); 

    var x = cx + radius * Math.cos(angle); 
    var y = cy + radius * Math.sin(angle); 

    ctx.rect(x-5,y-5,10,10); 
    ctx.stroke(); 
} 

私は私がこれまで持っているもののjsfiddleを作成しました。

うまくいけば、誰かがどのように私を説明することができます:おそらく

  • (テーブルの中心に向かって指摘)テーブルに並ぶように各椅子を回して

    • 均等に円の周りの椅子を翻訳その背後にある数学を説明して、それが何をしているのか、また必要に応じてどのように適応できるのかを理解することができます。

    ありがとうございます。あなたの最初の問題のために

  • +0

    ルック:あなたは、彼らはそれが手動で位置を計算するのではなく、トランスフォームを使用するために、おそらく簡単ですテーブルの中央に直面しているので、それらを回転させたい場合正しい方向に。 – Darkrum

    答えて

    2

    にあなたがコードを正しい軌道にほとんどです。単に代わりにラジアンを使用し、ACOSラインドロップ:今

    var ctx = c.getContext("2d"); 
     
    var angle = 0; 
     
    var chairs = 6; 
     
    var cx = c.width>>1, cy = c.height>>1, radius = (c.height>>1)-10; 
     
    var step = Math.PI * 2/chairs; 
     
    
     
    for(var count = 0; count < chairs; count++){ 
     
        var x = cx + radius * Math.cos(angle); 
     
        var y = cy + radius * Math.sin(angle); 
     
        ctx.rect(x-5,y-5,10,10); 
     
        angle += step; 
     
    } 
     
    ctx.stroke();
    <canvas id=c></canvas>

    を、すべての椅子は、同じ方向に直面するだろう。彼らはあなたを指している必要があり、オンラインでのローディングスピナー発電のためのコードで

    var ctx = c.getContext("2d"); 
     
    var angle = 0; 
     
    var chairs = 6; 
     
    var cx = c.width>>1, cy = c.height>>1, radius = (c.height>>1)-10; 
     
    var step = Math.PI * 2/chairs; 
     
    
     
    // translate to center 
     
    ctx.translate(cx, cy); 
     
    
     
    for(var count = 0; count < chairs; count++){ 
     
        // rotate around center (0,0) 
     
        ctx.rotate(step); 
     
        
     
        // draw using radius as offser on x-axis only 
     
        ctx.rect(radius -5,-5,10,10); 
     
        ctx.rect(radius -5, -1, 4,2); 
     
    } 
     
    ctx.stroke();
    <canvas id=c></canvas>

    +0

    迅速な対応をありがとう。上記のコードを使って私のプロトタイプのために働いている椅子のデビジョンを手に入れました。しかし、私は正しい方向に椅子に直面するいくつかの問題があります。翻訳と回転がいくつかの問題を引き起こしているようです。最後のスニペットが仕事をしているように見えるので、2つのスニペットを組み合わせることになっていますか? –

    +0

    @RobinHermans正しい方向は何ですか?例の1つを使用してください。後者は文脈全体を回転させるので、同じ椅子を同じ位置に描くことができ、そのためにテーブルの中央に向けることができます。後で( 'ctx.setTransform(1,0,0,1,0,0);')変換をリセットしたいかもしれません。 drawImageを使用している場合は、椅子は右を指すように設計する必要があります。この場合の椅子の背中。それ以外の場合は、椅子が描画される位置にローカル変換を追加する必要があります。これがあなたが意味するものであれば教えてください。 – K3N

    +0

    私は最後のコメントを急いでいると思います。私のプロトタイプでそれを実装する2番目の試みで、私はそれを動作させることができました。大変感謝します。 –

    0

    、変更してみてください:

    var step = 360/chairs; 
    

    var step = 360/(chairs + 1); 
    
    関連する問題