特定の方法で接続したい 2 つのポイントがあります。最初の図を参照してください。4点すべての座標を知っています。次に、形状全体を座標 [0, 0] に移動して回転させる必要があるため、主要な 2 つの点は両方とも x 軸上にあります (2 番目の図を参照)。次に、最後の点の座標が [0, 1] になるように、 x 軸の形状のみを「絞る」必要があります (最後の図を参照)。
私の質問は、Java で中央の 2 点の座標を効果的に計算するには、手動の分析計算を行わずにどうすればよいですか?
特定の方法で接続したい 2 つのポイントがあります。最初の図を参照してください。4点すべての座標を知っています。次に、形状全体を座標 [0, 0] に移動して回転させる必要があるため、主要な 2 つの点は両方とも x 軸上にあります (2 番目の図を参照)。次に、最後の点の座標が [0, 1] になるように、 x 軸の形状のみを「絞る」必要があります (最後の図を参照)。
私の質問は、Java で中央の 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 .