本人最近做一个地图绘制软件(Map Maker),就是像MS Visio一样。 要求能够放置图标来表示建筑物,而且这些图标有可以用鼠标改变大小,方向和位置。所以我想采用平时作图软件常用的方法,就是在图标四周添加 “控制句柄” (如下图所示),来实现对图标的操作。现在,图标的大小,方向和位置的改变都可以用AffineTransform来实现了。代码如下:
 at.setToTranslation(x, y);//x,y 为图标左上角的坐标值。所有图标都为矩形。
 at.rotate(radian, xScale*width/2, yScale*height/2);
 at.scale(xScale, yScale);
可是,问题是 放缩 操作是以左上角为基准点放缩的,所以导致了相片的中心点位置发生的偏移。 
回到要问的问题,那就如下图,假设一个图标没有放缩前,右下角的“控制句柄”的中心点坐标是(X1,Y1)。现在,上图经过上述AffineTransform的转换后,如何计算这个点的坐标呢?(见下图)
在此,先谢过!!

解决方案 »

  1.   

    其实,这主要是由于我搞不懂AffineTransform的工作原理。要说那个变换矩阵,我也看过了,可是没理解。还有就是,我一直没搞懂JAVA到底用了几个坐标空间。我到网上查到AffineTransfrom的是从user space到device space的转换。那请问,我用MouseEvent的getPoint()获得的坐标是user space上的呢,还是在device space上的呢?
      

  2.   

    http://pd102.mofile.com/p/1/free/2008/9/30/B/B3JYMMMS31_105.jpghttp://pd102.mofile.com/p/1/free/2008/9/30/Z/ZW6PU3XKCI_105.jpghttp://pd102.mofile.com/p/1/free/2008/9/30/O/OZ4C8YH31H_105.jpg
    上面三个图片不知道为什么显示不出来,这里附上三个地址链接。以上问题困扰我很久了,试了很多办法也没法解决。只好请高手出手了,感激不尽!!