2

行列変換は私の頭を回転させました。Moverでドラッグ可能にして、サーフェス上の特定のポイントを中心に回転できるようにしたいdojox.gfx.groupがあります。私の基本的なコードは次のようになります。

this.m = dojox.gfx.matrix,
.
.
.

updateMatrix: function(){
  var mtx = this.group._getRealMatrix();
  var trans_m = this.m.translate(mtx.dx, mtx.dy);
  this.group.setTransform([this.m.rotateAt(this.rotation, 0, 0), trans_m]); 
}

物事を単純にするために、回転点は(0,0)にあります。グループがどのようにローテーションされているのか理解していないようです。

行列変換に関する単純なチュートリアルへの参照も役立ちます。私がチェックアウトしたものはあまり役に立ちませんでした。

4

2 に答える 2

0

公式の dojox.gfx マトリックス チュートリアル を試してください。公式ドキュメントが役立つかどうかを確認してください。

于 2010-01-11T03:22:07.353 に答える
0

公式ドキュメントは、私の頭が回転し始めた場所です。新しい座標を次のマトリックス変換に供給する方法がわからなかったので、かなり長い間それを見つめていました。

私は最終的に問題を理解することができました。Mover が onMoveStop をトリガーするときに、リスナーを接続することが問題でした。

dojo.connect(movable, "onMoveStop", map, "reposition");

次に、新しい移動距離を取得し、グラフィック クラスの回転またはスケーリング マトリックス変換に送ります。

updateMatrix: function(){
    //So far it is the group which is being rotated

    if (this.group) {

        if(!this.curr_matrix){
            this.curr_matrix = this.initial_matrix;
        }
        this.group.setTransform([
            this.m.rotateAt(this.rotation, this.stage_w_2, this.stage_h_2),
            this.m.scaleAt(this.scaling, this.stage_w_2, this.stage_h_2),
            this.curr_matrix
        ]);

        //this.group.setTransform([
        //  this.m.rotateAt(this.rotation, mid_x, mid_y),
        //  this.m.scaleAt(this.scaling, mid_x, mid_y),
        //  this.initial_matrix]);
    }
},
reposition: function(){
    mtx = this.group._getRealMatrix();
    this.curr_matrix = this.m.translate(mtx.dx, mtx.dy);
},

人生は再びダンディです。提案してくれたユージーンに感謝します。

于 2010-01-12T11:24:07.400 に答える