Класс AffineTransform
- Все реализуемые интерфейсы:
Serializable, Cloneable
public class AffineTransform extends Object implements Cloneable, Serializable
AffineTransform представляет собой двумерное аффинное преобразование, которое выполняет линейное отображение двумерных координат в другие двумерные координаты, сохраняя «прямолинейность» и «параллельность» линий. Аффинные преобразования можно построить с помощью последовательностей перемещений, масштабирований, отражений, поворотов и сдвигов. Такое преобразование координат можно представить матрицей из 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 ]
Обработка поворотов на 90 градусов
В некоторых вариантах методов rotate класса AffineTransform аргумент типа double задает угол поворота в радианах. Эти методы предусматривают специальную обработку поворотов примерно на 90 градусов (включая кратные значения, например 180, 270 и 360 градусов), благодаря чему распространенный случай поворота на четверть оборота обрабатывается эффективнее. Из-за этой специальной обработки углы, очень близкие к кратным 90 градусам, могут рассматриваться как точные кратные 90 градусам. Для небольших кратных 90 градусов диапазон углов, рассматриваемых как поворот на четверть оборота, составляет примерно 0.00000121 градуса. В этом разделе объясняется, почему требуется такая специальная обработка и как она реализована.
Поскольку 90 градусов представляют собой PI/2 в радианах, а число PI является трансцендентным (и, следовательно, иррациональным), невозможно точно представить кратное 90 градусов точным значением типа double, измеренным в радианах. В результате теоретически невозможно описать повороты на четверть оборота (90, 180, 270 или 360 градусов) с помощью этих значений. Значения с плавающей точкой двойной точности могут быть очень близки к ненулевым кратным PI/2, но никогда не настолько близки, чтобы синус или косинус точно равнялся 0.0, 1.0 или -1.0. Соответствующие реализации Math.sin() и Math.cos() никогда не возвращают 0.0, кроме случая Math.sin(0.0). Однако эти же реализации возвращают точно 1.0 и -1.0 для некоторого диапазона чисел вокруг каждого кратного 90 градусов, поскольку правильный ответ настолько близок к 1.0 или -1.0, что мантисса числа двойной точности не может представить разницу с такой же точностью, как для чисел, близких к 0.0.
В итоге, если методы Math.sin() и Math.cos() использовать для непосредственного формирования значений изменений матрицы при этих операциях поворота, основанных на радианах, результирующее преобразование никогда не будет строго классифицироваться как поворот на четверть оборота — даже в простом случае, например rotate(Math.PI/2.0), — из-за небольших отклонений матрицы, вызванных ненулевыми значениями синуса и косинуса. Если такие преобразования не классифицируются как повороты на четверть оборота, последующий код, пытающийся оптимизировать дальнейшие операции в зависимости от типа преобразования, будет вынужден использовать наиболее универсальную реализацию.
Поскольку повороты на четверть оборота встречаются довольно часто, этот класс должен достаточно быстро обрабатывать такие случаи как при применении поворотов к преобразованию, так и при применении результирующего преобразования к координатам. Для обеспечения такой оптимальной обработки методы, принимающие угол поворота в радианах, пытаются распознать углы, соответствующие поворотам на четверть оборота, и обрабатывают их соответствующим образом. Поэтому эти методы рассматривают угол theta как поворот на четверть оборота, если Math.sin(theta) или Math.cos(theta) возвращает точно 1.0 или -1.0. Как правило, это свойство выполняется в диапазоне примерно 0.0000000211 радиана (или 0.00000121 градуса) вокруг небольших кратных Math.PI/2.0.
- Начиная с версии:
- 1.2
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
static final int |
TYPE_FLIP |
Этот битовый флаг указывает, что преобразование, определяемое этим объектом, выполняет зеркальное отражение относительно некоторой оси, которое помимо преобразований, обозначенных другими битовыми флагами, меняет обычно правостороннюю систему координат на левостороннюю. |
static final int |
TYPE_GENERAL_ROTATION |
Этот битовый флаг указывает, что преобразование, определяемое этим объектом, помимо преобразований, обозначенных другими битовыми флагами, выполняет поворот на произвольный угол. |
static final int |
TYPE_GENERAL_SCALE |
Этот битовый флаг указывает, что преобразование, определяемое этим объектом, помимо преобразований, обозначенных другими битовыми флагами, выполняет общее масштабирование. |
static final int |
TYPE_GENERAL_TRANSFORM |
Эта константа указывает, что преобразование, определяемое этим объектом, выполняет произвольное преобразование входных координат. |
static final int |
TYPE_IDENTITY |
Эта константа указывает, что преобразование, определяемое этим объектом, является тождественным преобразованием. |
static final int |
TYPE_MASK_ROTATION |
Эта константа представляет собой битовую маску для любых битовых флагов поворота. |
static final int |
TYPE_MASK_SCALE |
Эта константа представляет собой битовую маску для любых битовых флагов масштабирования. |
static final int |
TYPE_QUADRANT_ROTATION |
Этот битовый флаг указывает, что преобразование, определяемое этим объектом, помимо преобразований, обозначенных другими битовыми флагами, выполняет поворот на четверть оборота — на кратное 90 градусам значение. |
static final int |
TYPE_TRANSLATION |
Этот битовый флаг указывает, что преобразование, определяемое этим объектом, помимо преобразований, обозначенных другими битовыми флагами, выполняет перемещение. |
static final int |
TYPE_UNIFORM_SCALE |
Этот битовый флаг указывает, что преобразование, определяемое этим объектом, помимо преобразований, обозначенных другими битовыми флагами, выполняет равномерное масштабирование. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
AffineTransform() |
Создает новый AffineTransform, представляющий тождественное преобразование. |
AffineTransform |
Создает новый AffineTransform из массива значений двойной точности, представляющих либо 4 элемента матрицы преобразования 3x3, не относящихся к перемещению, либо 6 задаваемых элементов этой матрицы. |
AffineTransform |
Создает новый AffineTransform из 6 значений двойной точности, представляющих 6 задаваемых элементов матрицы преобразования 3x3. |
AffineTransform |
Создает новый AffineTransform из массива значений с плавающей точкой, представляющих либо 4 элемента матрицы преобразования 3x3, не относящихся к перемещению, либо 6 задаваемых элементов этой матрицы. |
AffineTransform |
Создает новый AffineTransform из 6 значений с плавающей точкой, представляющих 6 задаваемых элементов матрицы преобразования 3x3. |
AffineTransform |
Создает новый AffineTransform, являющийся копией указанного объекта AffineTransform. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
clone() |
Возвращает копию этого объекта AffineTransform. |
void |
concatenate |
Конкатенирует AffineTransform Tx с этим AffineTransform Cx наиболее распространенным и удобным способом, чтобы создать новое пользовательское пространство, отображаемое в прежнее пользовательское пространство с помощью Tx. |
AffineTransform |
createInverse() |
Возвращает объект AffineTransform, представляющий обратное преобразование. |
Shape |
createTransformedShape |
Возвращает новый объект Shape, определяемый геометрией указанного Shape после его преобразования этим преобразованием. |
void |
deltaTransform |
Преобразует массив векторов относительных расстояний с помощью этого преобразования. |
Point2D |
deltaTransform |
Преобразует вектор относительного расстояния, заданный параметром ptSrc, и сохраняет результат в ptDst. |
boolean |
equals |
Возвращает true, если этот AffineTransform представляет то же аффинное преобразование координат, что и указанный аргумент. |
double |
getDeterminant() |
Возвращает определитель матричного представления преобразования. |
void |
getMatrix |
Извлекает 6 задаваемых значений из аффинной матрицы преобразования 3x3 и помещает их в массив значений двойной точности. |
static AffineTransform |
getQuadrantRotateInstance |
Возвращает преобразование, поворачивающее координаты на указанное число четвертей оборота. |
static AffineTransform |
getQuadrantRotateInstance |
Возвращает преобразование, поворачивающее координаты на указанное число четвертей оборота вокруг заданной опорной точки. |
static AffineTransform |
getRotateInstance |
Возвращает преобразование, представляющее поворот. |
static AffineTransform |
getRotateInstance |
Возвращает преобразование, поворачивающее координаты в соответствии с вектором поворота. |
static AffineTransform |
getRotateInstance |
Возвращает преобразование, поворачивающее координаты вокруг опорной точки. |
static AffineTransform |
getRotateInstance |
Возвращает преобразование, поворачивающее координаты вокруг опорной точки в соответствии с вектором поворота. |
static AffineTransform |
getScaleInstance |
Возвращает преобразование, представляющее масштабирование. |
double |
getScaleX() |
Возвращает элемент m00 аффинной матрицы преобразования 3x3. |
double |
getScaleY() |
Возвращает элемент m11 аффинной матрицы преобразования 3x3. |
static AffineTransform |
getShearInstance |
Возвращает преобразование, представляющее сдвиг. |
double |
getShearX() |
Возвращает элемент сдвига координаты X (m01) аффинной матрицы преобразования 3x3. |
double |
getShearY() |
Возвращает элемент сдвига координаты Y (m10) аффинной матрицы преобразования 3x3. |
static AffineTransform |
getTranslateInstance |
Возвращает преобразование, представляющее перемещение. |
double |
getTranslateX() |
Возвращает координату X элемента перемещения (m02) аффинной матрицы преобразования 3x3. |
double |
getTranslateY() |
Возвращает координату Y элемента перемещения (m12) аффинной матрицы преобразования 3x3. |
int |
getType() |
Извлекает битовые флаги, описывающие свойства преобразования этого преобразования. |
int |
hashCode() |
Возвращает хеш-код этого преобразования. |
void |
inverseTransform |
Выполняет обратное преобразование массива координат двойной точности с помощью этого преобразования. |
Point2D |
inverseTransform |
Выполняет обратное преобразование указанного ptSrc и сохраняет результат в ptDst. |
void |
invert() |
Устанавливает для этого преобразования его обратное преобразование. |
boolean |
isIdentity() |
Возвращает true, если этот AffineTransform является тождественным преобразованием. |
void |
preConcatenate |
Конкатенирует AffineTransform Tx с этим AffineTransform Cx менее распространенным способом, при котором Tx изменяет преобразование координат относительно абсолютного пиксельного пространства, а не относительно существующего пользовательского пространства. |
void |
quadrantRotate |
Конкатенирует это преобразование с преобразованием, поворачивающим координаты на указанное число четвертей оборота. |
void |
quadrantRotate |
Конкатенирует это преобразование с преобразованием, поворачивающим координаты на указанное число четвертей оборота вокруг заданной опорной точки. |
void |
rotate |
Конкатенирует это преобразование с преобразованием поворота. |
void |
rotate |
Конкатенирует это преобразование с преобразованием, поворачивающим координаты в соответствии с вектором поворота. |
void |
rotate |
Конкатенирует это преобразование с преобразованием, поворачивающим координаты вокруг опорной точки. |
void |
rotate |
Конкатенирует это преобразование с преобразованием, поворачивающим координаты вокруг опорной точки в соответствии с вектором поворота. |
void |
scale |
Конкатенирует это преобразование с преобразованием масштабирования. |
void |
setToIdentity() |
Сбрасывает это преобразование, устанавливая тождественное преобразование. |
void |
setToQuadrantRotation |
Устанавливает для этого преобразования поворот, который поворачивает координаты на указанное число четвертей оборота. |
void |
setToQuadrantRotation |
Устанавливает для этого преобразования поворот с перемещением, который поворачивает координаты на указанное число четвертей оборота вокруг заданной опорной точки. |
void |
setToRotation |
Устанавливает для этого преобразования поворот. |
void |
setToRotation |
Устанавливает для этого преобразования поворот, который поворачивает координаты в соответствии с вектором поворота. |
void |
setToRotation |
Устанавливает для этого преобразования поворот с перемещением. |
void |
setToRotation |
Устанавливает для этого преобразования поворот, который поворачивает координаты вокруг опорной точки в соответствии с вектором поворота. |
void |
setToScale |
Устанавливает для этого преобразования масштабирование. |
void |
setToShear |
Устанавливает для этого преобразования сдвиг. |
void |
setToTranslation |
Устанавливает для этого преобразования перемещение. |
void |
setTransform |
Устанавливает для этого преобразования матрицу, заданную 6 значениями двойной точности. |
void |
setTransform |
Устанавливает для этого преобразования копию преобразования из указанного объекта AffineTransform. |
void |
shear |
Конкатенирует это преобразование с преобразованием сдвига. |
String |
toString() |
Возвращает String, представляющий значение этого Object. |
void |
transform |
Преобразует массив координат двойной точности с помощью этого преобразования. |
void |
transform |
Преобразует массив координат двойной точности с помощью этого преобразования и сохраняет результаты в массиве значений с плавающей точкой. |
void |
transform |
Преобразует массив координат с плавающей точкой с помощью этого преобразования и сохраняет результаты в массиве значений двойной точности. |
void |
transform |
Преобразует массив координат с плавающей точкой с помощью этого преобразования. |
void |
transform |
Преобразует массив объектов точек с помощью этого преобразования. |
Point2D |
transform |
Преобразует указанный ptSrc и сохраняет результат в ptDst. |
void |
translate |
Конкатенирует это преобразование с преобразованием перемещения. |
Подробное описание полей
TYPE_IDENTITY
public static final int TYPE_IDENTITY
- Начиная с:
- 1.2
- См. также:
TYPE_TRANSLATION
public static final int TYPE_TRANSLATION
- Начиная с:
- 1.2
- См. также:
TYPE_UNIFORM_SCALE
public static final int TYPE_UNIFORM_SCALE
- Начиная с:
- 1.2
- См. также:
TYPE_GENERAL_SCALE
public static final int TYPE_GENERAL_SCALE
- Начиная с:
- 1.2
- См. также:
TYPE_MASK_SCALE
public static final int TYPE_MASK_SCALE
- Начиная с:
- 1.2
- См. также:
TYPE_FLIP
public static final int TYPE_FLIP
- Начиная с:
- 1.2
- См. также:
TYPE_QUADRANT_ROTATION
public static final int TYPE_QUADRANT_ROTATION
- Начиная с:
- 1.2
- См. также:
TYPE_GENERAL_ROTATION
public static final int TYPE_GENERAL_ROTATION
- Начиная с:
- 1.2
- См. также:
TYPE_MASK_ROTATION
public static final int TYPE_MASK_ROTATION
- Начиная с:
- 1.2
- См. также:
TYPE_GENERAL_TRANSFORM
public static final int TYPE_GENERAL_TRANSFORM
- Начиная с:
- 1.2
- См. также:
Подробное описание конструкторов
AffineTransform
public AffineTransform()
AffineTransform, представляющий тождественное преобразование.- Начиная с:
- 1.2
AffineTransform
public AffineTransform(AffineTransform Tx)
AffineTransform, являющийся копией указанного объекта AffineTransform.- Параметры:
-
Tx— объектAffineTransform, который нужно скопировать - Начиная с:
- 1.2
AffineTransform
@ConstructorProperties({"scaleX","shearY","shearX","scaleY","translateX","translateY"}) public AffineTransform(float m00, float m10, float m01, float m11, float m02, float m12) AffineTransform из 6 значений с плавающей точкой, представляющих 6 задаваемых элементов матрицы преобразования 3x3.- Параметры:
-
m00— элемент масштабирования координаты X матрицы 3x3 -
m10— элемент сдвига координаты Y матрицы 3x3 -
m01— элемент сдвига координаты X матрицы 3x3 -
m11— элемент масштабирования координаты Y матрицы 3x3 -
m02— элемент переноса координаты X матрицы 3x3 -
m12— элемент переноса координаты Y матрицы 3x3 - Начиная с:
- 1.2
AffineTransform
public AffineTransform(float[] flatmatrix)
AffineTransform из массива значений с плавающей точкой, представляющих либо 4 элемента без переноса, либо 6 задаваемых элементов матрицы преобразования 3x3. Значения извлекаются из массива в виде { m00 m10 m01 m11 [m02 m12]}.- Параметры:
-
flatmatrix— массив float, содержащий значения, которые нужно задать в новом объектеAffineTransform. Предполагается, что длина массива составляет не менее 4. Если длина массива меньше 6, используются только первые 4 значения. Если длина массива больше 6, используются первые 6 значений. - Начиная с:
- 1.2
AffineTransform
public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
AffineTransform из 6 значений двойной точности, представляющих 6 задаваемых элементов матрицы преобразования 3x3.- Параметры:
-
m00— элемент масштабирования координаты X матрицы 3x3 -
m10— элемент сдвига координаты Y матрицы 3x3 -
m01— элемент сдвига координаты X матрицы 3x3 -
m11— элемент масштабирования координаты Y матрицы 3x3 -
m02— элемент переноса координаты X матрицы 3x3 -
m12— элемент переноса координаты Y матрицы 3x3 - Начиная с:
- 1.2
AffineTransform
public AffineTransform(double[] flatmatrix)
AffineTransform из массива значений двойной точности, представляющих либо 4 элемента без переноса, либо 6 задаваемых элементов матрицы преобразования 3x3. Значения извлекаются из массива в виде { m00 m10 m01 m11 [m02 m12]}.- Параметры:
-
flatmatrix— массив double, содержащий значения, которые нужно задать в новом объектеAffineTransform. Предполагается, что длина массива составляет не менее 4. Если длина массива меньше 6, используются только первые 4 значения. Если длина массива больше 6, используются первые 6 значений. - Начиная с:
- 1.2
Подробное описание методов
getTranslateInstance
public static AffineTransform getTranslateInstance(double tx, double ty)
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
- Параметры:
-
tx— расстояние, на которое координаты переносятся вдоль оси X -
ty— расстояние, на которое координаты переносятся вдоль оси Y - Возвращает:
- объект
AffineTransform, представляющий перенос, созданный с указанным вектором. - Начиная с:
- 1.2
getRotateInstance
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, представляющий поворот, созданный с указанным углом. - Начиная с:
- 1.2
getRotateInstance
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, поворачивающий координаты вокруг указанной точки на заданный угол. - Начиная с:
- 1.2
getRotateInstance
public static AffineTransform getRotateInstance(double vecx, double vecy)
vecx и vecy равны 0.0, возвращается тождественное преобразование. Эта операция эквивалентна вызову:
AffineTransform.getRotateInstance(Math.atan2(vecy, vecx));
- Параметры:
-
vecx— координата X вектора поворота -
vecy— координата Y вектора поворота - Возвращает:
- объект
AffineTransform, поворачивающий координаты в соответствии с указанным вектором поворота. - Начиная с:
- 1.6
getRotateInstance
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, поворачивающий координаты вокруг указанной точки в соответствии с заданным вектором поворота. - Начиная с:
- 1.6
getQuadrantRotateInstance
public static AffineTransform getQuadrantRotateInstance(int numquadrants)
AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0);
Поворот на положительное число квадрантов поворачивает точки на положительной оси X в направлении положительной оси Y.- Параметры:
-
numquadrants— число поворотов на 90 градусов - Возвращает:
- объект
AffineTransform, поворачивающий координаты на указанное число квадрантов. - Начиная с:
- 1.6
getQuadrantRotateInstance
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, поворачивающий координаты на указанное число квадрантов вокруг заданной опорной точки. - Начиная с:
- 1.6
getScaleInstance
public static AffineTransform getScaleInstance(double sx, double sy)
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
- Параметры:
-
sx— коэффициент масштабирования координат вдоль оси X -
sy— коэффициент масштабирования координат вдоль оси Y - Возвращает:
- объект
AffineTransform, масштаб�ющий координаты с указанными коэффициентами. - Начиная с:
- 1.2
getShearInstance
public static AffineTransform getShearInstance(double shx, double shy)
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
- Параметры:
-
shx— коэффициент, определяющий смещение координат в направлении положительной оси X в зависимости от их координаты Y -
shy— коэффициент, определяющий смещение координат в направлении положительной оси Y в зависимости от их координаты X - Возвращает:
- объект
AffineTransform, выполняющий сдвиг координат с указанными коэффициентами. - Начиная с:
- 1.2
getType
public int getType()
- Возвращает:
- комбинацию флагов, применимых к этому преобразованию, полученную операцией ИЛИ
- Начиная с:
- 1.2
- См. также:
getDeterminant
public double getDeterminant()
Если определитель не равен нулю, это преобразование обратимо, и методы, зависящие от обратного преобразования, не обязаны выбрасывать исключение NoninvertibleTransformException. Если определитель равен нулю, преобразование нельзя обратить, поскольку оно отображает все входные координаты на прямую или точку. Если значение определителя достаточно близко к нулю, точности операций обратного преобразования может оказаться недостаточно для получения значимых результатов.
Если это преобразование представляет равномерное масштабирование, на что указывает метод getType, определитель также представляет квадрат коэффициента равномерного масштабирования, на который все точки удаляются от начала координат или приближаются к нему. Если это преобразование представляет неравномерное масштабирование или более общее преобразование, определитель, скорее всего, не будет иметь полезного значения, кроме определения возможности выполнить обратное преобразование.
Математически определитель вычисляется по формуле:
| m00 m01 m02 |
| m10 m11 m12 | = m00 * m11 - m01 * m10
| 0 0 1 |
- Возвращает:
- определитель матрицы, используемой для преобразования координат.
- Начиная с:
- 1.2
- См. также:
getMatrix
public void getMatrix(double[] flatmatrix)
- Параметры:
-
flatmatrix— массив double для сохранения возвращаемых значений. - Начиная с:
- 1.2
- См. также:
getScaleX
public double getScaleX()
m00 матрицы аффинного преобразования 3x3. Этот множитель матрицы определяет, как входные координаты X влияют на выходные координаты X, и является одним из элементов масштаба преобразования. Чтобы измерить полную величину растяжения или сжатия координат X этим преобразованием, используйте следующий код:
Point2D p = new Point2D.Double(1, 0);
p = tx.deltaTransform(p, p);
double scaleX = p.distance(0, 0);
- Возвращает:
- значение double, являющееся элементом
m00матрицы аффинного преобразования 3x3. - Начиная с:
- 1.2
- См. также:
getScaleY
public double getScaleY()
m11 аффинной матрицы преобразования 3×3. Этот множитель матрицы определяет, как входные координаты Y влияют на выходные координаты Y, и является одним из элементов масштаба преобразования. Чтобы измерить полную величину, на которую это преобразование растягивает или сжимает координаты Y, используйте следующий код:
Point2D p = new Point2D.Double(0, 1);
p = tx.deltaTransform(p, p);
double scaleY = p.distance(0, 0);
- Возвращает:
- значение типа double, являющееся элементом
m11аффинной матрицы преобразования 3×3. - Начиная с версии:
- 1.2
- См. также:
getShearX
public double getShearX()
- Возвращает:
- значение типа double, являющееся координатой X элемента сдвига аффинной матрицы преобразования.
- Начиная с версии:
- 1.2
- См. также:
getShearY
public double getShearY()
- Возвращает:
- значение типа double, являющееся координатой Y элемента сдвига аффинной матрицы преобразования.
- Начиная с версии:
- 1.2
- См. также:
getTranslateX
public double getTranslateX()
- Возвращает:
- значение типа double, являющееся координатой X элемента переноса аффинной матрицы преобразования.
- Начиная с версии:
- 1.2
- См. также:
getTranslateY
public double getTranslateY()
- Возвращает:
- значение типа double, являющееся координатой Y элемента переноса аффинной матрицы преобразования.
- Начиная с версии:
- 1.2
- См. также:
translate
public void translate(double tx, double ty)
AffineTransform, представленное следующей матрицей:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
- Параметры:
-
tx— расстояние, на которое переносятся координаты вдоль оси X -
ty— расстояние, на которое переносятся координаты вдоль оси Y - Начиная с версии:
- 1.2
rotate
public void rotate(double theta)
AffineTransform, представленное следующей матрицей:
[ cos(theta) -sin(theta) 0 ]
[ sin(theta) cos(theta) 0 ]
[ 0 0 1 ]
Поворот на положительный угол theta направляет точки на положительной полуоси X к положительной полуоси Y. См. также приведенное выше обсуждение обработки поворотов на 90 градусов.- Параметры:
-
theta— угол поворота, измеряемый в радианах - Начиная с версии:
- 1.2
rotate
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 опорной точки поворота - Начиная с версии:
- 1.2
rotate
public void rotate(double vecx, double vecy)
vecx и vecy равны 0.0, это преобразование не изменяется. Операция эквивалентна вызову:
rotate(Math.atan2(vecy, vecx));
- Параметры:
-
vecx— координата X вектора поворота -
vecy— координата Y вектора поворота - Начиная с версии:
- 1.6
rotate
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 опорной точки поворота - Начиная с версии:
- 1.6
quadrantRotate
public void quadrantRotate(int numquadrants)
rotate(numquadrants * Math.PI / 2.0);
Поворот на положительное число квадрантов направляет точки на положительной полуоси X к положительной полуоси Y.- Параметры:
-
numquadrants— число поворотов на 90 градусов - Начиная с версии:
- 1.6
quadrantRotate
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 опорной точки поворота - Начиная с версии:
- 1.6
scale
public void scale(double sx, double sy)
AffineTransform, представленное следующей матрицей:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
- Параметры:
-
sx— коэффициент масштабирования координат вдоль оси X -
sy— коэффициент масштабирования координат вдоль оси Y - Начиная с версии:
- 1.2
shear
public void shear(double shx, double shy)
AffineTransform, представленное следующей матрицей:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
- Параметры:
-
shx— коэффициент смещения координат в направлении положительной оси X, пропорциональный координате Y -
shy— коэффициент смещения координат в направлении положительной оси Y, пропорциональный координате X - Начиная с версии:
- 1.2
setToIdentity
public void setToIdentity()
- Начиная с версии:
- 1.2
setToTranslation
public void setToTranslation(double tx, double ty)
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
- Параметры:
-
tx— расстояние, на которое переносятся координаты вдоль оси X -
ty— расстояние, на которое переносятся координаты вдоль оси Y - Начиная с версии:
- 1.2
setToRotation
public void setToRotation(double theta)
[ cos(theta) -sin(theta) 0 ]
[ sin(theta) cos(theta) 0 ]
[ 0 0 1 ]
Поворот на положительный угол theta направляет точки на положительной полуоси X к положительной полуоси Y. См. также приведенное выше обсуждение обработки поворотов на 90 градусов.- Параметры:
-
theta— угол поворота, измеряемый в радианах - Начиная с версии:
- 1.2
setToRotation
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 опорной точки поворота - Начиная с версии:
- 1.2
setToRotation
public void setToRotation(double vecx, double vecy)
vecx и vecy равны 0.0, для преобразования задается тождественное преобразование. Эта операция эквивалентна вызову:
setToRotation(Math.atan2(vecy, vecx));
- Параметры:
-
vecx— координата X вектора поворота -
vecy— координата Y вектора поворота - Начиная с версии:
- 1.6
setToRotation
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 опорной точки поворота - Начиная с версии:
- 1.6
setToQuadrantRotation
public void setToQuadrantRotation(int numquadrants)
setToRotation(numquadrants * Math.PI / 2.0);
Поворот на положительное число квадрантов направляет точки на положительной полуоси X к положительной полуоси Y.- Параметры:
-
numquadrants— число поворотов на 90 градусов - Начиная с версии:
- 1.6
setToQuadrantRotation
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 опорной точки поворота - Начиная с версии:
- 1.6
setToScale
public void setToScale(double sx, double sy)
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
- Параметры:
-
sx— коэффициент масштабирования координат вдоль оси X -
sy— коэффициент масштабирования координат вдоль оси Y - Начиная с версии:
- 1.2
setToShear
public void setToShear(double shx, double shy)
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
- Параметры:
-
shx— коэффициент смещения координат в направлении положительной оси X, пропорциональный координате Y -
shy— коэффициент смещения координат в направлении положительной оси Y, пропорциональный координате X - Начиная с версии:
- 1.2
setTransform
public void setTransform(AffineTransform Tx)
AffineTransform.- Параметры:
-
Tx— объектAffineTransform, из которого копируется преобразование - Начиная с версии:
- 1.2
setTransform
public void setTransform(double m00, double m10, double m01, double m11, double m02, double m12)
- Параметры:
-
m00— элемент масштабирования по координате X матрицы 3×3 -
m10— элемент сдвига по координате Y матрицы 3×3 -
m01— элемент сдвига по координате X матрицы 3×3 -
m11— элемент масштабирования по координате Y матрицы 3×3 -
m02— элемент переноса по координате X матрицы 3×3 -
m12— элемент переноса по координате Y матрицы 3×3 - Начиная с версии:
- 1.2
concatenate
public void concatenate(AffineTransform Tx)
AffineTransform Tx с этим объектом AffineTransform Cx наиболее распространенным способом, создавая новое пользовательское пространство, которое отображается в исходное пользовательское пространство посредством Tx. Объект Cx обновляется для выполнения объединенного преобразования. Преобразование точки p обновленным преобразованием Cx' эквивалентно сначала преобразованию p с помощью Tx, а затем преобразованию результата исходным преобразованием Cx, как показано ниже: Cx'(p) = Cx(Tx(p)). В матричной записи, если это преобразование Cx представлено матрицей [this], а Tx — матрицей [Tx], этот метод выполняет следующее:
[this] = [this] x [Tx]
- Параметры:
-
Tx— объектAffineTransform, объединяемый с этим объектомAffineTransform. - Начиная с версии:
- 1.2
- См. также:
preConcatenate
public void preConcatenate(AffineTransform Tx)
AffineTransform Tx с этим объектом AffineTransform Cx менее распространенным способом, при котором Tx изменяет преобразование координат относительно абсолютного пространства пикселей, а не существующего пользовательского пространства. Объект Cx обновляется для выполнения объединенного преобразования. Преобразование точки p обновленным преобразованием Cx' эквивалентно сначала преобразованию p исходным преобразованием Cx, а затем преобразованию результата с помощью Tx, как показано ниже: Cx'(p) = Tx(Cx(p)). В матричной записи, если это преобразование Cx представлено матрицей [this], а Tx — матрицей [Tx], этот метод выполняет следующее:
[this] = [Tx] x [this]
- Параметры:
-
Tx— объектAffineTransform, объединяемый с этим объектомAffineTransform. - Начиная с версии:
- 1.2
- См. также:
createInverse
public AffineTransform createInverse() throws NoninvertibleTransformException
AffineTransform, представляющий обратное преобразование. Обратное преобразование Tx' для этого преобразования Tx возвращает преобразованные с помощью Tx координаты к исходным. Иными словами, Tx'(Tx(p)) = p = Tx(Tx'(p)). Если это преобразование отображает все координаты в точку или на линию, обратного преобразования не существует, поскольку координаты, не лежащие в целевой точке или на целевой линии, невозможно преобразовать обратно. Чтобы определить, существует ли обратное преобразование, можно использовать метод getDeterminant; в таком случае при вызове метода createInverse будет выброшено исключение.
- Возвращает:
- новый объект
AffineTransform, представляющий обратное преобразование. - Выбрасывает:
-
NoninvertibleTransformException— если матрицу невозможно обратить. - Начиная с версии:
- 1.2
- См. также:
invert
public void invert() throws NoninvertibleTransformException
Если это преобразование отображает все координаты в точку или на линию, обратного преобразования не существует, поскольку координаты, не лежащие в целевой точке или на целевой линии, невозможно преобразовать обратно. Чтобы определить, существует ли обратное преобразование, можно использовать метод getDeterminant; в таком случае при вызове метода invert будет выброшено исключение.
- Выбрасывает:
-
NoninvertibleTransformException— если матрицу невозможно обратить. - Начиная с версии:
- 1.6
- См. также:
transform
public Point2D transform(Point2D ptSrc, Point2D ptDst)
ptSrc и сохраняет результат в ptDst. Если ptDst равен null, создается новый объект Point2D, в который затем записывается результат преобразования. В обоих случаях для удобства возвращается ptDst, содержащий преобразованную точку. Если ptSrc и ptDst — один и тот же объект, входная точка корректно перезаписывается преобразованной точкой.- Параметры:
-
ptSrc— указанный объектPoint2Dдля преобразования -
ptDst— указанный объектPoint2Dдля сохранения результата преобразованияptSrc - Возвращает:
- объект
ptDstпосле преобразованияptSrcи сохранения результата вptDst. - Начиная с версии:
- 1.2
transform
public void transform(Point2D[] ptSrc, int srcOff, Point2D[] ptDst, int dstOff, int numPts)
ptDst равен null, для него создается новый объект Point2D, который записывается в этот элемент до сохранения результатов преобразования. Обратите внимание: этот метод не принимает мер для предотвращения проблем, которые могут возникнуть при записи результатов в объекты Point2D, используемые в качестве источника для последующих вычислений в исходном массиве. Метод гарантирует, что если указанный объект Point2D одновременно является источником и назначением одной и той же операции преобразования точки, результаты не будут записаны до завершения вычислений, чтобы не перезаписать операнды. Однако если объект назначения Point2D одной операции совпадает с объектом источника Point2D другой операции, выполняемой далее в исходном массиве, исходные координаты этой точки будут перезаписаны до преобразования.
- Параметры:
-
ptSrc— массив, содержащий исходные объекты-точки -
srcOff— смещение до первого объекта-точки, который нужно преобразовать в исходном массиве -
ptDst— массив, в который возвращаются преобразованные объекты-точки -
dstOff— смещение до места первого преобразованного объекта-точки, сохраняемого в массиве назначения -
numPts— количество объектов-точек для преобразования - Начиная с версии:
- 1.2
transform
public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Параметры:
-
srcPts— массив, содержащий координаты исходных точек. Каждая точка хранится как пара координат x и y. -
srcOff— смещение до первой точки, которую нужно преобразовать в исходном массиве -
dstPts— массив, в который возвращаются координаты преобразованных точек. Каждая точка хранится как пара координат x и y. -
dstOff— смещение до места первой преобразованной точки, сохраняемой в массиве назначения -
numPts— количество точек для преобразования - Начиная с версии:
- 1.2
transform
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Параметры:
-
srcPts— массив, содержащий координаты исходных точек. Каждая точка хранится как пара координат x и y. -
srcOff— смещение до первой точки, которую нужно преобразовать в исходном массиве -
dstPts— массив, в который возвращаются координаты преобразованных точек. Каждая точка хранится как пара координат x и y. -
dstOff— смещение до места первой преобразованной точки, сохраняемой в массиве назначения -
numPts— количество объектов-точек для преобразования - Начиная с версии:
- 1.2
transform
public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Параметры:
-
srcPts— массив, содержащий координаты исходных точек. Каждая точка хранится как пара координат x и y. -
srcOff— смещение до первой точки, которую нужно преобразовать в исходном массиве -
dstPts— массив, в который возвращаются координаты преобразованных точек. Каждая точка хранится как пара координат x и y. -
dstOff— смещение до места первой преобразованной точки, сохраняемой в массиве назначения -
numPts— количество точек для преобразования - Начиная с версии:
- 1.2
transform
public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Параметры:
-
srcPts— массив, содержащий координаты исходных точек. Каждая точка хранится в виде пары координат x, y. -
srcOff— смещение до первой точки, которую нужно преобразовать в исходном массиве -
dstPts— массив, в который возвращаются координаты преобразованных точек. Каждая точка хранится в виде пары координат x, y. -
dstOff— смещение до расположения первой преобразованной точки, сохранённой в массиве назначения -
numPts— количество объектов-точек, которые нужно преобразовать - Начиная с версии:
- 1.2
inverseTransform
public Point2D inverseTransform(Point2D ptSrc, Point2D ptDst) throws NoninvertibleTransformException
ptSrc и сохраняет результат в ptDst. Если ptDst равен null, создаётся новый объект Point2D, а затем результат преобразования сохраняется в этом объекте. В обоих случаях для удобства возвращается ptDst, содержащий преобразованную точку. Если ptSrc и ptDst — один и тот же объект, входная точка корректно перезаписывается преобразованной точкой.- Параметры:
-
ptSrc— точка, для которой нужно выполнить обратное преобразование -
ptDst— результирующая преобразованная точка - Возвращает:
-
ptDst, содержащий результат обратного преобразования. - Вызывает исключение:
-
NoninvertibleTransformException— если матрицу нельзя обратить. - Начиная с версии:
- 1.2
inverseTransform
public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws NoninvertibleTransformException
[x0, y0, x1, y1, ..., xn, yn].- Параметры:
-
srcPts— массив, содержащий координаты исходных точек. Каждая точка хранится в виде пары координат x, y. -
srcOff— смещение до первой точки, которую нужно преобразовать в исходном массиве -
dstPts— массив, в который возвращаются координаты преобразованных точек. Каждая точка хранится в виде пары координат x, y. -
dstOff— смещение до расположения первой преобразованной точки, сохранённой в массиве назначения -
numPts— количество объектов-точек, которые нужно преобразовать - Вызывает исключение:
-
NoninvertibleTransformException— если матрицу нельзя обратить. - Начиная с версии:
- 1.2
deltaTransform
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, содержащий результат преобразования. - Начиная с версии:
- 1.2
deltaTransform
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. -
srcOff— смещение до первого вектора, который нужно преобразовать в исходном массиве -
dstPts— массив, в который возвращаются преобразованные векторы расстояния. Каждый вектор хранится в виде пары относительных координат x, y. -
dstOff— смещение до расположения первого преобразованного вектора, сохранённого в массиве назначения -
numPts— количество пар координат векторов, которые нужно преобразовать - Начиная с версии:
- 1.2
createTransformedShape
public Shape createTransformedShape(Shape pSrc)
Shape, геометрия которого определяется указанным Shape после его преобразования этим преобразованием.- Параметры:
-
pSrc— указанный объектShape, который нужно преобразовать этим преобразованием. - Возвращает:
- новый объект
Shape, определяющий геометрию преобразованногоShape, или null, еслиpSrcравен null. - Начиная с версии:
- 1.2
toString
isIdentity
public boolean isIdentity()
true, если это AffineTransform является тождественным преобразованием.- Возвращает:
-
true, если этоAffineTransformявляется тождественным преобразованием; в противном случае —false. - Начиная с версии:
- 1.2
clone
hashCode
equals
public boolean equals(Object obj)
true, если это AffineTransform представляет то же аффинное преобразование координат, что и указанный аргумент.
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/java/awt/geom/AffineTransform.html