VTK Transformation PreMultiply and PostMultiply

I am confused about premultiply and postmuliply in vtk transform.

I searched the information from internet as folllowing.

The product of matrices A and B, AB and BA are not the same. It is common to use the terms “pre-multiplication” and “post-multiplication” in the multiplication of matrices. “A is post-multiplied by B,” or “B is pre-multiplied by A,” refers to the product AB. “B is post-multiplied by A,” or “A is pre-multiplied by B,” refers to the product BA.

According to this description, A is post-multiplied by B, that is A*B.

In VTK vtkTransform.h, it saids as below.

* Sets the internal state of the transform to PreMultiply. All subsequent
   * operations will occur before those already represented in the
   * current transformation.  In homogeneous matrix notation, M = M*A where
   * M is the current transformation matrix and A is the applied matrix.
   * The default is PreMultiply.

The default mode is PRE-MULTIPLY, if you declear a transform variable, like Trans_A. This means Trans_A is pre-multiplied by another matrix.
That is [ another matrix ] * Trans_A.

When users are using vtkTransform to transform an object in vtk.
Premultiply means, AfterTransformOfObject = TransOfCurrentObject * Trans_A, in vtk description is M = M * A, A is the applied matrix -> also the transformation.


For example:

  1. set original matrix by identity matrix
    When an object's transformation is set by identity matrix, M(current) = E
  2. rotate by z axis with 30 degree
    M(after1) = M(Current) * M(rotationByZWith30)
  3. translate by x axis with 1 unit
    M(after2) = M(after1) * M(translateByAWith1Unit)
    So, the final result should be M(final) = M(current) * M(rotationByZWith30) * M(translateByAWith1Unit)
image.png
image.png

see this page


对于Premultiply, M = M * A
所以例如,设置Premultiply的模式,如果 对于一个物体 先沿X轴正向移动1个单位(Tran),再逆时针旋转30°(Rot),则带入premultiply的公式为 M = (M * Trans) * Rot, 去掉括号即 M(final) = M * Trans * Rot, 即对于原始物体先平移再旋转.


对于Postmultiply, M = A * M
同样的逻辑, 先沿X轴正向移动1个单位,再逆时针旋转30°, 则为 M = Rot * (Trans * M ), 去掉括号为 M(final) = Rot * Trans * M, 由于是左乘, 它相当于先对原始物体 先旋转 再平移. 即左乘的矩阵链为
M(final) = A4A3A2A1M, 那么实际上是等价于先对M做A4,再做A3,再做A2,再做A1

验证:


image.png
image.png

关于物体的变换的的物理意义:
vtk中的一个物体默认的 user transform是单位矩阵E, 如果人为设置了物体的变换矩阵M,那么它的物理意义就是
WorldCoordinate = Transform(Object) * LocalCoordinate


image.png

计算世界坐标系到局部坐标轴的变换计算过程:
假设局部坐标系的原点为Pos, 坐标轴为 XDir, YDir, ZDir
(1) 先获取这个坐标轴的变换矩阵,然后求逆矩阵
例如,设置为premultiply,先平移,再旋转. 则根据Pre的定义 M = M * A, 所以变换矩阵为 T * R
如果是postmultiply, 则先旋转,再平移, 根据post定义 M = A * M, T * R

(2) 直接计算
例如,设置为postMultiply, 可以先反向平移, 即 Trans(-Pos), 然后旋转, 即此坐标轴的单位矩阵,
Rot * Trans(-Pos)

对于1和2, 1中 W = (T * R) * Local , 两边都乘以Inv(TR), Inv(T * R) * World = Inv(TR) * (T*R) * Local ,
Local = Inv(T * R) * World, 即 Local = Inv(R) * Inv(T) * World, 对比2中,我们可以看到
Transform (-Pos) 就是 Pos的逆矩阵,例如
pos为(1,1,0), -pos 为(-1,-1,0)
1, 0, 0, 1 1, 0, 0 , -1
0, 1, 0, 1 * 0, 1, 0, -1 = E
0, 0, 1, 0 0, 0, 1, 0
0, 0, 0, 1 0, 0, 0, 1
对于R, 例如, 在1中,如果是先平移到(1,1,0),绕z旋转45°,那么旋转矩阵R为
0.707, -0.707, 0, 0
0.707, 0.707, 0, 0
0, 0, 1, 0
0, 0, 0, 1
计算一下这个矩阵的逆矩阵
(0.707, 0.707, 0 , 0)
(-0.707, 0.707, 0, 0)
(0, 0, 1, 0)
(0,0,01)

在第二种方式中次坐标的单位阵为XDir(1,1,0) YDir(-1, 1, 0) ZDir(0,0,1),单位化后为
(0.707, 0.707, 0)
(-0.707, 0.707, 0)
(0, 0, 1)
和上面的矩阵刚好相符,说明他们是互为逆矩阵的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352