Класс 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 градусов диапазон углов, обрабатываемых как вращение на квадрант, составляет приблизительно 0,00000121 градуса. Этот раздел объясняет, почему необходима такая особая обработка и как она реализована.
Поскольку 90 градусов представляют собой PI/2 радиан, а PI – трансцендентное (и, следовательно, иррациональное) число, невозможно точно представить кратное 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() используются для прямого получения значений для модификаций матрицы во время операций вращения на основе радиан, то полученное преобразование никогда не будет строго классифицироваться как вращение на квадрант даже для простого случая, такого как rotate(Math.PI/2.0), из-за незначительных отклонений в матрице, вызванных ненулевыми значениями, полученными для синуса и косинуса. Если эти преобразования не классифицируются как вращения на квадрант, последующий код, пытающийся оптимизировать дальнейшие операции на основе типа преобразования, будет использовать наиболее общее его исполнение.
Поскольку вращения на квадрант довольно распространены, этот класс должен обрабатывать такие случаи достаточно быстро, как при применении вращений к преобразованию, так и при применении результирующего преобразования к координатам. Для обеспечения такой оптимальной обработки методы, принимающие угол вращения в радианах, пытаются определить углы, которые предназначены для вращения на квадрант, и обрабатывают их как таковые. Таким образом, эти методы рассматривают угол θ как вращение на квадрант, если либо 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 ненулевые записи, либо 6 указанных записей 3x3 матрицы преобразования. |
AffineTransform |
Создаёт новый AffineTransform из 6 значений с двойной точностью, представляющих 6 указанных записей 3x3 матрицы преобразования. |
AffineTransform |
Создаёт новый AffineTransform из массива значений с плавающей запятой, представляющих либо 4 ненулевые записи, либо 6 указанных записей 3x3 матрицы преобразования. |
AffineTransform |
Создаёт новый AffineTransform из 6 значений с плавающей запятой, представляющих 6 указанных записей 3x3 матрицы преобразования. |
AffineTransform |
Создаёт новый AffineTransform, являющийся копией указанного объекта AffineTransform. |
Краткое описание методов
| Modifier and Type | Method | Description |
|---|---|---|
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
- Since:
- 1.2
- См. также:
TYPE_TRANSLATION
public static final int TYPE_TRANSLATION
- Since:
- 1.2
- См. также:
TYPE_UNIFORM_SCALE
public static final int TYPE_UNIFORM_SCALE
- Since:
- 1.2
- См. также:
TYPE_GENERAL_SCALE
public static final int TYPE_GENERAL_SCALE
- Since:
- 1.2
- См. также:
TYPE_MASK_SCALE
public static final int TYPE_MASK_SCALE
- Since:
- 1.2
- См. также:
TYPE_FLIP
public static final int TYPE_FLIP
- Since:
- 1.2
- См. также:
TYPE_QUADRANT_ROTATION
public static final int TYPE_QUADRANT_ROTATION
- Since:
- 1.2
- См. также:
TYPE_GENERAL_ROTATION
public static final int TYPE_GENERAL_ROTATION
- Since:
- 1.2
- См. также:
TYPE_MASK_ROTATION
public static final int TYPE_MASK_ROTATION
- Since:
- 1.2
- См. также:
TYPE_GENERAL_TRANSFORM
public static final int TYPE_GENERAL_TRANSFORM
- Since:
- 1.2
- See Also:
Подробное описание конструкторов
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, возвращается тождественное преобразование. Эта операция эквивалентна вызову:
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, возвращается тождественное преобразование. Эта операция эквивалентна вызову:
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.- Параметры:
-
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 аффинной матрицы преобразования 3x3. Этот множитель матрицы определяет, как входные координаты Y будут влиять на выходные координаты Y, и является одним элементом масштаба преобразования. Для измерения степени, в которой координаты Y растягиваются или сжимаются этим преобразованием, используйте следующий код:
Point2D p = new Point2D.Double(0, 1);
p = tx.deltaTransform(p, p);
double scaleY = p.distance(0, 0);
- Возвращает:
- значение double, являющееся элементом
m11аффинной матрицы преобразования 3x3. - С:
- 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
Поворот
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
Поворот
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
Поворот
public void rotate(double vecx, double vecy)
vecx и vecy равны 0,0, к этому преобразованию не добавляется дополнительный поворот. Эта операция эквивалентна вызову:
rotate(Math.atan2(vecy, vecx));
- Параметры:
-
vecx- координата X вектора поворота -
vecy- координата Y вектора поворота - С:
- 1.6
Поворот
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
ПоворотНаЧетверти
public void quadrantRotate(int numquadrants)
rotate(numquadrants * Math.PI / 2.0);
Поворот на положительное количество четвертей вращает точки на положительной оси X к положительной оси Y.- Параметры:
-
numquadrants- количество дуг по 90 градусов для поворота - С:
- 1.6
ПоворотНаЧетверти
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
Масштабирование
public void scale(double sx, double sy)
AffineTransform, представленный следующей матрицей:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
- Параметры:
-
sx- множитель масштабирования по оси X -
sy- множитель масштабирования по оси Y - С:
- 1.2
Сдвиг
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
УстановитьТождество
public void setToIdentity()
- С:
- 1.2
УстановитьПеремещение
public void setToTranslation(double tx, double ty)
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
- Параметры:
-
tx- расстояние перемещения по оси X -
ty- расстояние перемещения по оси Y - С:
- 1.2
УстановитьПоворот
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
УстановитьПоворот
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
УстановитьПоворот
public void setToRotation(double vecx, double vecy)
vecx и vecy равны 0,0, преобразование устанавливается в тождественное преобразование. Эта операция эквивалентна вызову:
setToRotation(Math.atan2(vecy, vecx));
- Параметры:
-
vecx- координата X вектора поворота -
vecy- координата Y вектора поворота - С:
- 1.6
УстановитьПоворот
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
УстановитьПоворотНаЧетверти
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- массив, содержащий исходные объекты точки -
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].- Parameters:
-
srcPts- массив, содержащий исходные координаты точки. Каждая точка хранится как пара координат x, y. -
srcOff- смещение до первой точки, которая должна быть преобразована в исходном массиве -
dstPts- массив, в который возвращаются преобразованные координаты точки. Каждая точка хранится как пара координат x, y. -
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. -
srcOff- смещение до первой точки, которая должна быть преобразована в исходном массиве -
dstPts- массив, в который возвращаются преобразованные координаты точки. Каждая точка хранится как пара координат x, y. -
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. -
srcOff- смещение до первой точки, которая должна быть преобразована в исходном массиве -
dstPts- массив, в который возвращаются преобразованные координаты точки. Каждая точка хранится как пара координат x, y. -
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. -
srcOff- смещение до первой точки, которая должна быть преобразована в исходном массиве -
dstPts- массив, в который возвращаются преобразованные координаты точки. Каждая точка хранится как пара координат x, y. -
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. -
srcOff- смещение до первой точки, которая должна быть преобразована в исходном массиве -
dstPts- массив, в который возвращаются преобразованные координаты точки. Каждая точка хранится как пара координат x, y. -
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. -
srcOff- смещение до первого вектора, который должен быть преобразован в исходном массиве -
dstPts- массив, в который возвращаются преобразованные векторы смещения. Каждый вектор хранится как пара относительных координат x, y. -
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, 2023, 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/21/docs/api/java.desktop/java/awt/geom/AffineTransform.html