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_TRANSFORMpublic 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_SCALEpublic 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 - 変換される指定されたPoint2DptDst - ptSrcを変換した結果を格納する指定されたPoint2DptSrcを変換し、その結果を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、クラスObjectObject.equals(java.lang.Object), System.identityHashCode(java.lang.Object)public boolean equals(Object obj)
AffineTransformが、指定された引数と同じアフィン座標変換を表現する場合にtrueを返します。equals、クラスObjectobj - このAffineTransformと等しいかどうかが判定されるObjectobjがこのAffineTransformオブジェクトに等しい場合はtrue。それ以外の場合はfalse。Object.hashCode()、HashMap バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。