在Android中,“preconcat”一个矩阵是什么意思?

26
在回顾中:http://developer.android.com/reference/android/graphics/Canvas.html 我在想
translate(): "将当前矩阵与指定的平移进行预连接" -- 这是什么意思?
我在互联网上找不到“preconcat”的明确定义!唯一能找到的地方是在Android源代码中 - 我开始怀疑他们是不是编造出来的? :)
我对“concat”或者连接很熟悉,它是追加的意思,那么什么是预连接呢?
2个回答

36

在处理矩阵时,连接(concatenation)一词指的是乘法。

由于矩阵乘法不满足交换律,因此需要另一个术语表示反向乘法。
a预连接到b意味着设置a = b × a。(与a = a × b不同,后者会得到不同的矩阵)


谢谢。我的问题是关于Android画布的,但我很难将画布和矩阵联系起来。 - Brad Hein
@Brad:画布维护一个变换矩阵;translate 操作它。 - SLaks
4
画布维护一个矩阵,画布是通过在OpenGL中定义明确的方法进行操作的。相关定义的极佳来源为:http://gpwiki.org/index.php/OpenGL:Tutorials:Theory - Brad Hein

-1

这只是谷歌和他们的开发滥用单词和缩写的又一个例子。如果我掌权,我会对此处以罚款相威慑。基本上,它意味着从右侧乘以现有矩阵,并且因为在向量变换中右侧的那个先移动,所以它是“pre-”。例如,如果您想将图像缩放并移动到另一个位置,则应键入:

    mCanvas.translate(tx,ty);
    mCanvas.scale(sx,sy);
    mCanvas.drawBitmap(mBitmap,0,0,mPaint);

这完全是与常识逻辑相反的顺序。


我不是那个给你点踩的人,但并不仅仅是安卓使用这种约定,Windows的Drawing2D和HTML Canvas API也是以同样的方式工作(参见这里)。我猜想它们最终都是基于OpenGL的。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接