|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object java.awt.geom.AffineTransform
public class AffineTransform
AffineTransform
類別表示 2D 仿射變換,它執行從 2D 坐標到其他 2D 坐標的線性映射,保留了線的“直線性”和“平行性”。可以使用一系列平移 (translation)、縮放 (scale)、翻轉 (flip)、旋轉 (rotation) 和錯切 (shear) 來建構仿射變換。
這樣的坐標變換可以使用一個 3 行乘 3 列的矩陣來表示,最後一行預設為 [ 0 0 1 ]。此矩陣將源坐標 (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 度的倍數。因此,理論上不可以使用 PI 來描述象限旋轉(90、180、270 或 360 度)。雙精度浮點值可以非常接近 PI/2
的非零倍數,但是不夠接近到正弦或餘弦能精確到 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()
方法直接產生用於矩陣修改的值,那麼嚴格來說,得到的變換不能歸類別為象限旋轉(即使對於 rotate(Math.PI/2.0)
這樣的簡單情況也是如此),因為執行正弦和餘弦操作而得到的非 0.0 值將造成矩陣的細微變化。如果這些變換不能歸類別為象限旋轉,那麼試圖根據變換型別優化下一步操作的後續程式碼會被移交到它最通用的實作中。
因為象限旋轉相當常見,所以在對變換應用旋轉和對坐標應用所得變換時,此類別應該快速合理地處理這些情況。為了達到最佳處理,以弧度為單位測量旋轉角度的方法試圖檢測象限旋轉的角度並以這種方式處理它們。因此,如果 Math.sin(theta)
或 Math.cos(theta)
正好返回 1.0 或 -1.0,那麼這些方法會將角度 theta 視為象限旋轉。實際經驗證明,此特性可用於 Math.PI/2.0
的小倍數大約 0.0000000211 弧度(0.00000121 度)的範圍。
欄位摘要 | |
---|---|
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
此標誌位指示此物件定義的變換除了執行其他標誌位指示的轉換外,還執行平移操作。 |
static int |
TYPE_UNIFORM_SCALE
此標誌位指示此物件定義的變換除了執行其他標誌位指示的轉換外,還執行統一縮放操作。 |
建構子摘要 | |
---|---|
AffineTransform()
建構一個表示恆等變換的新 AffineTransform 。 |
|
AffineTransform(AffineTransform Tx)
建構一個新 AffineTransform ,讓它作為指定 AffineTransform 物件的副本。 |
|
AffineTransform(double[] flatmatrix)
根據雙精度值陣列建構一個新 AffineTransform ,該陣列要麼表示 3x3 變換矩陣的 4 個非平移條目,要麼表示它的 6 個可指定條目。 |
|
AffineTransform(double m00,
double m10,
double m01,
double m11,
double m02,
double m12)
根據表示 3x3 變換矩陣 6 個可指定條目的 6 個雙精度值建構一個新 AffineTransform 。 |
|
AffineTransform(float[] flatmatrix)
根據一個浮點值陣列建構一個新 AffineTransform ,該陣列要麼表示 3x3 變換矩陣的 4 個非平移條目,要麼表示 3x3 變換矩陣的 6 個可指定條目。 |
|
AffineTransform(float m00,
float m10,
float m01,
float m11,
float m02,
float m12)
根據表示 3x3 變換矩陣 6 個可指定條目的 6 個浮點值建構一個新 AffineTransform 。 |
方法摘要 | |
---|---|
Object |
clone()
返回此 AffineTransform 物件的副本。 |
void |
concatenate(AffineTransform Tx)
以最常用的方式將 AffineTransform Tx 連接到此 AffineTransform Cx,以提供由 Tx 映射到以前使用者空間的新使用者空間。 |
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)
在 3x3 仿射變換矩陣中檢索 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()
返回 3x3 仿射變換矩陣縮放元素 (m00) 的 X 坐標。 |
double |
getScaleY()
返回 3x3 仿射變換矩陣縮放元素 (m11) 的 Y 坐標。 |
static AffineTransform |
getShearInstance(double shx,
double shy)
返回表示錯切變換的變換。 |
double |
getShearX()
返回 3x3 仿射變換矩陣錯切元素 (m01) 的 X 坐標。 |
double |
getShearY()
返回 3x3 仿射變換矩陣錯切元素 (m10) 的 Y 坐標。 |
static AffineTransform |
getTranslateInstance(double tx,
double ty)
返回表示平移變換的變換。 |
double |
getTranslateX()
返回 3x3 仿射變換矩陣平移元素 (m02) 的 X 坐標。 |
double |
getTranslateY()
返回 3x3 仿射變換矩陣平移元素 (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)
以不常用的方式將 AffineTransform Tx 連接到此 AffineTransform Cx,從而 Tx 相對於絕對像素空間(而非相對於現有使用者空間)修改坐標變換。 |
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
- 3x3 矩陣縮放元素的 X 坐標m10
- 3x3 矩陣剪切元素的 Y 坐標m01
- 3x3 矩陣剪切元素的 X 坐標m11
- 3x3 矩陣縮放元素的 Y 坐標m02
- 3x3 矩陣平移元素的 X 坐標m12
- 3x3 矩陣平移元素的 Y 坐標public AffineTransform(float[] flatmatrix)
AffineTransform
,該陣列要麼表示 3x3 變換矩陣的 4 個非平移條目,要麼表示 3x3 變換矩陣的 6 個可指定條目。從該陣列中檢索到的值為 { m00 m10 m01 m11 [m02 m12]}。
flatmatrix
- float 陣列,包含要在新 AffineTransform
物件中設置的值。假定陣列的長度至少為 4。如果陣列的長度小於 6,則僅採用前 4 個值。如果陣列的長度大於 6,則採用前 6 個值。public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
AffineTransform
。
m00
- 3x3 矩陣縮放元素的 X 坐標m10
- 3x3 矩陣剪切元素的 Y 坐標m01
- 3x3 矩陣剪切元素的 X 坐標m11
- 3x3 矩陣縮放元素的 Y 坐標m02
- 3x3 矩陣平移元素的 X 坐標m12
- 3x3 矩陣平移元素的 Y 坐標public AffineTransform(double[] flatmatrix)
AffineTransform
,該陣列要麼表示 3x3 變換矩陣的 4 個非平移條目,要麼表示它的 6 個可指定條目。從該陣列中檢索到的值為 { m00 m10 m01 m11 [m02 m12]}。
flatmatrix
- double 陣列,包含要在新 AffineTransform
物件中設置的值。假定陣列的長度至少為 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
- 坐標在 X 正半軸方向上進行位移的乘數,與其 Y 坐標的因子一樣shy
- 坐標在 Y 正半軸方向上進行位移的乘數,與其 X 坐標的因子一樣
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
方法指示的那樣,此變換表示統一縮放,則決定因子還表示統一縮放因子的平方。所有點都通過該縮放因子從原點展開或向原點收縮。如果此變換表示非統一縮放或較通用的變換,則決定因子只表示確定逆向變換是否可能,而不表示除此之外任何有用值。
在數學上,使用以下公式計算決定因子:
| 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
- 坐標在正 X 軸方向上進行位移的乘數,與其 Y 坐標的因子一樣shy
- 坐標在正 Y 軸方向上進行位移的乘數,與其 X 坐標的因子一樣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
- 坐標在正 X 軸方向上進行位移的乘數,與其 Y 坐標的因子一樣shy
- 坐標在正 Y 軸方向上進行位移的乘數,與其 X 坐標的因子一樣public void setTransform(AffineTransform Tx)
AffineTransform
物件中變換的副本。
Tx
- 從中複製變換的 AffineTransform
物件public void setTransform(double m00, double m10, double m01, double m11, double m02, double m12)
m00
- 3x3 矩陣縮放元素的 X 坐標m10
- 3x3 矩陣錯切元素的 Y 坐標m01
- 3x3 矩陣錯切元素的 X 坐標m11
- 3x3 矩陣縮放元素的 Y 坐標m02
- 3x3 矩陣平移元素的 X 坐標m12
- 3x3 矩陣平移元素的 Y 坐標public void concatenate(AffineTransform Tx)
AffineTransform
Tx
連接到此 AffineTransform
Cx,以提供由 Tx
映射到以前使用者空間的新使用者空間。更新 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)
AffineTransform
Tx
連接到此 AffineTransform
Cx,從而 Tx
相對於絕對像素空間(而非相對於現有使用者空間)修改坐標變換。更新 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
物件同時作為同一個單點變換操作的源和目標,則在計算完成之前不存儲結果,從而避免將結果存儲在該操作數上。但是,如果一個操作的目標 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
- 要進行 delta 變換的距離向量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) ]兩個坐標陣列部分可以完全相同,也可以是同一陣列的重疊部分,這對結果的有效性都沒有影響。此方法可確保在變換源坐標之前,它們不會被以前的操作改寫。這些坐標從指示偏移量開始按照
[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 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 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。