I thought about an example for transforming world coords to pixel  
coords and the other way around.
There are 3 operations involved, mirroring the y coordinate, shifting  
to 0.0 and scaling. Additionally it is a good use case for showing the  
benefits  of the  inversion of a matrix.

Is a nice example. What do you think ?

Quoting Jody Garnett <[email protected]>:

> If you are game more documentation is always welcome; I think the   
> best sport would be grouped with the documentation on referencing;   
> since that is where we introduce the generic MathTransform.
> You don't have to write all documentation yourself; referencing   
> wikipedia and others also works.
>
> Before writing documentation you should have some goals on what you   
> want to communicate; perhaps in this case it is how to scale and   
> manipulate a single Geometry (to show what affine transform does);   
> and then mention that it is used during rendering (so you can adjust  
>  your affine transform for the entire map).
>
> http://docs.codehaus.org/display/GEOTDOC/07+Referencing
>
> Jody
>
> On 14/09/2010, at 8:14 AM, [email protected] wrote:
>
>> Hi Jody, after doing my exams there is time for adding some   
>> mathematical basics about Affine Transforms to the WIKI.
>>
>> 1)  Do you still want me to add these concepts to the WIKI ?
>> 2)  Where would be the best place ?
>>
>> Cheers
>> Christian
>>
>> Quoting Jody Garnett <[email protected]>:
>>
>>> You may wish to add some of that to the wiki page :-)
>>>
>>> I will note if you don't like math, you can just use the methods of
>>> the AffineTransform object.
>>>
>>> Jody
>>>
>>>
>>> On Thu, Aug 19, 2010 at 1:01 PM,  <[email protected]> wrote:
>>>>
>>>> Some mathematical basics here.
>>>> An affine transform is a powerful mechanism to transform coordinates.
>>>> To get the new coordinates x' and y', the following calculation is done.
>>>>
>>>> [ x']   [  m00  m01  m02  ] [ x ]   [ m00x + m01y + m02 ]
>>>> [ y'] = [  m10  m11  m12  ] [ y ] = [ m10x + m11y + m12 ]
>>>> [ 1 ]   [   0    0    1   ] [ 1 ]   [         1         ]
>>>>
>>>> A simple example:
>>>> if you want to shift a point 5 units on the x axis and -7 units at the
>>>> y axis, the following matrix is needed
>>>>
>>>> [  1    0  5  ]
>>>> [  0    1  -7  ]
>>>> [  0    0  1   ]
>>>>
>>>> Of course, you can say this is easy, x'=x+5 and y'=y-7 would do the same.
>>>>
>>>> Another one, lets do some scaling, say factor 3
>>>>
>>>> [  3    0  0 ]
>>>> [  0    3  0  ]
>>>> [  0    0  1  ]
>>>>
>>>> This is easy too, x'=x*3 and y'=y*3 would the job.
>>>>
>>>> The power of affine transforms is that you can combine multiple
>>>> matrices into a single one, doing a set of individual transformations
>>>> within one step. There is a java method "concatenate(AffineTransform)"
>>>> for the AffineTransform class. But be careful, given 3 transformatons
>>>> A,B,C and you want to combine them in this order, you have to go from
>>>> right to left.
>>>> C concatenate B concatenate A will give you the expected result.
>>>>
>>>> A mapping from world coordinates to pixel coordinates needs some
>>>> operations but can be done within one affine transformation.
>>>>
>>>> The second powerful feature is that you can create an inverse
>>>> transform (Method createInverse), which will do the mapping in the
>>>> other direction out of the box.
>>>>
>>>> Believe me, if you are used to use AffineTransform objects, you will
>>>> use them forever.
>>>>
>>>> Hope this helps
>>>> Cheers
>>>> Christian
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> Quoting andrea antonello <[email protected]>:
>>>>
>>>>> Hi Tommaso,
>>>>> the easiest way to do a rotation for example is:
>>>>>
>>>>> Coordinate ancorPoint = ...;
>>>>> AffineTransform affineTransform =
>>>>> AffineTransform.getRotateInstance(angleRad, ancorPoint.x,
>>>>> ancorPoint.y);
>>>>> MathTransform mathTransform = new AffineTransform2D(affineTransform);
>>>>>
>>>>> Point point = ...point to rotate;
>>>>> Geometry rotatedPoint = JTS.transform(point, mathTransform);
>>>>>
>>>>> Where point can be any geometry.
>>>>>
>>>>> Does that help?
>>>>>
>>>>> Ciao
>>>>> Andrea
>>>>>
>>>>>
>>>>> On Wed, Aug 18, 2010 at 11:26 PM, tommaso   
>>>>> <[email protected]> wrote:
>>>>>> Hallo List,
>>>>>>
>>>>>> I would like to perform some geometry transformations on polygons, i.e
>>>>>> rotate about a point, scale and translate.
>>>>>>
>>>>>> So I create the polygon:
>>>>>>
>>>>>> import com.vividsolutions.jts.geom.Coordinate
>>>>>> import org.geotools.geometry.jts.JTSFactoryFinder
>>>>>> import com.vividsolutions.jts.geom.GeometryFactory
>>>>>> import com.vividsolutions.jts.geom.LinearRing
>>>>>> import com.vividsolutions.jts.geom.Polygon
>>>>>>
>>>>>>         GeometryFactory geometryFactory =
>>>>>> JTSFactoryFinder.getGeometryFactory( null );
>>>>>>
>>>>>>         Coordinate[] coords  = [new Coordinate(0, 0), new    
>>>>>> Coordinate(2, 0),
>>>>>> new Coordinate(2, 2), new Coordinate(0, 2), new Coordinate(0, 0)]
>>>>>>         LinearRing ring = new LinearRing(coords, geometryFactory)
>>>>>>         Polygon polygon = geometryFactory.createPolygon(ring)
>>>>>>
>>>>>> I guess I have to use AffineTransform
>>>>>> (com.vividsolutions.jts.geom.util.AffineTransformation ?) but I  
>>>>>>  don't know
>>>>>> exactly how.
>>>>>> A code example or a link to a tutorial were very appreciated.
>>>>>>
>>>>>> Cheers,
>>>>>> Tom
>>>>>> ------------------------------------------------------------------------------
>>>>>> This SF.net email is sponsored by
>>>>>>
>>>>>> Make an app they can't live without
>>>>>> Enter the BlackBerry Developer Challenge
>>>>>> http://p.sf.net/sfu/RIM-dev2dev
>>>>>> _______________________________________________
>>>>>> Geotools-gt2-users mailing list
>>>>>> [email protected]
>>>>>> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>>>>>>
>>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> This SF.net email is sponsored by
>>>>>
>>>>> Make an app they can't live without
>>>>> Enter the BlackBerry Developer Challenge
>>>>> http://p.sf.net/sfu/RIM-dev2dev
>>>>> _______________________________________________
>>>>> Geotools-gt2-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>>>>>
>>>>
>>>>
>>>>
>>>> ----------------------------------------------------------------
>>>> This message was sent using IMP, the Internet Messaging Program.
>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> This SF.net email is sponsored by
>>>>
>>>> Make an app they can't live without
>>>> Enter the BlackBerry Developer Challenge
>>>> http://p.sf.net/sfu/RIM-dev2dev
>>>> _______________________________________________
>>>> Geotools-gt2-users mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users
>>>>
>>>
>>
>>
>>
>> ----------------------------------------------------------------
>> This message was sent using IMP, the Internet Messaging Program.
>>
>>
>
>



----------------------------------------------------------------
This message was sent using IMP, the Internet Messaging Program.



------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
Geotools-gt2-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-gt2-users

Reply via email to