From: Eli Zaretskii <eliz@gnu.org>
To: Alp Aker <alptekin.aker@gmail.com>
Cc: alan@idiocy.org, emacs-devel@gnu.org
Subject: Re: Image transformations
Date: Thu, 13 Jun 2019 16:05:42 +0300 [thread overview]
Message-ID: <83pnnhzlcp.fsf@gnu.org> (raw)
In-Reply-To: <CACxch4r018xMwDQ3v=-R=kcozLPR8mUFBQhEsih06EAAsS9kOA@mail.gmail.com> (message from Alp Aker on Thu, 13 Jun 2019 05:19:52 -0400)
> From: Alp Aker <alptekin.aker@gmail.com>
> Date: Thu, 13 Jun 2019 05:19:52 -0400
> Cc: Alan Third <alan@idiocy.org>, Emacs devel <emacs-devel@gnu.org>
>
> > This already goes contrary to my geometric intuition, please bear with
> > me. The rotation is around the (0,0) origin, i.e. around the top-left
> > corner of the original image, right? If so, the rotation should have
> > been followed by a translation along the X axis, not Y
>
> The last sentence is problematic. When a transformation matrix describes a
> rotation followed by a translation, the translation is specified relative
> to the fixed coordinate axes. The rotation doesn't affect the
> direction of the translation.
That's right, but this is exactly what I was trying to describe. When
I wrote "translation along the X axis", I meant the original X axis,
which is unaffected by the rotation. Are you saying that my
expectations are incorrect in that interpretation of "X axis"?
> > +------------------+> X +----------+-------------------> X
> > | | | |
> > | | | |
> > | | | |
> > | | ===> | |
> > +------------------+ | |
> > | | |
> > | | |
> > | | |
> > | +----------+
> > | |
> > V V
> > Y Y
> >
> > The above is just after the rotation around (0,0). Is that correct,
> > or am I missing something?
>
> That's correct.
>
> > I also tried to approach this from the matrix notation aspect. Is the
> > following the correct equations of computing (x',y'), the new
> > coordinates of any pixel of the image, from its original coordinates
> > (x,y)?
> >
> > x' = m11 * x + m12 * y + tx
> > y' = m21 * x + m22 * y + ty
> >
> > where the factors are related to the matrix as follows:
> >
> > m[0][0] = m11 | m[0][1] = m12 | m[0][2] = 0
> > --------------+---------------+-------------
> > m[1][0] = m21 | m[1][1] = m22 | m[1][2] = 0
> > --------------+---------------+-------------
> > m[2][0] = tx | m[2][1] = ty | m[2][2] = 1
>
> I confess I'm not sure how to interpret that matrix. I just looked through
> image_set_rotation and found it somewhat confusing, as it seems to use
> column-major representation where I'd expect row-major. E.g., the above
> matrix
> looks odd to me, because tx and ty would normally be in m[0][2] and m[1][2]
> (and
> I'd expect m[2][0] == m[2][1] == 0). Similarly, the rotation matrix used in
> image_set_rotation:
>
> [0][0] = cos_r, [0][1] = -sin_r
> [1][0] = sin_r, [1][1] = cos_r
>
> would normally describe a counter-clockwise rotation by r, not a clockwise
> rotation.
Maybe that's the problem: if the rotation is counter-clockwise, then
the translation should indeed be along the Y axis.
> That said, if I correctly understand the layout of the data, the equations
> should be:
>
> x' = m11 * x + m21 * y + tx
> y' = m12 * x + m22 * y + ty
AFAIU, this indeed describes a counter-clockwise rotation, not a
clockwise rotation.
> > the correct coordinates should be (233,0), not (0,232).
> > What am I missing here?
>
> The transformation described by the matrix is: rotate 90 degrees
> around the origin, then translate by 232 along the y axis. The
> first operation leaves (0, 0) unmoved, then the second operation
> moves it to (0, 232).
But if the rotation is clockwise, the result should be (233,0), right?
Thank you for helping me figure out this stuff.
next prev parent reply other threads:[~2019-06-13 13:05 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-11 5:10 Image transformations Eli Zaretskii
2019-06-11 20:02 ` Alan Third
2019-06-12 15:30 ` Eli Zaretskii
2019-06-12 22:07 ` Alan Third
2019-06-12 22:15 ` Alan Third
2019-06-13 4:16 ` Alp Aker
2019-06-13 5:41 ` Eli Zaretskii
2019-06-13 9:19 ` Alp Aker
2019-06-13 13:05 ` Eli Zaretskii [this message]
2019-06-13 15:57 ` Alp Aker
2019-06-13 16:20 ` Eli Zaretskii
2019-06-13 19:00 ` Richard Copley
2019-06-13 19:29 ` Eli Zaretskii
2019-06-14 10:45 ` Alp Aker
2019-06-14 10:55 ` Richard Copley
2019-06-14 11:45 ` YAMAMOTO Mitsuharu
2019-06-14 11:59 ` Alp Aker
2019-06-13 16:12 ` Alan Third
2019-06-13 17:05 ` Eli Zaretskii
2019-06-13 19:35 ` Richard Copley
2019-06-13 5:48 ` Eli Zaretskii
2019-06-13 16:58 ` Alan Third
2019-06-13 17:11 ` Eli Zaretskii
2019-06-13 19:27 ` Alan Third
2019-06-13 19:39 ` Alan Third
2019-06-13 19:47 ` Eli Zaretskii
2019-06-13 22:26 ` Alan Third
2019-06-14 7:05 ` Eli Zaretskii
2019-06-14 9:57 ` Stefan Monnier
2019-06-14 10:57 ` Eli Zaretskii
2019-06-14 11:21 ` Richard Copley
2019-06-14 12:06 ` Eli Zaretskii
2019-06-14 12:49 ` Richard Copley
2019-06-14 14:16 ` Yuri Khan
2019-06-14 14:43 ` Eli Zaretskii
2019-06-14 15:55 ` Richard Copley
2019-06-15 11:00 ` Alan Third
2019-06-15 11:34 ` Eli Zaretskii
2019-06-15 10:42 ` Alan Third
2019-06-15 11:31 ` Eli Zaretskii
2019-06-16 15:22 ` Alan Third
2019-06-16 16:34 ` Eli Zaretskii
2019-06-17 21:13 ` Alan Third
2019-06-19 17:56 ` Eli Zaretskii
2019-06-24 17:54 ` Eli Zaretskii
2019-06-24 19:50 ` Stefan Monnier
2019-06-25 2:33 ` Eli Zaretskii
2019-06-25 3:28 ` Stefan Monnier
2019-06-25 4:34 ` Eli Zaretskii
2019-06-25 14:43 ` Stefan Monnier
2019-06-25 15:35 ` Eli Zaretskii
2019-06-26 0:28 ` YAMAMOTO Mitsuharu
2019-06-26 15:34 ` Eli Zaretskii
2019-06-27 3:37 ` YAMAMOTO Mitsuharu
2019-06-27 13:13 ` Eli Zaretskii
2019-06-25 18:33 ` Alan Third
2019-06-25 18:57 ` Eli Zaretskii
2019-06-27 13:59 ` Eli Zaretskii
2019-06-28 18:36 ` Alan Third
2019-06-28 19:50 ` Eli Zaretskii
2019-06-29 11:55 ` Eli Zaretskii
2019-06-29 19:51 ` Alan Third
2019-06-29 19:49 ` Alan Third
2019-06-29 19:53 ` Lars Ingebrigtsen
2019-06-30 14:38 ` Alan Third
2019-06-30 15:24 ` Lars Ingebrigtsen
2019-07-25 19:40 ` Lars Ingebrigtsen
2019-07-26 6:10 ` Eli Zaretskii
2019-07-26 6:46 ` Lars Ingebrigtsen
2019-07-26 8:06 ` Eli Zaretskii
2019-07-26 8:23 ` Lars Ingebrigtsen
2019-07-26 8:24 ` Lars Ingebrigtsen
2019-07-26 8:33 ` Eli Zaretskii
2019-07-26 8:58 ` Lars Ingebrigtsen
2019-07-26 9:13 ` Eli Zaretskii
2019-07-26 10:23 ` Lars Ingebrigtsen
2019-07-26 14:08 ` Stefan Monnier
2019-07-26 8:32 ` Eli Zaretskii
2019-06-29 21:05 ` Stefan Monnier
2019-06-30 15:12 ` Eli Zaretskii
2019-06-30 19:10 ` Alan Third
2019-07-01 14:55 ` Eli Zaretskii
2019-06-18 11:01 ` Tak Kunihiro
2019-06-13 17:41 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=83pnnhzlcp.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=alan@idiocy.org \
--cc=alptekin.aker@gmail.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.