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