在定义运算符时,矩阵的连接是如何有意义的?当我们处理2维时,为什么还有3维矩阵?虽然我对矢量分析和代数非常熟悉,但我对相关信息非常熟悉,为什么不仅仅是变换或缩放矩阵相乘,然后作为算子应用于坐标,我觉得这很愚蠢?
我正在尝试为我已经可翻译的鼠标网格制作一个缩放鼠标功能,而且我不能做2天。有没有办法在变压器上使用setTranslate或setScale而无需重置现有的运算符?连接的组成如何工作?
编辑最后我得到了一个缩放到和从点算法正确...诀窍是在应用其他任何东西之前应用依赖于zoomLevel本身的翻译,保存前一个操作员:(如果有人对此感兴趣..)
AffineTransform savedTransform = new AffineTransform(transformer);
AffineTransform tempTransform = new AffineTransform();
tempTransform.translate(-0.25*(mouseX-transOfGridXD-game.curWS*sF*sqSize/2), -0.25*(mouseY-transOfGridYD-game.curWS*sF*sqSize/2)); //sF is the zoom level, game.curWS*sqSize is the grid size in pixels, transOfGrid is the translation of the transform
tempTransform.concatenate(savedTransform);
transformer.setTransform(tempTransform );
transformer.translate(-(game.curWS)*sqSize*0.125, -(game.curWS)*sqSize*0.125);
transformer.scale(1.25, 1.25);
答案 0 :(得分:2)
Wikipedia has a lot on affine transformations。通过使用3x3矩阵乘法,您可以同时执行旋转,反射 和翻译 。
即。而不是计算D *(C *(B *(x + a)+ b)+ c)+ d所有这些操作可以被放入单个矩阵运算M * x'(其中x '是带有额外行的向量x)。现在这个矩阵乘法可以在硬件中实现(这基本上就是3D显卡所做的 - 优化4D乘法 - 而且你的打印机可能已经优化了3D乘法的电路!)