Re: Coordinate from device to user space without a context [RESOLVED]
Donn <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
On 06/11/2013 21:25, Bryce W. Harrington wrote: > Essentially, you have two sets of coordinates, one of which is offset > from the other, and perhaps multiplied by some factor, and maybe rotated > or skewed. To calculate the x,y coordinates in one system from the > other, you use this formula: > > x_new = xx * x + xy * y + x0; > y_new = yx * x + yy * y + y0; Bryce, I've been at it for hours and some things are getting clearer. My program does involve a tree - children with children and there will be many nodes under rotation and skew etc. So, I needed your first formula above. I tried, with high-school algebra that's 24 years old and got: userx = ( mousex - mymatrix.xy * y - mymatrix.x0 )/mymatrix.xx usery = ( mousey - mymatrix.yx * x - mymatrix.y0 )/mymatrix.yy (Monkey see, monkey solve. Understanding is a million miles away.) So, that worked ;) It's "jerky" though - perhaps something to do with doubles and rounding or such voodoo. The "cairo function" route is way smoother: var tm = mymatrix; tm.invert(); //outputs user space into my,my tm.transform_point(ref mousex, ref mousey); I have also come to some détente with transforms and save/restore and when in that process to calculate device->user coordinates. The mad jumping is under control now. I hope it stays that way. (The secret is to save mymatrix *before* doing any transforms.) So, my thanks to Bryce and ed and this list. I couldn't have done it without ya. \d -- cairo mailing list [email protected] http://lists.cairographics.org/mailman/listinfo/cairo