2013-03-31 85 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