幾種典型的仿射變換:
public static AffineTransform getTranslateInstance(double tx, double ty)
平移變換,將每一點移動到(x+tx, y+ty),變換矩陣為:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
(譯註:平移變換是一種“剛體變換”,rigid-body transformation,中學學過的物理,都知道啥叫“剛體”吧,就是不會產生形變的理想物體,平移當然不會改變二維圖形的形狀。同理,下面的“旋轉變換”也是剛體變換,而“縮放”、“錯切”都是會改變圖形形狀的。)
public static AffineTransform getScaleInstance(double sx, double sy)
縮放變換,將每一點的橫座標放大(縮小)至sx倍,縱座標放大(縮小)至sy倍,變換矩陣為:
[ sx 0 0 ]
[ 0 sy 0 ]
當sx=sy時,稱為尺度縮放,sx不等於sy時,這就是我們平時所說的拉伸變換。
public static AffineTransform getShearInstance(double shx, double shy)
剪下變換,變換矩陣為:
[ 1 shx 0 ]
[ shy 1 0 ]
相當於一個橫向剪下與一個縱向剪下的複合
[ 1 0 0 ][ 1 shx 0 ]
[ shy 1 0 ][ 0 1 0 ]
[ 0 0 1 ][ 0 0 1 ]
(譯註:“剪下變換”又稱“錯切變換”,指的是類似於四邊形不穩定性那種性質,街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構成的菱形拉動的過程,那就是“錯切”的過程。)
public static AffineTransform getRotateInstance(double theta)
幾種典型的仿射變換:
public static AffineTransform getTranslateInstance(double tx, double ty)
平移變換,將每一點移動到(x+tx, y+ty),變換矩陣為:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
(譯註:平移變換是一種“剛體變換”,rigid-body transformation,中學學過的物理,都知道啥叫“剛體”吧,就是不會產生形變的理想物體,平移當然不會改變二維圖形的形狀。同理,下面的“旋轉變換”也是剛體變換,而“縮放”、“錯切”都是會改變圖形形狀的。)
public static AffineTransform getScaleInstance(double sx, double sy)
縮放變換,將每一點的橫座標放大(縮小)至sx倍,縱座標放大(縮小)至sy倍,變換矩陣為:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
當sx=sy時,稱為尺度縮放,sx不等於sy時,這就是我們平時所說的拉伸變換。
public static AffineTransform getShearInstance(double shx, double shy)
剪下變換,變換矩陣為:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
相當於一個橫向剪下與一個縱向剪下的複合
[ 1 0 0 ][ 1 shx 0 ]
[ shy 1 0 ][ 0 1 0 ]
[ 0 0 1 ][ 0 0 1 ]
(譯註:“剪下變換”又稱“錯切變換”,指的是類似於四邊形不穩定性那種性質,街邊小商店那種鐵拉門都見過吧?想象一下上面鐵條構成的菱形拉動的過程,那就是“錯切”的過程。)
public static AffineTransform getRotateInstance(double theta)