public class AffineTransform extends Object implements Cloneable, Serializable
AffineTransform
クラスは、線の直線性と平行性を保ったままで 2 次元座標間の線形マッピングを実行する 2 次元アフィン変換を表現します。アフィン変換は、一連の平行移動、スケーリング、反転、回転、変形により構成されます。
このような座標変換は、暗黙に指定された [ 0 0 1 ] という最終行を持つ 3 行× 3 列の行列によって表現できます。この行列は、次の処理に従って、座標を列ベクトルと見なし、座標ベクトルを行列で乗算することによって、転送元座標 (x,y)
を転送先座標 (x',y')
に変換します。
[ x'] [ m00 m01 m02 ] [ x ] [ m00x + m01y + m02 ] [ y'] = [ m10 m11 m12 ] [ y ] = [ m10x + m11y + m12 ] [ 1 ] [ 0 0 1 ] [ 1 ] [ 1 ]
AffineTransform
クラスの rotate
メソッドのバリエーションの中には、倍精度値の引数で回転角度 (ラジアン) を指定するものがあります。これらのメソッドには、約 90 度 (および 180 度、270 度、360 度などの倍数) の回転に対して特殊な処理が用意されており、一般的な四分円回転はより効率的に処理されます。この特殊な処理により、90 度の倍数に近似的な角度を正確に 90 度の倍数として扱うことができます。90 度の数倍程度である場合、四分円回転として扱われる角度の範囲は約 0.00000121 度の幅です。このセクションでは、このような特殊な処理が必要になる理由と、その実装方法について説明します。
90 度はラジアンで PI/2
と表され、かつ PI は超越数 (そのため無理数) であるため、90 度の倍数をラジアンで測定された正確な倍精度値として厳密に表すことはできません。そのため、有限の倍数度値を使用して四分円回転 (90、180、270、360 度) を表現することは理論的に不可能です。倍精度浮動小数点値を使用すると、PI/2
の 0 以外の倍数に非常に近い値を得ることができますが、正弦 (sin) または余弦 (cos) が正確に 0.0、1.0、または -1.0 になるだけの十分に近い値が得られるわけではありません。そのため、Math.sin(0.0)
以外のすべての場合について、Math.sin()
および Math.cos()
の実装が 0.0 を返すことはありません。ただし同様の実装であっても、90 度の倍数ごとに一定範囲内の値については、ちょうど 1.0 および -1.0 を返します。これは、正しい応答が 1.0 または -1.0 に非常に近いため、倍精度の有効数字では、0.0 に近い値の場合と同程度の正確さで差異を表すことができないためです。
これらの問題の最終結果として、これらのラジアンベースの回転操作中の行列変更の値を直接生成するために Math.sin()
メソッドや Math.cos()
メソッドが使用される場合は、正弦や余弦で得られる 0.0 以外の値により発生する行列のわずかな変動のために、結果として得られる変形は rotate(Math.PI/2.0)
のような単純な場合であっても厳密には四分円回転として分類できません。これらの変形が四分円回転として分類されない場合、変形の種類に基づいて後続の操作を最適化しようとするそれ以降のコードは、もっとも汎用的な実装に委託されます。
四分円回転は非常によく行われる操作であるため、回転を変形に適用する場合と得られた変形を座標に適用する場合の両方で、このクラスは四分円回転をある程度早く処理できなければいけません。このような最適化処理を実現するために、ラジアンで計測された回転角度を使用するメソッドでは、四分円回転を意図した角度を検出すると、四分円回転として扱います。そのため、これらのメソッドでは、Math.sin(theta)
または Math.cos(theta)
のどちらかが正確に 1.0 または -1.0 を返す場合に角度 theta を四分円回転として扱います。経験則として、このプロパティーは、Math.PI/2.0
の数倍程度の場合に約 0.0000000211 ラジアン (または 0.00000121 度) の範囲で true を保持します。
修飾子と型 | フィールドと説明 |
---|---|
static int |
TYPE_FLIP
このフラグビットは、このオブジェクトによって定義される変換が、ほかのフラグビットによって指定される変換に加えて、ある軸を中心とする鏡像反転を実行することを示します。鏡像反転により、通常は右手の座標系が左手の座標系に変更されます。
|
static int |
TYPE_GENERAL_ROTATION
このフラグビットは、このオブジェクトによって定義される変換が、ほかのフラグビットによって指定される変換に加えて、任意の角度による回転を実行することを示します。
|
static int |
TYPE_GENERAL_SCALE
このフラグビットは、このオブジェクトによって定義される変換が、ほかのフラグビットによって指定される変換に加えて、汎用的なスケーリングを実行することを示します。
|
static int |
TYPE_GENERAL_TRANSFORM
この定数は、このオブジェクトによって定義される変換が、入力座標の任意の変換を実行することを示します。
|
static int |
TYPE_IDENTITY
この定数は、このオブジェクトによって定義される変換が恒等変換であることを示します。
|
static int |
TYPE_MASK_ROTATION
この定数は、回転フラグビットのいずれかのビットマスクです。
|
static int |
TYPE_MASK_SCALE
この定数は、スケールフラグビットのいずれかのビットマスクです。
|
static int |
TYPE_QUADRANT_ROTATION
このフラグビットは、このオブジェクトによって定義される変換が、ほかのフラグビットによって指定される変換に加えて、90 度の倍数で四分円回転を実行することを示します。
|
static int |
TYPE_TRANSLATION
このフラグビットは、このオブジェクトによって定義される変換が、ほかのフラグビットによって指定される変換に加えて、1 つの移動を実行することを示します。
|
static int |
TYPE_UNIFORM_SCALE
このフラグビットは、このオブジェクトによって定義される変換が、ほかのフラグビットによって指定される変換に加えて、一様なスケーリングを実行することを示します。
|
コンストラクタと説明 |
---|
AffineTransform()
恒等変換を表現する新しい
AffineTransform を構築します。 |
AffineTransform(AffineTransform Tx)
指定された
AffineTransform オブジェクトのコピーである、新しい AffineTransform を構築します。 |
AffineTransform(double[] flatmatrix)
3×3 変換行列の 4 つの非平行移動エントリまたは 6 つの指定可能エントリのどちらかを表現する倍精度値の配列から、新しい
AffineTransform を構築します。 |
AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
3×3 変換行列の 6 つの指定可能エントリを表現する 6 つの倍精度値から、新しい
AffineTransform を構築します。 |
AffineTransform(float[] flatmatrix)
3×3 変換行列の 4 つの非平行移動エントリまたは 6 つの指定可能エントリのどちらかを表現する浮動小数点値の配列から、新しい
AffineTransform を構築します。 |
AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12)
3×3 変換行列の 6 つの指定可能エントリを表現する 6 つの浮動小数点値から、新しい
AffineTransform を構築します。 |
修飾子と型 | メソッドと説明 |
---|---|
Object |
clone()
この
AffineTransform オブジェクトのコピーを返します。 |
void |
concatenate(AffineTransform Tx)
Tx によって元のユーザー空間にマップされた新しいユーザー空間を提供するためにもっとも一般的に使用される方法で、AffineTransform Tx をこの AffineTransform Cx に連結します。 |
AffineTransform |
createInverse()
逆変換を表現する
AffineTransform オブジェクトを返します。 |
Shape |
createTransformedShape(Shape pSrc)
指定された
Shape がこの変換によって変換されたあと、その幾何学的図形で定義された新しい Shape オブジェクトを返します。 |
void |
deltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
この変換によって相対的な距離ベクトルの配列を変換します。
|
Point2D |
deltaTransform(Point2D ptSrc, Point2D ptDst)
ptSrc によって指定される相対的な距離ベクトルを変換し、その結果を ptDst に格納します。 |
boolean |
equals(Object obj)
この
AffineTransform が、指定された引数と同じアフィン座標変換を表現する場合に true を返します。 |
double |
getDeterminant()
変換の行列表現の行列式を返します。
|
void |
getMatrix(double[] flatmatrix)
3×3 アフィン変換行列内の 6 つの指定可能な値を取り出し、倍精度値の配列に配置します。
|
static AffineTransform |
getQuadrantRotateInstance(int numquadrants)
指定された数の四分円だけ座標を回転させる変換を返します。
|
static AffineTransform |
getQuadrantRotateInstance(int numquadrants, double anchorx, double anchory)
指定されたアンカーポイントを中心にして、指定された数の四分円だけ座標を回転させる変換を返します。
|
static AffineTransform |
getRotateInstance(double theta)
回転変換を表現する変換を返します。
|
static AffineTransform |
getRotateInstance(double vecx, double vecy)
回転ベクトルに従って座標を回転させる変換を返します。
|
static AffineTransform |
getRotateInstance(double theta, double anchorx, double anchory)
アンカーポイントを中心にして座標を回転させる変換を返します。
|
static AffineTransform |
getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
回転ベクトルに従って、アンカーポイントを中心にして座標を回転させる変換を返します。
|
static AffineTransform |
getScaleInstance(double sx, double sy)
スケーリング変換を表現する変換を返します。
|
double |
getScaleX()
3×3 アフィン変換行列の X 座標スケーリング要素 (m00) を返します。
|
double |
getScaleY()
3×3 アフィン変換行列の Y 座標スケーリング要素 (m11) を返します。
|
static AffineTransform |
getShearInstance(double shx, double shy)
シャーリング変換を表現する変換を返します。
|
double |
getShearX()
3×3 アフィン変換行列の X 座標シャーリング要素 (m01) を返します。
|
double |
getShearY()
3×3 アフィン変換行列の Y 座標シャーリング要素 (m10) を返します。
|
static AffineTransform |
getTranslateInstance(double tx, double ty)
平行移動変換を表現する変換を返します。
|
double |
getTranslateX()
3×3 アフィン変換行列の平行移動要素 (m02) の X 座標を返します。
|
double |
getTranslateY()
3×3 アフィン変換行列の平行移動要素 (m12) の Y 座標を返します。
|
int |
getType()
この変換の変換プロパティーを記述するフラグビットを返します。
|
int |
hashCode()
この変換のハッシュコードを返します。
|
void |
inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
この変換によって倍精度の座標の配列を逆変換します。
|
Point2D |
inverseTransform(Point2D ptSrc, Point2D ptDst)
指定された
ptSrc を逆変換して、その結果を ptDst に格納します。 |
void |
invert()
この変換を自身の逆変換に設定します。
|
boolean |
isIdentity()
この
AffineTransform が恒等変換である場合に true を返します。 |
void |
preConcatenate(AffineTransform Tx)
Tx が既存のユーザー空間ではなく絶対ピクセル空間を基準にして座標変換を変更するなど一般にはあまり使用されない方法で、AffineTransform Tx をこの AffineTransform Cx に連結します。 |
void |
quadrantRotate(int numquadrants)
この変換を、指定された数の四分円だけ座標を回転させる変換と連結します。
|
void |
quadrantRotate(int numquadrants, double anchorx, double anchory)
この変換を、指定されたアンカーポイントを中心にして、指定された数の四分円だけ座標を回転させる変換と連結します。
|
void |
rotate(double theta)
この変換を回転変換に連結します。
|
void |
rotate(double vecx, double vecy)
この変換を、回転ベクトルに従って座標を回転させる変換と連結します。
|
void |
rotate(double theta, double anchorx, double anchory)
この変換を、アンカーポイントを中心にして座標を回転する変換と連結します。
|
void |
rotate(double vecx, double vecy, double anchorx, double anchory)
この変換を、回転ベクトルに従って、アンカーポイントを中心にして座標を回転させる変換と連結します。
|
void |
scale(double sx, double sy)
この変換をスケーリング変換に連結します。
|
void |
setToIdentity()
この変換を恒等変換に設定し直します。
|
void |
setToQuadrantRotation(int numquadrants)
この変換を、指定された数の四分円だけ座標を回転させる回転変換に設定します。
|
void |
setToQuadrantRotation(int numquadrants, double anchorx, double anchory)
この変換を、指定されたアンカーポイントを中心にして、指定された数の四分円だけ座標を回転させる、平行移動後の回転変換に設定します。
|
void |
setToRotation(double theta)
この変換を回転変換に設定します。
|
void |
setToRotation(double vecx, double vecy)
この変換を、回転ベクトルに従って座標を回転させる回転変換に設定します。
|
void |
setToRotation(double theta, double anchorx, double anchory)
この変換を平行移動後の回転変換に設定します。
|
void |
setToRotation(double vecx, double vecy, double anchorx, double anchory)
この変換を、回転ベクトルに従って、アンカーポイントを中心にして座標を回転させる回転変換に設定します。
|
void |
setToScale(double sx, double sy)
この変換をスケーリング変換に設定します。
|
void |
setToShear(double shx, double shy)
この変換をシャーリング変換に設定します。
|
void |
setToTranslation(double tx, double ty)
この変換を平行移動変換に設定します。
|
void |
setTransform(AffineTransform Tx)
この変換を、指定された
AffineTransform オブジェクト内の変換のコピーに設定します。 |
void |
setTransform(double m00, double m10, double m01, double m11, double m02, double m12)
この変換を 6 つの倍精度値によって指定されている行列に設定します。
|
void |
shear(double shx, double shy)
この変換をシャーリング変換に連結します。
|
String |
toString()
この
Object の値を表す String を返します。 |
void |
transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
この変換によって、倍精度の座標の配列を変換します。
|
void |
transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
この変換によって倍精度の座標の配列を変換し、結果を float 値の配列に格納します。
|
void |
transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
この変換によって浮動小数点の座標の配列を変換し、結果を double 値の配列に格納します。
|
void |
transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
この変換によって、浮動小数点の座標の配列を変換します。
|
void |
transform(Point2D[] ptSrc, int srcOff, Point2D[] ptDst, int dstOff, int numPts)
この変換によってポイントオブジェクトの配列を変換します。
|
Point2D |
transform(Point2D ptSrc, Point2D ptDst)
指定された
ptSrc を変換して、その結果を ptDst に格納します。 |
void |
translate(double tx, double ty)
この変換を平行移動変換に連結します。
|
public static final int TYPE_IDENTITY
public static final int TYPE_TRANSLATION
public static final int TYPE_UNIFORM_SCALE
public static final int TYPE_GENERAL_SCALE
public static final int TYPE_MASK_SCALE
TYPE_UNIFORM_SCALE
、TYPE_GENERAL_SCALE
、定数フィールド値public static final int TYPE_FLIP
public static final int TYPE_QUADRANT_ROTATION
public static final int TYPE_GENERAL_ROTATION
public static final int TYPE_MASK_ROTATION
TYPE_QUADRANT_ROTATION
、TYPE_GENERAL_ROTATION
、定数フィールド値public static final int TYPE_GENERAL_TRANSFORM
public AffineTransform()
AffineTransform
を構築します。public AffineTransform(AffineTransform Tx)
AffineTransform
オブジェクトのコピーである、新しい AffineTransform
を構築します。Tx
- コピーする AffineTransform
オブジェクト@ConstructorProperties(value={"scaleX","shearY","shearX","scaleY","translateX","translateY"}) public AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12)
AffineTransform
を構築します。m00
- 3×3 行列の X 座標スケーリング要素m10
- 3×3 行列の Y 座標シャーリング要素m01
- 3×3 行列の X 座標シャーリング要素m11
- 3×3 行列の Y 座標スケーリング要素m02
- 3×3 行列の X 座標平行移動要素m12
- 3×3 行列の Y 座標平行移動要素public AffineTransform(float[] flatmatrix)
AffineTransform
を構築します。各値は、配列から { m00 m10 m01 m11 [m02 m12]} という形式で取り出されます。flatmatrix
- 新しい AffineTransform
オブジェクトに設定される値を含む float 配列。配列の長さは 4 以上と見なされます。配列の長さが 6 より小さい場合、最初の 4 つの値のみが取得されます。配列の長さが 6 より大きい場合、最初の 6 つの値が取得される。public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
AffineTransform
を構築します。m00
- 3×3 行列の X 座標スケーリング要素m10
- 3×3 行列の Y 座標シャーリング要素m01
- 3×3 行列の X 座標シャーリング要素m11
- 3×3 行列の Y 座標スケーリング要素m02
- 3×3 行列の X 座標平行移動要素m12
- 3×3 行列の Y 座標平行移動要素public AffineTransform(double[] flatmatrix)
AffineTransform
を構築します。各値は、配列から { m00 m10 m01 m11 [m02 m12]} という形式で取り出されます。flatmatrix
- 新しい AffineTransform
オブジェクトに設定される値を含む double 配列。配列の長さは 4 以上と見なされます。配列の長さが 6 より小さい場合、最初の 4 つの値のみが取得されます。配列の長さが 6 より大きい場合、最初の 6 つの値が取得される。public static AffineTransform getTranslateInstance(double tx, double ty)
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- 座標が X 軸方向で平行移動される距離ty
- 座標が Y 軸方向で平行移動される距離AffineTransform
オブジェクト。public static AffineTransform getRotateInstance(double theta)
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]正の角度 theta で回転すると、正の X 軸の点が正の Y 軸に向かって回転します。前述の「90 度回転の処理」の説明も参照してください。
theta
- ラジアンで計測した回転角度AffineTransform
オブジェクト。public static AffineTransform getRotateInstance(double theta, double anchorx, double anchory)
この操作は、次の一連の呼び出しに相当します。
AffineTransform Tx = new AffineTransform(); Tx.translate(anchorx, anchory); // S3: final translation Tx.rotate(theta); // S2: rotate around anchor Tx.translate(-anchorx, -anchory); // S1: translate anchor to origin返される変換の行列表現は、次のようになります。
[ cos(theta) -sin(theta) x-x*cos+y*sin ] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ]正の角度 theta で回転すると、正の X 軸の点が正の Y 軸に向かって回転します。前述の「90 度回転の処理」の説明も参照してください。
theta
- ラジアンで計測した回転角度anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標AffineTransform
オブジェクト。public static AffineTransform getRotateInstance(double vecx, double vecy)
vecx
と vecy
の両方が 0.0 の場合、恒等変換が返されます。この操作は、次を呼び出すのと同等です。
AffineTransform.getRotateInstance(Math.atan2(vecy, vecx));
vecx
- 回転ベクトルの X 座標vecy
- 回転ベクトルの Y 座標AffineTransform
オブジェクト。public static AffineTransform getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
vecx
と vecy
の両方が 0.0 の場合、恒等変換が返されます。この操作は、次を呼び出すのと同等です。
AffineTransform.getRotateInstance(Math.atan2(vecy, vecx), anchorx, anchory);
vecx
- 回転ベクトルの X 座標vecy
- 回転ベクトルの Y 座標anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標AffineTransform
オブジェクト。public static AffineTransform getQuadrantRotateInstance(int numquadrants)
AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0);正の数の四分円だけ回転すると、正の X 軸の点が正の Y 軸に向かって回転します。
numquadrants
- 回転させる 90 度の弧の数AffineTransform
オブジェクト。public static AffineTransform getQuadrantRotateInstance(int numquadrants, double anchorx, double anchory)
AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0, anchorx, anchory);正の数の四分円だけ回転すると、正の X 軸の点が正の Y 軸に向かって回転します。
numquadrants
- 回転させる 90 度の弧の数anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標AffineTransform
オブジェクト。public static AffineTransform getScaleInstance(double sx, double sy)
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- 座標を X 軸方向にスケーリングするために使う係数sy
- 座標を Y 軸方向にスケーリングするために使う係数AffineTransform
オブジェクト。public static AffineTransform getShearInstance(double shx, double shy)
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- Y 座標の係数で座標を正の X 軸の方向に移動するために使う乗数shy
- X 座標の係数で座標を正の Y 軸の方向に移動するために使う乗数AffineTransform
オブジェクト。public int getType()
TYPE_IDENTITY
, TYPE_TRANSLATION
, TYPE_UNIFORM_SCALE
, TYPE_GENERAL_SCALE
, TYPE_QUADRANT_ROTATION
, TYPE_GENERAL_ROTATION
, TYPE_GENERAL_TRANSFORM
public double getDeterminant()
行列式がゼロでない場合、この変換には逆変換が存在し、逆変換に依存するさまざまなメソッドは NoninvertibleTransformException
をスローする必要がありません。行列式がゼロの場合、この変換はすべての入力座標を線または点にマップするので逆変換できません。行列式が十分にゼロに近い場合、逆変換オペレーションは意味のある結果を出せるだけの精度を確保できない場合があります。
getType
メソッドで示されるように、この変換が一様なスケーリングを表現する場合、行列式はすべての点が原点を基準に拡張または縮小される一様なスケーリング係数の 2 乗も表します。この変換が一様でないスケーリングまたはより汎用的な変換を表現する場合、行列式が表す値は、逆変換が可能かどうかを判定するためだけに使用できます。
算術的に、行列式は次の公式で計算されます。
| m00 m01 m02 | | m10 m11 m12 | = m00 * m11 - m01 * m10 | 0 0 1 |
getType()
, createInverse()
, inverseTransform(java.awt.geom.Point2D, java.awt.geom.Point2D)
, TYPE_UNIFORM_SCALE
public void getMatrix(double[] flatmatrix)
flatmatrix
- 戻り値を格納するために使用される double 配列。getScaleX()
, getScaleY()
, getShearX()
, getShearY()
, getTranslateX()
, getTranslateY()
public double getScaleX()
getMatrix(double[])
public double getScaleY()
getMatrix(double[])
public double getShearX()
getMatrix(double[])
public double getShearY()
getMatrix(double[])
public double getTranslateX()
getMatrix(double[])
public double getTranslateY()
getMatrix(double[])
public void translate(double tx, double ty)
AffineTransform
です。
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- 座標が X 軸方向で平行移動される距離ty
- 座標が Y 軸方向で平行移動される距離public void rotate(double theta)
AffineTransform
です。
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]正の角度 theta で回転すると、正の X 軸の点が正の Y 軸に向かって回転します。前述の「90 度回転の処理」の説明も参照してください。
theta
- ラジアンで計測した回転角度public void rotate(double theta, double anchorx, double anchory)
この操作は、次の一連の呼び出しに相当します。
translate(anchorx, anchory); // S3: final translation rotate(theta); // S2: rotate around anchor translate(-anchorx, -anchory); // S1: translate anchor to origin正の角度 theta で回転すると、正の X 軸の点が正の Y 軸に向かって回転します。前述の「90 度回転の処理」の説明も参照してください。
theta
- ラジアンで計測した回転角度anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標public void rotate(double vecx, double vecy)
vecx
と vecy
の両方が 0.0 の場合、この変換に追加の回転は行われません。この操作は、次を呼び出すのと同等です。
rotate(Math.atan2(vecy, vecx));
vecx
- 回転ベクトルの X 座標vecy
- 回転ベクトルの Y 座標public void rotate(double vecx, double vecy, double anchorx, double anchory)
vecx
と vecy
の両方が 0.0 の場合、変換は決して変更されません。このメソッドは、次を呼び出すのと同等です。
rotate(Math.atan2(vecy, vecx), anchorx, anchory);
vecx
- 回転ベクトルの X 座標vecy
- 回転ベクトルの Y 座標anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標public void quadrantRotate(int numquadrants)
rotate(numquadrants * Math.PI / 2.0);正の数の四分円だけ回転すると、正の X 軸の点が正の Y 軸に向かって回転します。
numquadrants
- 回転させる 90 度の弧の数public void quadrantRotate(int numquadrants, double anchorx, double anchory)
rotate(numquadrants * Math.PI / 2.0, anchorx, anchory);正の数の四分円だけ回転すると、正の X 軸の点が正の Y 軸に向かって回転します。
numquadrants
- 回転させる 90 度の弧の数anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標public void scale(double sx, double sy)
AffineTransform
です。
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- 座標を X 軸方向にスケーリングするために使う係数sy
- 座標を Y 軸方向にスケーリングするために使う係数public void shear(double shx, double shy)
AffineTransform
です。
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- Y 座標の係数で座標を正の X 軸の方向に移動するために使う乗数shy
- X 座標の係数で座標を正の Y 軸の方向に移動するために使う乗数public void setToIdentity()
public void setToTranslation(double tx, double ty)
[ 1 0 tx ] [ 0 1 ty ] [ 0 0 1 ]
tx
- 座標が X 軸方向で平行移動される距離ty
- 座標が Y 軸方向で平行移動される距離public void setToRotation(double theta)
[ cos(theta) -sin(theta) 0 ] [ sin(theta) cos(theta) 0 ] [ 0 0 1 ]正の角度 theta で回転すると、正の X 軸の点が正の Y 軸に向かって回転します。前述の「90 度回転の処理」の説明も参照してください。
theta
- ラジアンで計測した回転角度public void setToRotation(double theta, double anchorx, double anchory)
この操作は、次の一連の呼び出しに相当します。
setToTranslation(anchorx, anchory); // S3: final translation rotate(theta); // S2: rotate around anchor translate(-anchorx, -anchory); // S1: translate anchor to originこの変換を表現する行列は次のようになります。
[ cos(theta) -sin(theta) x-x*cos+y*sin ] [ sin(theta) cos(theta) y-x*sin-y*cos ] [ 0 0 1 ]正の角度 theta で回転すると、正の X 軸の点が正の Y 軸に向かって回転します。前述の「90 度回転の処理」の説明も参照してください。
theta
- ラジアンで計測した回転角度anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標public void setToRotation(double vecx, double vecy)
vecx
と vecy
の両方が 0.0 の場合、変換は恒等変換に設定されます。この操作は、次を呼び出すのと同等です。
setToRotation(Math.atan2(vecy, vecx));
vecx
- 回転ベクトルの X 座標vecy
- 回転ベクトルの Y 座標public void setToRotation(double vecx, double vecy, double anchorx, double anchory)
vecx
と vecy
の両方が 0.0 の場合、変換は恒等変換に設定されます。この操作は、次を呼び出すのと同等です。
setToTranslation(Math.atan2(vecy, vecx), anchorx, anchory);
vecx
- 回転ベクトルの X 座標vecy
- 回転ベクトルの Y 座標anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標public void setToQuadrantRotation(int numquadrants)
setToRotation(numquadrants * Math.PI / 2.0);正の数の四分円だけ回転すると、正の X 軸の点が正の Y 軸に向かって回転します。
numquadrants
- 回転させる 90 度の弧の数public void setToQuadrantRotation(int numquadrants, double anchorx, double anchory)
setToRotation(numquadrants * Math.PI / 2.0, anchorx, anchory);正の数の四分円だけ回転すると、正の X 軸の点が正の Y 軸に向かって回転します。
numquadrants
- 回転させる 90 度の弧の数anchorx
- 回転のアンカーポイントの X 座標anchory
- 回転のアンカーポイントの Y 座標public void setToScale(double sx, double sy)
[ sx 0 0 ] [ 0 sy 0 ] [ 0 0 1 ]
sx
- 座標を X 軸方向にスケーリングするために使う係数sy
- 座標を Y 軸方向にスケーリングするために使う係数public void setToShear(double shx, double shy)
[ 1 shx 0 ] [ shy 1 0 ] [ 0 0 1 ]
shx
- Y 座標の係数で座標を正の X 軸の方向に移動するために使う乗数shy
- X 座標の係数で座標を正の Y 軸の方向に移動するために使う乗数public void setTransform(AffineTransform Tx)
AffineTransform
オブジェクト内の変換のコピーに設定します。Tx
- 変換のコピー元の AffineTransform
オブジェクトpublic void setTransform(double m00, double m10, double m01, double m11, double m02, double m12)
m00
- 3×3 行列の X 座標スケーリング要素m10
- 3×3 行列の Y 座標シャーリング要素m01
- 3×3 行列の X 座標シャーリング要素m11
- 3×3 行列の Y 座標スケーリング要素m02
- 3×3 行列の X 座標平行移動要素m12
- 3×3 行列の Y 座標平行移動要素public void concatenate(AffineTransform Tx)
Tx
によって元のユーザー空間にマップされた新しいユーザー空間を提供するためにもっとも一般的に使用される方法で、AffineTransform
Tx
をこの AffineTransform
Cx に連結します。Cx を更新すると、結合された変換を実行できます。更新された変換 Cx' で点 p を変換することは、Cx'(p) = Cx(Tx(p)) のように、最初に Tx
で p を変換してから、その結果を元の変換 Cx で変換することに相当します。行列表記では、この変換 Cx が行列 [this] で表され、Tx
が行列 [Tx] で表される場合、このメソッドは次の処理を行います。
[this] = [this] x [Tx]
Tx
- この AffineTransform
オブジェクトに連結される AffineTransform
オブジェクト。preConcatenate(java.awt.geom.AffineTransform)
public void preConcatenate(AffineTransform Tx)
Tx
が既存のユーザー空間ではなく絶対ピクセル空間を基準にして座標変換を変更するなど一般にはあまり使用されない方法で、AffineTransform
Tx
をこの AffineTransform
Cx に連結します。Cx を更新すると、結合された変換を実行できます。更新された変換 Cx' で点 p を変換することは、Cx'(p) = Tx(Cx(p)) のように、最初に元の変換 Cx で p を変換してから、その結果を Tx
で変換することに相当します。行列表記では、この変換 Cx が行列 [this] で表され、Tx
が行列 [Tx] で表される場合、このメソッドは次の処理を行います。
[this] = [Tx] x [this]
Tx
- この AffineTransform
オブジェクトに連結される AffineTransform
オブジェクト。concatenate(java.awt.geom.AffineTransform)
public AffineTransform createInverse() throws NoninvertibleTransformException
AffineTransform
オブジェクトを返します。この変換 Tx の逆変換 Tx' は、Tx によって変換された座標をその元の座標にマップして戻します。つまり、Tx'(Tx(p)) = p = Tx(Tx'(p)) です。
この変換がすべての座標を点や線にマップする場合、変換は逆写像を持ちません。これは、転送先の点や線にない座標が逆写像を持たないためです。getDeterminant
メソッドを使うと、この変換が逆写像を持つかどうかを判定できます。この変換が逆写像を持たない場合、createInverse
メソッドが呼び出されると、例外がスローされます。
AffineTransform
オブジェクト。NoninvertibleTransformException
- 行列を反転できない場合。getDeterminant()
public void invert() throws NoninvertibleTransformException
この変換がすべての座標を点や線にマップする場合、変換は逆写像を持ちません。これは、転送先の点や線にない座標が逆写像を持たないためです。getDeterminant
メソッドを使うと、この変換が逆写像を持つかどうかを判定できます。この変換が逆写像を持たない場合、invert
メソッドが呼び出されると、例外がスローされます。
NoninvertibleTransformException
- 行列を反転できない場合。getDeterminant()
public Point2D transform(Point2D ptSrc, Point2D ptDst)
ptSrc
を変換して、その結果を ptDst
に格納します。ptDst
が null
の場合は、新しい Point2D
オブジェクトが割り当てられてから、変換の結果がこのオブジェクトに格納されます。どちらの場合も、便宜上、変換後の点を格納している ptDst
が返されます。ptSrc
と ptDst
が同じオブジェクトの場合、入力点は変換後の点で適切に上書きされます。ptSrc
- 変換される指定された Point2D
ptDst
- ptSrc
を変換した結果を格納する指定された Point2D
ptSrc
を変換し、その結果を ptDst
に格納したあとの ptDst
。public void transform(Point2D[] ptSrc, int srcOff, Point2D[] ptDst, int dstOff, int numPts)
ptDst
配列のいずれかの要素が null
である場合は、新しい Point2D
オブジェクトが割り当てられ、変換の結果が格納される前にその要素に格納されます。
このメソッドでは、結果を、転送元配列のそれ以降の計算の転送元として使用される Point2D
オブジェクトに格納することにより発生する問題を回避するための予防措置が何も取られていません。このメソッドでは、指定された Point2D
オブジェクトが同じ 1 つの点変換操作の転送元と転送先の両方である場合、別のオペランドの上に結果が格納されないようにするために、計算が完了するまで結果が格納されないことが保証されます。ただし、ある操作の転送先 Point2D
オブジェクトが、転送元配列のそれ以降の別の操作の転送元 Point2D
オブジェクトと同じオブジェクトである場合、その点にある元の座標は変換可能になる前に上書きされます。
ptSrc
- 転送元のポイントオブジェクトを含む配列ptDst
- 変換ポイントオブジェクトが返される配列srcOff
- 転送元配列内の変換される最初のポイントオブジェクトへのオフセットdstOff
- 転送先配列に格納される最初の変換されたポイントオブジェクトの位置へのオフセットnumPts
- 変換されるポイントオブジェクトの数public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
という順序で格納されます。srcPts
- 転送元の点座標が返されている配列。各点は x, y 座標のペアとして格納されます。dstPts
- 変換された点座標が返される配列。各点は x, y 座標のペアとして格納されます。srcOff
- 転送元配列内の変換される最初の点へのオフセットdstOff
- 変換された最初の点が格納される転送先配列内の位置へのオフセットnumPts
- 変換される点の数public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
という順序で格納されます。srcPts
- 転送元の点座標が返されている配列。各点は x, y 座標のペアとして格納されます。dstPts
- 変換された点座標が返される配列。各点は x, y 座標のペアとして格納されます。srcOff
- 転送元配列内の変換される最初の点へのオフセットdstOff
- 変換された最初の点が格納される転送先配列内の位置へのオフセットnumPts
- 変換されるポイントオブジェクトの数public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
という順序で格納されます。srcPts
- 転送元の点座標が返されている配列。各点は x, y 座標のペアとして格納されます。dstPts
- 変換された点座標が返される配列。各点は x, y 座標のペアとして格納されます。srcOff
- 転送元配列内の変換される最初の点へのオフセットdstOff
- 変換された最初の点が格納される転送先配列内の位置へのオフセットnumPts
- 変換される点の数public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn]
という順序で格納されます。srcPts
- 転送元の点座標が返されている配列。各点は x, y 座標のペアとして格納されます。dstPts
- 変換された点座標が返される配列。各点は x, y 座標のペアとして格納されます。srcOff
- 転送元配列内の変換される最初の点へのオフセットdstOff
- 変換された最初の点が格納される転送先配列内の位置へのオフセットnumPts
- 変換されるポイントオブジェクトの数public Point2D inverseTransform(Point2D ptSrc, Point2D ptDst) throws NoninvertibleTransformException
ptSrc
を逆変換して、その結果を ptDst
に格納します。ptDst
が null
の場合、新しい Point2D
オブジェクトが割り当てられてから、変換の結果がこのオブジェクトに格納されます。どちらの場合も、便宜上、変換後の点を格納している ptDst
が返されます。ptSrc
と ptDst
が同じオブジェクトの場合、入力点は変換後の点で適切に上書きされます。ptSrc
- 逆変換される点ptDst
- 結果として得られる変換された点ptDst
。NoninvertibleTransformException
- 行列を反転できない場合。public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws NoninvertibleTransformException
[x0, y0, x1, y1, ..., xn, yn]
という順序で格納されます。srcPts
- 転送元の点座標が返されている配列。各点は x, y 座標のペアとして格納されます。dstPts
- 変換された点座標が返される配列。各点は x, y 座標のペアとして格納されます。srcOff
- 転送元配列内の変換される最初の点へのオフセットdstOff
- 変換された最初の点が格納される転送先配列内の位置へのオフセットnumPts
- 変換されるポイントオブジェクトの数NoninvertibleTransformException
- 行列を反転できない場合。public Point2D deltaTransform(Point2D ptSrc, Point2D ptDst)
ptSrc
によって指定される相対的な距離ベクトルを変換し、その結果を ptDst
に格納します。相対的距離ベクトルは、アフィン変換行列の平行移動コンポーネントを適用することなく、次の式を使って変換されます。
[ x' ] [ m00 m01 (m02) ] [ x ] [ m00x + m01y ] [ y' ] = [ m10 m11 (m12) ] [ y ] = [ m10x + m11y ] [ (1) ] [ (0) (0) ( 1 ) ] [ (1) ] [ (1) ]
ptDst
が null
の場合、新しい Point2D
オブジェクトが割り当てられてから、変換の結果がこのオブジェクトに格納されます。どちらの場合も、便宜上、変換後の点を格納している ptDst
が返されます。ptSrc
と ptDst
が同じオブジェクトの場合、入力点は変換後の点で適切に上書きされます。ptSrc
- デルタ変換される距離ベクトルptDst
- 結果として得られる変換された距離ベクトルptDst
。public void deltaTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[ x' ] [ m00 m01 (m02) ] [ x ] [ m00x + m01y ] [ y' ] = [ m10 m11 (m12) ] [ y ] = [ m10x + m11y ] [ (1) ] [ (0) (0) ( 1 ) ] [ (1) ] [ (1) ]2 つの座標配列セクションは完全に同じか、結果の有効性に影響を与えずに同じ配列のセクションをオーバーラップしたものです。このメソッドは、転送元の座標が変換可能になる前に、それまでのオペレーションによって上書きされないことを保証します。座標は、指定されたオフセットから始まる配列に
[x0, y0, x1, y1, ..., xn, yn]
という順序で格納されます。srcPts
- 転送元の距離ベクトルを含む配列。各ベクトルは相対 x, y 座標のペアとして格納されます。dstPts
- 変換された距離ベクトルが返される配列。各ベクトルは相対 x, y 座標のペアとして格納されます。srcOff
- 転送元配列内の変換される最初のベクトルへのオフセットdstOff
- 転送先配列に格納される最初の変換されたベクトルの位置へのオフセットnumPts
- 変換されるベクトル座標ペアの数public Shape createTransformedShape(Shape pSrc)
Shape
がこの変換によって変換されたあと、その幾何学的図形で定義された新しい Shape
オブジェクトを返します。pSrc
- この変換で変換される指定された Shape
オブジェクト。Shape
の幾何学的図形を定義する新しい Shape
オブジェクト。pSrc
が null の場合は null。public boolean isIdentity()
AffineTransform
が恒等変換である場合に true
を返します。AffineTransform
が恒等変換である場合は true
。それ以外の場合は false
。public Object clone()
AffineTransform
オブジェクトのコピーを返します。public int hashCode()
hashCode
、クラス: Object
Object.equals(java.lang.Object)
, System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
AffineTransform
が、指定された引数と同じアフィン座標変換を表現する場合に true
を返します。equals
、クラス: Object
obj
- この AffineTransform
と等しいかどうかが判定される Object
obj
がこの AffineTransform
オブジェクトに等しい場合は true
。それ以外の場合は false
。Object.hashCode()
、HashMap
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.