Класс AffineTransform
- Все реализуемые интерфейсы:
-
Serializable,Cloneable
public class AffineTransform extends Object implements Cloneable, Serializable
AffineTransform представляет 2D аффинное преобразование, которое выполняет линейное отображение из 2D координат в другие 2D координаты, сохраняя «прямолинейность» и «параллельность» линий. Аффинные преобразования могут быть построены с помощью последовательности сдвигов, масштабирования, переворачивания, вращения и наклона. Такое преобразование координат может быть представлено матрицей 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 аргумент с двойной точностью задаёт угол поворота в радианах. Эти методы имеют специальную обработку для поворотов приблизительно на 90 градусов (включая кратные, такие как 180, 270 и 360 градусов), чтобы более эффективно обрабатывать распространённый случай поворота на 90 градусов. Эта специальная обработка может привести к тому, что углы, очень близкие к кратным 90 градусам, будут обрабатываться как точные кратные 90 градусов. Для малых кратных 90 градусов диапазон углов, обрабатываемых как поворот на 90 градусов, составляет приблизительно 0,00000121 градусов. Этот раздел объясняет, почему необходима такая особая обработка, и как она реализована.
Поскольку 90 градусов представляются как PI/2 в радианах, и поскольку PI является трансцендентным (и, следовательно, иррациональным) числом, то невозможно точно представить кратное 90 градусов как точное значение двойной точности, измеренное в радианах. В результате теоретически невозможно описать повороты на 90 градусов (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() используются для непосредственного получения значений для модификаций матрицы во время этих операций вращения на основе радиан, то полученное преобразование никогда не будет строго классифицировано как поворот на 90 градусов, даже в простом случае, как rotate(Math.PI/2.0), из-за незначительных вариаций в матрице, вызванных ненулевыми значениями, полученными для синуса и косинуса. Если эти преобразования не классифицируются как повороты на 90 градусов, то последующий код, пытающийся оптимизировать дальнейшие операции на основе типа преобразования, будет использовать самый общий вариант реализации.
Поскольку повороты на 90 градусов довольно распространены, этот класс должен обрабатывать эти случаи достаточно быстро, как при применении вращений к преобразованию, так и при применении полученного преобразования к координатам. Для обеспечения оптимальной обработки методы, принимающие угол поворота в радианах, пытаются определить углы, предназначенные для поворотов на 90 градусов, и обрабатывают их как таковые. Таким образом, эти методы рассматривают угол тета как поворот на 90 градусов, если 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 градусов на какое-либо кратное 90 градусов, в дополнение к преобразованиям, указанным другими флагами. |
static final int |
TYPE_TRANSLATION |
Этот флаг указывает, что преобразование, определённое этим объектом, выполняет сдвиг в дополнение к преобразованиям, указанным другими флагами. |
static final int |
TYPE_UNIFORM_SCALE |
Этот флаг указывает, что преобразование, определённое этим объектом, выполняет равномерное масштабирование в дополнение к преобразованиям, указанным другими флагами. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
AffineTransform() |
Создаёт новый AffineTransform, представляющий тождественное преобразование. |
AffineTransform |
Создаёт новый AffineTransform из массива значений с двойной точностью, представляющего либо 4 не-сдвигающих записи, либо 6 задаваемых записей матрицы преобразования 3x3. |
AffineTransform |
Создаёт новый AffineTransform из 6 значений с двойной точностью, представляющих 6 задаваемых записей матрицы преобразования 3x3. |
AffineTransform |
Создаёт новый AffineTransform из массива значений с плавающей запятой, представляющего либо 4 не-сдвигающих записи, либо 6 задаваемых записей матрицы преобразования 3x3. |
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
TYPE_TRANSLATION
public static final int TYPE_TRANSLATION
TYPE_UNIFORM_SCALE
public static final int TYPE_UNIFORM_SCALE
TYPE_GENERAL_SCALE
public static final int TYPE_GENERAL_SCALE
TYPE_MASK_SCALE
public static final int TYPE_MASK_SCALE
- Since:
- 1.2
- См. также:
TYPE_FLIP
public static final int TYPE_FLIP
TYPE_QUADRANT_ROTATION
public static final int TYPE_QUADRANT_ROTATION
TYPE_GENERAL_ROTATION
public static final int TYPE_GENERAL_ROTATION
TYPE_MASK_ROTATION
public static final int TYPE_MASK_ROTATION
- Since:
- 1.2
- См. также:
TYPE_GENERAL_TRANSFORM
public static final int TYPE_GENERAL_TRANSFORM
Подробное описание конструкторов
AffineTransform
public AffineTransform()
AffineTransform, представляющий тождественное преобразование.- Since:
- 1.2
AffineTransform
public AffineTransform(AffineTransform Tx)
AffineTransform, являющийся копией указанного объекта AffineTransform.- Parameters:
-
Tx- копируемый объектAffineTransform - Since:
- 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.- Parameters:
-
m00- элемент масштабирования по оси X матрицы 3x3 -
m10- элемент сдвига по оси Y матрицы 3x3 -
m01- элемент сдвига по оси X матрицы 3x3 -
m11- элемент масштабирования по оси Y матрицы 3x3 -
m02- элемент смещения по оси X матрицы 3x3 -
m12- элемент смещения по оси Y матрицы 3x3 - Since:
- 1.2
AffineTransform
public AffineTransform(float[] flatmatrix)
AffineTransform из массива значений с плавающей запятой, представляющего либо 4 элемента, не являющиеся смещениями, либо 6 задаваемых элементов матрицы преобразования 3x3. Значения извлекаются из массива как { m00 m10 m01 m11 [m02 m12]}. - Parameters:
-
flatmatrix- массив float, содержащий значения, которые нужно установить в новый объектAffineTransform. Длина массива предполагается не менее 4. Если длина массива меньше 6, берутся только первые 4 значения. Если длина массива больше 6, берутся первые 6 значений. - Since:
- 1.2
AffineTransform
public AffineTransform(double m00, double m10, double m01, double m11, double m02, double m12)
AffineTransform из 6 значений двойной точности, представляющих 6 задаваемых элементов матрицы преобразования 3x3.- Parameters:
-
m00- элемент масштабирования по оси X матрицы 3x3 -
m10- элемент сдвига по оси Y матрицы 3x3 -
m01- элемент сдвига по оси X матрицы 3x3 -
m11- элемент масштабирования по оси Y матрицы 3x3 -
m02- элемент смещения по оси X матрицы 3x3 -
m12- элемент смещения по оси Y матрицы 3x3 - Since:
- 1.2
AffineTransform
public AffineTransform(double[] flatmatrix)
AffineTransform из массива значений двойной точности, представляющего либо 4 элемента, не являющиеся смещениями, либо 6 задаваемых элементов матрицы преобразования 3x3. Значения извлекаются из массива как { m00 m10 m01 m11 [m02 m12]}. - Parameters:
-
flatmatrix- массив double, содержащий значения, которые нужно установить в новый объектAffineTransform. Длина массива предполагается не менее 4. Если длина массива меньше 6, берутся только первые 4 значения. Если длина массива больше 6, берутся первые 6 значений. - Since:
- 1.2
Подробное описание методов
getTranslateInstance
public static AffineTransform getTranslateInstance(double tx, double ty)
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
- Parameters:
-
tx- расстояние, на которое координаты смещаются по оси X -
ty- расстояние, на которое координаты смещаются по оси Y - Returns:
- объект
AffineTransform, представляющий преобразование смещения, созданный со заданным вектором. - Since:
- 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 градусов выше.- Parameters:
-
theta- угол поворота в радианах - Returns:
- объект
AffineTransform, представляющий поворот, созданный с указанным углом поворота. - Since:
- 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 градусов выше.- Parameters:
-
theta- угол поворота в радианах -
anchorx- координата X точки-якоря поворота -
anchory- координата Y точки-якоря поворота - Returns:
- объект
AffineTransform, который вращает координаты вокруг указанной точки на указанный угол поворота. - Since:
- 1.2
getRotateInstance
public static AffineTransform getRotateInstance(double vecx, double vecy)
vecx и vecy равны 0,0, возвращается тождественное преобразование. Эта операция эквивалентна вызову:
AffineTransform.getRotateInstance(Math.atan2(vecy, vecx));
- Parameters:
-
vecx- координата X вектора поворота -
vecy- координата Y вектора поворота - Returns:
- объект
AffineTransform, который вращает координаты по указанному вектору поворота. - Since:
- 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);
- Parameters:
-
vecx- координата X вектора поворота -
vecy- координата Y вектора поворота -
anchorx- координата X точки-якоря поворота -
anchory- координата Y точки-якоря поворота - Returns:
- объект
AffineTransform, который вращает координаты вокруг указанной точки по указанному вектору поворота. - Since:
- 1.6
getQuadrantRotateInstance
public static AffineTransform getQuadrantRotateInstance(int numquadrants)
AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0);
Поворот на положительное число квадрантов вращает точки на положительной оси X к положительной оси Y.- Parameters:
-
numquadrants- число 90-градусных дуг для поворота - Returns:
- объект
AffineTransform, который вращает координаты на указанное число квадрантов. - Since:
- 1.6
getQuadrantRotateInstance
public static AffineTransform getQuadrantRotateInstance(int numquadrants, double anchorx, double anchory)
AffineTransform.getRotateInstance(numquadrants * Math.PI / 2.0,
anchorx, anchory);
Вращение на положительное количество квадрантов поворачивает точки на положительной оси X к положительной оси Y.- Parameters:
-
numquadrants- количество 90-градусных дуг поворота -
anchorx- координата X точки вращения -
anchory- координата Y точки вращения - Returns:
- объект
AffineTransform, который вращает координаты на указанное количество квадрантов вокруг указанной точки якорной точки. - Since:
- 1.6
getScaleInstance
public static AffineTransform getScaleInstance(double sx, double sy)
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
- Parameters:
-
sx- коэффициент масштабирования координат по оси X -
sy- коэффициент масштабирования координат по оси Y - Returns:
- объект
AffineTransform, который масштабирует координаты на указанные коэффициенты. - Since:
- 1.2
getShearInstance
public static AffineTransform getShearInstance(double shx, double shy)
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
- Parameters:
-
shx- множитель, на который координаты смещаются в направлении положительной оси X как функция от их координаты Y -
shy- множитель, на который координаты смещаются в направлении положительной оси Y как функция от их координаты X - Returns:
- объект
AffineTransform, который смещает координаты на указанные множители. - Since:
- 1.2
getType
public int getType()
- Returns:
- логическое ИЛИ всех применимых флагов к этому преобразованию
- Since:
- 1.2
- See Also:
getDeterminant
public double getDeterminant()
Если определитель не равен нулю, то это преобразование обратимо, и различные методы, зависящие от обратного преобразования, не должны выбрасывать исключение NoninvertibleTransformException. Если определитель равен нулю, то это преобразование не может быть обращено, так как преобразование отображает все входные координаты на линию или точку. Если определитель близок к нулю, то операции обратного преобразования могут не иметь достаточной точности для получения осмысленных результатов.
Если это преобразование представляет собой равномерный масштаб, как указано методом getType, то определитель также представляет квадрат коэффициента равномерного масштаба, на который все точки расширяются или сжимаются к началу координат. Если это преобразование представляет собой неравномерный масштаб или более общее преобразование, то определитель вряд ли будет представлять значение, полезное для какой-либо цели, кроме определения, возможны ли обратные преобразования.
Математически определитель вычисляется по формуле:
| m00 m01 m02 |
| m10 m11 m12 | = m00 * m11 - m01 * m10
| 0 0 1 |
- Returns:
- определитель матрицы, используемой для преобразования координат.
- Since:
- 1.2
- See Also:
getMatrix
public void getMatrix(double[] flatmatrix)
- Parameters:
-
flatmatrix- массив double для хранения возвращаемых значений. - Since:
- 1.2
- See Also:
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);
- Returns:
- значение double, которое является элементом
m00матрицы аффинного преобразования 3x3. - Since:
- 1.2
- See Also:
getScaleY
public double getScaleY()
m11 матрицы аффинного преобразования 3x3. Этот коэффициент матрицы определяет, как входные координаты Y повлияют на выходные координаты Y, и представляет собой один элемент масштаба преобразования. Для измерения полного количества, на которое координаты Y растягиваются или сжимаются этим преобразованием, используйте следующий код:
Point2D p = new Point2D.Double(0, 1);
p = tx.deltaTransform(p, p);
double scaleY = p.distance(0, 0);
- Returns:
- значение double, которое является элементом
m11матрицы аффинного преобразования 3x3. - Since:
- 1.2
- See Also:
getShearX
public double getShearX()
- Returns:
- значение double, являющееся координатой X элемента сдвига матрицы аффинного преобразования.
- Since:
- 1.2
- See Also:
getShearY
public double getShearY()
- Returns:
- значение double, являющееся координатой Y элемента сдвига матрицы аффинного преобразования.
- Since:
- 1.2
- See Also:
getTranslateX
public double getTranslateX()
- Returns:
- значение double, являющееся координатой X элемента смещения матрицы аффинного преобразования.
- Since:
- 1.2
- See Also:
getTranslateY
public double getTranslateY()
- Returns:
- значение double, являющееся координатой Y элемента смещения матрицы аффинного преобразования.
- Since:
- 1.2
- See Also:
translate
public void translate(double tx, double ty)
AffineTransform, представленное следующей матрицей:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
- Parameters:
-
tx- расстояние смещения по оси X -
ty- расстояние смещения по оси Y - Since:
- 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 матрицы 3x3 -
m10- элемент сдвига координаты Y матрицы 3x3 -
m01- элемент сдвига координаты X матрицы 3x3 -
m11- элемент масштабирования координаты Y матрицы 3x3 -
m02- элемент смещения координаты X матрицы 3x3 -
m12- элемент смещения координаты Y матрицы 3x3 - С:
- 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- массив, содержащий исходные объекты точек -
ptDst- массив, в который возвращаются преобразованные объекты точек -
srcOff- смещение до первой точки для преобразования в исходном массиве -
dstOff- смещение до местоположения первой преобразованной точки, которая сохраняется в целевом массиве -
numPts- число точек, которые необходимо преобразовать - С:
- 1.2
transform
public void transform(float[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Parameters:
-
srcPts- массив, содержащий исходные координаты точек. Каждая точка хранится как пара координат x, y. -
dstPts- массив, в который возвращаются преобразованные координаты точек. Каждая точка хранится как пара координат x, y. -
srcOff- смещение до первой точки для преобразования в исходном массиве -
dstOff- смещение до места первой преобразованной точки, хранящейся в целевом массиве -
numPts- количество точек для преобразования - Since:
- 1.2
transform
public void transform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Parameters:
-
srcPts- массив, содержащий исходные координаты точек. Каждая точка хранится как пара координат x, y. -
dstPts- массив, в который возвращаются преобразованные координаты точек. Каждая точка хранится как пара координат x, y. -
srcOff- смещение до первой точки для преобразования в исходном массиве -
dstOff- смещение до места первой преобразованной точки, хранящейся в целевом массиве -
numPts- количество точек для преобразования - Since:
- 1.2
transform
public void transform(float[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Parameters:
-
srcPts- массив, содержащий исходные координаты точек. Каждая точка хранится как пара координат x, y. -
dstPts- массив, в который возвращаются преобразованные координаты точек. Каждая точка хранится как пара координат x, y. -
srcOff- смещение до первой точки для преобразования в исходном массиве -
dstOff- смещение до места первой преобразованной точки, хранящейся в целевом массиве -
numPts- количество точек для преобразования - Since:
- 1.2
transform
public void transform(double[] srcPts, int srcOff, float[] dstPts, int dstOff, int numPts)
[x0, y0, x1, y1, ..., xn, yn].- Parameters:
-
srcPts- массив, содержащий исходные координаты точек. Каждая точка хранится как пара координат x, y. -
dstPts- массив, в который возвращаются преобразованные координаты точек. Каждая точка хранится как пара координат x, y. -
srcOff- смещение до первой точки для преобразования в исходном массиве -
dstOff- смещение до места первой преобразованной точки, хранящейся в целевом массиве -
numPts- количество точек для преобразования - Since:
- 1.2
inverseTransform
public Point2D inverseTransform(Point2D ptSrc, Point2D ptDst) throws NoninvertibleTransformException
ptSrc и сохранение результата в ptDst. Если ptDst равно null, новый объект Point2D выделяется, и затем результат преобразования сохраняется в этом объекте. В любом случае, ptDst, содержащий преобразованную точку, возвращается для удобства. Если ptSrc и ptDst являются одним и тем же объектом, входная точка правильно перезаписывается преобразованной точкой.- Parameters:
-
ptSrc- точка, которая должна быть обратным преобразованием -
ptDst- результирующая преобразованная точка - Returns:
-
ptDst, содержащий результат обратного преобразования. - Throws:
-
NoninvertibleTransformException- если матрица не может быть обращена. - Since:
- 1.2
inverseTransform
public void inverseTransform(double[] srcPts, int srcOff, double[] dstPts, int dstOff, int numPts) throws NoninvertibleTransformException
[x0, y0, x1, y1, ..., xn, yn].- Parameters:
-
srcPts- массив, содержащий исходные координаты точек. Каждая точка хранится как пара координат x, y. -
dstPts- массив, в который возвращаются преобразованные координаты точек. Каждая точка хранится как пара координат x, y. -
srcOff- смещение до первой точки для преобразования в исходном массиве -
dstOff- смещение до места первой преобразованной точки, хранящейся в целевом массиве -
numPts- количество точек для преобразования - Throws:
-
NoninvertibleTransformException- если матрица не может быть обращена. - Since:
- 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 являются одним и тем же объектом, входная точка правильно перезаписывается преобразованной точкой.- Parameters:
-
ptSrc- вектор смещения, который должен быть преобразован -
ptDst- результирующий преобразованный вектор смещения - Returns:
-
ptDst, содержащий результат преобразования. - Since:
- 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].- Parameters:
-
srcPts- массив, содержащий исходные векторы смещения. Каждый вектор хранится как пара относительных координат x, y. -
dstPts- массив, в который возвращаются преобразованные векторы смещения. Каждый вектор хранится как пара относительных координат x, y. -
srcOff- смещение до первого вектора для преобразования в исходном массиве -
dstOff- смещение до места первого преобразованного вектора, хранящегося в целевом массиве -
numPts- количество пар координат векторов для преобразования - Since:
- 1.2
createTransformedShape
public Shape createTransformedShape(Shape pSrc)
Shape, определяемый геометрией указанного Shape после преобразования с помощью этого преобразования.- Parameters:
-
pSrc- указанный объектShape, который должен быть преобразован с помощью этого преобразования. - Returns:
- новый объект
Shape, определяющий геометрию преобразованногоShape, или null, еслиpSrcравно null. - Since:
- 1.2
toString
public String toString()
String, представляющий значение этого Object.- Overrides:
-
toStringв классеObject - Returns:
String, представляющий значение этогоObject.- Since:
- 1.2
isIdentity
public boolean isIdentity()
true, если это AffineTransform является тождественным преобразованием.- Returns:
-
true, если этоAffineTransformявляется тождественным преобразованием;falseв противном случае. - Since:
- 1.2
clone
public Object clone()
AffineTransform объекта.- Overrides:
-
cloneв классеObject - Returns:
- объект
Object, являющийся копией этого объектаAffineTransform. - Since:
- 1.2
- See Also:
hashCode
public int hashCode()
- Overrides:
-
hashCodeв классеObject - Returns:
- хэш-код для этого преобразования.
- Since:
- 1.2
- See Also:
equals
public boolean equals(Object obj)
true, если этот AffineTransform представляет ту же аффинную координатную трансформацию, что и указанный аргумент.- Overrides:
-
equalsв классеObject - Parameters:
-
obj- объектObjectдля проверки равенства с этим объектомAffineTransform - Returns:
-
true, еслиobjравен этому объектуAffineTransform;falseв противном случае. - Since:
- 1.2
- See Also:
© 1993, 2021, 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/17/docs/api/java.desktop/java/awt/geom/AffineTransform.html