|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.awt.geom.AffineTransform
public class AffineTransform
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()
および Math.cos()
の実装では、Math.sin(0.0)
の場合を除いて 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 の幾何学的図形によって定義される新しい 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)
この変換を平行移動変換に連結します。 |
クラス java.lang.Object から継承されたメソッド |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
フィールドの詳細 |
---|
public static final int TYPE_IDENTITY
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_TRANSLATION
TYPE_IDENTITY
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_UNIFORM_SCALE
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_GENERAL_SCALE
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_MASK_SCALE
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
定数フィールド値public static final int TYPE_FLIP
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_QUADRANT_ROTATION
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_GENERAL_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_GENERAL_ROTATION
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_TRANSFORM
,
getType()
,
定数フィールド値public static final int TYPE_MASK_ROTATION
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
定数フィールド値public static final int TYPE_GENERAL_TRANSFORM
TYPE_IDENTITY
,
TYPE_TRANSLATION
,
TYPE_UNIFORM_SCALE
,
TYPE_GENERAL_SCALE
,
TYPE_FLIP
,
TYPE_QUADRANT_ROTATION
,
TYPE_GENERAL_ROTATION
,
getType()
,
定数フィールド値コンストラクタの詳細 |
---|
public AffineTransform()
AffineTransform
を構築します。
public AffineTransform(AffineTransform Tx)
AffineTransform
オブジェクトのコピーである、新しい AffineTransform
を構築します。
Tx
- コピーする AffineTransform
オブジェクト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 を変換することは、最初に Tx
で p を変換してから、その結果を元の変換 Cx で変換することに相当します。つまり、Cx'(p) = Cx(Tx(p)) です。 行列表記では、この変換 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) = Tx(Cx(p)) です。 行列表記では、この変換 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
- 変換されるポイントオブジェクトの数- 導入されたバージョン:
- 1.2
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
の幾何学的図形によって定義される新しい Shape
オブジェクトを返します。
pSrc
- この変換で変換される指定された
Shape
オブジェクト
Shape
の幾何学的図形を定義する
新しい Shape
オブジェクト、pSrc
が null の場合は nullpublic String toString()
Object
の値を表す String
を返します。
Object
内の toString
Object
の値を表す
String
public boolean isIdentity()
AffineTransform
が恒等変換である場合に true
を返します。
AffineTransform
が恒等変換である場合は true
、
そうでない場合は false
public Object clone()
AffineTransform
オブジェクトのコピーを返します。
Object
内の clone
AffineTransform
オブジェクトのコピーである
Object
Cloneable
public int hashCode()
Object
内の hashCode
Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
AffineTransform
が、指定された引数と同じアフィン座標変換を表現する場合に true
を返します。
Object
内の equals
obj
- この AffineTransform
と同じかどうかが比較される
Object
obj
がこの AffineTransform
オブジェクトと等しい場合は
true
、そうでない場合は false
Object.hashCode()
,
Hashtable
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。