矩阵变换让我头晕目眩。我有一个dojox.gfx.group,我希望它可以用Mover拖动,然后能够在表面上的某个点上旋转它。我的基本代码如下所示:
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)处只是为了简单起见。我似乎不明白这个组是如何轮换的。
任何关于矩阵变换的简单化教程的参考也会有所帮助。我检查过的ones并没有提供太多帮助。
发布于 2010-01-11 11:22:07
试试official dojox.gfx matrix tutorial吧。看看official documentation是否有帮助。
发布于 2010-01-12 19:24:07
官方文档是我开始思考的地方。我盯着它看了很长一段时间,因为我不知道如何将新的坐标输入到即将到来的矩阵变换中。
不过,我终于想出了问题所在。这是一个将监听程序连接到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);
},生活又变得花哨了。感谢Eugene的建议。
https://stackoverflow.com/questions/2038504
复制相似问题