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. ------------------------------------------------------------------------------ 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
