转换形状

时间:2013-03-31 20:51:56

标签: java transformation shape

我想以特定方式连接两点 - 请参阅第一张图片。我知道所有四点的坐标。然后我需要将整个形状移动到坐标[0,0]并旋转它,因此主要的两个点都在x轴上(参见第二张图片)。接下来我需要“挤压” x轴上的形状,以便最后一个点具有坐标[0,1](参见最后一张图片)。

problem illustration

我的问题是 - 如何在不进入手动分析数学的情况下有效地计算Java中间两点的坐标?

1 个答案:

答案 0 :(得分:2)

java.awt.geom.AffineTransform可能是一个起点。

此程序应用3次转换(按相反顺序):

import java.awt.geom.AffineTransform;

public class TransRotScal {

   public static void main( String[] args ) {
      double theta = Math.atan2( -15.0, 40.0 );
      AffineTransform trans = new AffineTransform(); // Identity
      trans.scale( 1/43.0, 1.0 );
      trans.rotate( theta );
      trans.translate( -10, -20 );
      double[] in = {
         10, 20,
         10, 30,
         50, 30,
         50, 35
      };
      double[] out = new double[in.length];
      trans.transform( in, 0, out, 0, in.length/2 );
      for( int ptNdx = 0; ptNdx < out.length; ptNdx += 2 ) {
         System.out.printf( "{%7.4f, %7.4f }\n", out[ptNdx], out[ptNdx+1]);
      }
   }
}

输出:

{ 0,0000,  0,0000 }
{ 0,0817,  9,3633 }
{ 0,9527, -4,6816 }
{ 0,9935,  0,0000 }

为了给出这个答案,我写了一个小程序,但我希望更简单一个,为此,我已经发布了这个问题:Affine transforms for graph, not for text and labels