2013-03-31 93 views
3

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

problem illustration

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

+0

您可以向朋友祈祷或将此工作交给朋友......大多数UI引擎都支持旋转,平移和缩放,并提及数学... – Aubin

+0

@Aubin当然,我不想画出形状,只是计算使用一些我不知道的Java转换工具(没有进入分析几何)缺少的坐标。 – kenor

+0

完成了程序,感谢java.awt.geom。 – Aubin

回答

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