cgmo-webcgm message
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]
Subject: Re: [cgmo-webcgm] COMMENTS: Chapter 5
- From: Lofton Henderson <lofton@rockynet.com>
- To: "Bezaire, Benoit" <bbezaire@ptc.com>,"CGM Open WebCGM TC" <cgmo-webcgm@lists.oasis-open.org>
- Date: Tue, 06 May 2008 11:11:11 -0600
At 11:30 AM 5/6/2008 -0400, Bezaire, Benoit wrote:
5.4.4.1:
I think this is wrong: Successive basic operations are performed by
left-multiplying the matrices corresponding to the operations - we need
to post-multiply, not pre-multiply. There's a distinction between which
'transforms' happens first vs which 'matrix' is
first.
Hmmm... the terms "pre-multiply" and "post-multiply"
are a little too unspecific for my taste (having math degrees may be a
disadvantage here!). Let's get specific.
The text says this:
[[[
Successive basic operations are performed by left-multiplying the
matrices corresponding to the operations. For example, a translation by
Mt followed by a rotation by Ma is performed by:
p' = Ma * Mt * p
]]]
Are you saying that is wrong? Since matrix multiplication is
associative, then these two are equivalent:
p' = Ma * (Mt * p)
p' = (Ma * Mt) * p
The first one clearly transforms the point p by Mt (translation) first,
then transforms that result by Ma (rotation).
Example: Suppose the point is (1,0) [which is the 3x1 column vector
(1,0,1) in homogeneous coordinates]. Suppose I right-translate by 1
-- result (2,0), yes? Suppose I then rotate counter-clockwise by 90
degrees about the origin -- (0,2), yes?
Mt is:
1 0 1
0 1 0
0 0 1
Ma is:
0 1 0
1 0 0
0 0 1
Ma*Mt is:
0 1 1
1 0 1
0 0 1
Compute (Ma*Mt)*p, where p is the column vector (1,0,1)
[homogeneous]: the result is (0,2,1) [homogeneous].
So ... where is our disconnect here? That example shows that the
point (1,0) is correctly transformed to (0,2) by the math as written in
5.4.4.1.
-Lofton.
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
| [List Home]