Transform2D
Una matriz de 2×3 que representa una transformación 2D.
Descripción
El tipo Variant incorporado Transform2D es una matriz de 2×3 que representa una transformación en el espacio 2D. Contiene tres valores Vector2: x, y y origin. Juntos, pueden representar traslación, rotación, escala e inclinación.
Los ejes x e y forman una matriz de 2×2, conocida como la base de la transformación. La longitud de cada eje (Vector2.length()) influye en la escala de la transformación, mientras que la dirección de todos los ejes influye en la rotación. Por lo general, ambos ejes son perpendiculares entre sí. Sin embargo, cuando se gira un eje individualmente, la transformación se sesga. La aplicación de una transformación sesgada a un sprite 2D hará que el sprite aparezca distorsionado.
Para una introducción general, consulta el tutorial Matrices y transformaciones.
Nota: A diferencia de Transform3D, no hay equivalente 2D al tipo Basis. Todas las menciones de "base" se refieren a los componentes x e y de Transform2D.
Nota
Hay diferencias notables cuando usa esta API con C#. Véase Diferencias de la API de C# con GDScript para más información.
Tutoriales
Propiedades
|
||
|
||
|
Constructores
Transform2D(from: Transform2D) |
|
Transform2D(rotation: float, position: Vector2) |
|
Transform2D(rotation: float, scale: Vector2, skew: float, position: Vector2) |
|
Transform2D(x_axis: Vector2, y_axis: Vector2, origin: Vector2) |
Métodos
affine_inverse() const |
|
basis_xform(v: Vector2) const |
|
basis_xform_inv(v: Vector2) const |
|
determinant() const |
|
get_origin() const |
|
get_rotation() const |
|
get_scale() const |
|
get_skew() const |
|
interpolate_with(xform: Transform2D, weight: float) const |
|
inverse() const |
|
is_conformal() const |
|
is_equal_approx(xform: Transform2D) const |
|
is_finite() const |
|
looking_at(target: Vector2 = Vector2(0, 0)) const |
|
orthonormalized() const |
|
rotated_local(angle: float) const |
|
scaled_local(scale: Vector2) const |
|
translated(offset: Vector2) const |
|
translated_local(offset: Vector2) const |
Operadores
operator !=(right: Transform2D) |
|
operator *(right: PackedVector2Array) |
|
operator *(right: Rect2) |
|
operator *(right: Transform2D) |
|
operator *(right: Vector2) |
|
operator *(right: float) |
|
operator *(right: int) |
|
operator /(right: float) |
|
operator /(right: int) |
|
operator ==(right: Transform2D) |
|
operator [](index: int) |
Constantes
IDENTITY = Transform2D(1, 0, 0, 1, 0, 0) 🔗
La Transform2D identidad. Es una transformación sin traslación, sin rotación y con una escala de Vector2.ONE. Esto también significa que:
x apunta a la derecha (Vector2.RIGHT);
y apunta hacia abajo (Vector2.DOWN).
var transform = Transform2D.IDENTITY
print("| X | Y | Origin")
print("| %.f | %.f | %.f" % [transform.x.x, transform.y.x, transform.origin.x])
print("| %.f | %.f | %.f" % [transform.x.y, transform.y.y, transform.origin.y])
# Imprime:
# | X | Y | Origen
# | 1 | 0 | 0
# | 0 | 1 | 0
Si un Vector2, un Rect2, un PackedVector2Array, u otro Transform2D es transformado (multiplicado) por esta constante, no ocurre ninguna transformación.
Nota: En GDScript, esta constante es equivalente a crear un Transform2D sin ningún argumento. Puede usarse para hacer tu código más claro y por consistencia con C#.
FLIP_X = Transform2D(-1, 0, 0, 1, 0, 0) 🔗
Cuando cualquier transformación es multiplicada por FLIP_X, niega todos los componentes del eje x (la columna X).
Cuando FLIP_X es multiplicado por cualquier transformación, niega el componente Vector2.x de todos los ejes (la fila X).
FLIP_Y = Transform2D(1, 0, 0, -1, 0, 0) 🔗
Cuando cualquier transformación se multiplica por FLIP_Y, niega todos los componentes del eje y (la columna Y).
Cuando FLIP_Y se multiplica por cualquier transformación, niega el componente Vector2.y de todos los ejes (la fila Y).
Descripciones de Propiedades
Vector2 origin = Vector2(0, 0) 🔗
El desplazamiento de traslación de esta transformación, y la columna 2 de la matriz. En el espacio 2D, esto puede verse como la posición.
El eje X de la base de la transformación, y la columna 0 de la matriz. Combinado con y, esto representa la rotación, la escala y el sesgo de la transformación.
En la transformación identidad, este vector apunta a la derecha (Vector2.RIGHT).
El eje Y de la base de la transformación y la columna 1 de la matriz. Combinado con x, representa la rotación, escala y sesgo de la transformación.
En la transformación identidad, este vector apunta hacia abajo (Vector2.DOWN).
Descripciones de Constructores
Transform2D Transform2D() 🔗
Construye una Transform2D idéntica a IDENTITY.
Nota: En C#, esto construye una Transform2D con todos sus componentes establecidos a Vector2.ZERO.
Transform2D Transform2D(from: Transform2D)
Construye un Transform2D como una copia del Transform2D dado.
Transform2D Transform2D(rotation: float, position: Vector2)
Construye un Transform2D a partir de un ángulo (en radianes) y posición determinados.
Transform2D Transform2D(rotation: float, scale: Vector2, skew: float, position: Vector2)
Construye un Transform2D a partir de un ángulo (en radianes), escala, inclinación (en radianes) y posición determinados.
Transform2D Transform2D(x_axis: Vector2, y_axis: Vector2, origin: Vector2)
Construye un Transform2D a partir de 3 valores Vector2 que representan el x, el y y el origin (las tres columnas de la matriz).
Descripciones de Métodos
Transform2D affine_inverse() const 🔗
Devuelve la versión invertida de esta transformación. A diferencia de inverse(), este método funciona con casi cualquier base, incluyendo las no uniformes, pero es más lento.
Nota: Para que este método se devuelva correctamente, la base de la transformación debe tener un determinante que no sea exactamente 0.0 (véase determinant()).
Vector2 basis_xform(v: Vector2) const 🔗
Devuelve una copia del vector v, transformado (multiplicado) por la matriz de la base de la transformación. A diferencia del operador de multiplicación (*), este método ignora el origin.
Vector2 basis_xform_inv(v: Vector2) const 🔗
Devuelve una copia del vector v, transformado (multiplicado) por la matriz de la base de la transformación inversa (véase inverse()). Este método ignora el origin.
Nota: Este método asume que la base de esta transformación es ortonormal (véase orthonormalized()). Si la base no es ortonormal, debería usarse transform.affine_inverse().basis_xform(vector) en su lugar (véase affine_inverse()).
Devuelve el determinante de la matriz de la base de esta transformación. Para matemáticas avanzadas, este número puede ser usado para determinar algunos atributos:
Si el determinante es exactamente
0.0, la base no es invertible (véase inverse()).Si el determinante es un número negativo, la base representa una escala negativa.
Nota: Si la escala de la base es la misma para cada eje, su determinante es siempre esa escala por la potencia de 2.
Devuelve la traducción de esta transformación. Equivalente a origin.
Devuelve la rotación de esta transformación (en radianes). Esto es equivalente al ángulo de x (véase Vector2.angle()).
Devuelve la longitud de ambos x e y, como un Vector2. Si la base de esta transformación no está sesgada, este valor es el factor de escala. No se ve afectado por la rotación.
var mi_transformacion = Transform2D(
Vector2(2, 0),
Vector2(0, 4),
Vector2(0, 0)
)
# Rotar la Transform2D de cualquier manera preserva su escala.
mi_transformacion = mi_transformacion.rotated(TAU / 2)
print(mi_transformacion.get_scale()) # Imprime (2.0, 4.0)
var miTransformacion = new Transform2D(
Vector3(2.0f, 0.0f),
Vector3(0.0f, 4.0f),
Vector3(0.0f, 0.0f)
);
// Rotar la Transform2D de cualquier manera preserva su escala.
miTransformacion = miTransformacion.Rotated(Mathf.Tau / 2.0f);
GD.Print(miTransformacion.GetScale()); // Imprime (2, 4)
Nota: Si el valor devuelto por determinant() es negativo, la escala también es negativa.
Devuelve la desviación de esta transformación (en radianes).
Transform2D interpolate_with(xform: Transform2D, weight: float) const 🔗
Devuelve el resultado de la interpolación lineal entre esta transformación y xform por el weight dado.
El weight debe estar entre 0.0 y 1.0 (inclusive). Se permiten valores fuera de este rango y se pueden utilizar para realizar extrapolación en su lugar.
Transform2D inverse() const 🔗
Devuelve la versión ` invertida de esta transformación <https://en.wikipedia.org/wiki/Invertible_matrix>`__.
Nota: Para que este método se devuelva correctamente, la base de la transformación debe ser ortonormal (véase orthonormalized()). Eso significa que la base sólo debe representar una rotación. Si no es así, utiliza affine_inverse() en su lugar.
Devuelve true si la base de esta transformación es conforme. Una base conforme es tanto ortogonal (los ejes son perpendiculares entre sí) como uniforme (los ejes comparten la misma longitud). Este método puede ser especialmente útil durante los cálculos de física.
bool is_equal_approx(xform: Transform2D) const 🔗
Devuelve true si esta transformación y xform son aproximadamente iguales, ejecutando @GlobalScope.is_equal_approx() en cada componente.
Devuelve true si esta transformación es finita, llamando a @GlobalScope.is_finite() en cada componente.
Transform2D looking_at(target: Vector2 = Vector2(0, 0)) const 🔗
Devuelve una copia de la transformación rotada de tal manera que el eje X rotado apunte hacia la posición target, en el espacio global.
Transform2D orthonormalized() const 🔗
Devuelve una copia de esta transformación con su base ortonormalizada. Una base ortonormal es tanto ortogonal (los ejes son perpendiculares entre sí) como normalizada (los ejes tienen una longitud de 1.0), lo que también significa que sólo puede representar una rotación.
Transform2D rotated(angle: float) const 🔗
Devuelve una copia de esta transformación rotada por el angle dado (en radianes).
Si angle es positivo, la transformación se rota en el sentido de las agujas del reloj.
Este método es una versión optimizada de la multiplicación de la transformación X dada con una transformación de rotación R correspondiente desde la izquierda, es decir, R * X.
Esto puede verse como una transformación con respecto al fotograma global/padre.
Transform2D rotated_local(angle: float) const 🔗
Devuelve una copia de la transformación rotada por el angle dado (en radianes).
Este método es una versión optimizada de la multiplicación de la transformación X dada con una transformación de rotación R correspondiente desde la derecha, es decir, X * R.
Esto puede verse como una transformación con respecto al fotograma local.
Transform2D scaled(scale: Vector2) const 🔗
Devuelve una copia de la transformación escalada por el factor scale dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de escalado correspondiente S desde la izquierda, es decir, S * X.
Esto puede ser visto como una transformación con respecto al marco global/padre.
Transform2D scaled_local(scale: Vector2) const 🔗
Devuelve una copia de la transformación escalada por el factor scale dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de escalado correspondiente S desde la derecha, es decir, X * S.
Esto puede ser visto como una transformación con respecto al marco local.
Transform2D translated(offset: Vector2) const 🔗
Devuelve una copia de la transformación trasladada por el offset dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de traslación correspondiente T desde la izquierda, es decir, T * X.
Esto puede ser visto como una transformación con respecto al marco global/padre.
Transform2D translated_local(offset: Vector2) const 🔗
Devuelve una copia de la transformación trasladada por el offset dado.
Este método es una versión optimizada de multiplicar la transformación dada X con una transformación de traslación correspondiente T desde la derecha, es decir, X * T.
Esto puede ser visto como una transformación con respecto al marco local.
Descripciones de Operadores
bool operator !=(right: Transform2D) 🔗
Devuelve true si los componentes de ambas transformaciones no son iguales.
Nota: Debido a los errores de precisión de punto flotante, considera usar is_equal_approx() en su lugar, lo cual es más fiable.
PackedVector2Array operator *(right: PackedVector2Array) 🔗
Transforma (multiplica) cada elemento Vector2 del PackedVector2Array dado por esta matriz de transformación.
En arrays más grandes, esta operación es mucho más rápida que transformar cada Vector2 individualmente.
Rect2 operator *(right: Rect2) 🔗
Transforma (multiplica) el Rect2 por esta matriz de transformación.
Transform2D operator *(right: Transform2D) 🔗
Transforma (multiplica) esta transformación por la transformación right.
Esta es la operación realizada entre los nodos CanvasItem padre e hijo.
Nota: Si necesitas modificar sólo un atributo de esta transformación, considera usar uno de los siguientes métodos, en su lugar:
Para la traslación, mira translated() o translated_local().
Para la rotación, mira rotated() o rotated_local().
Para la escala, mira scaled() o scaled_local().
Vector2 operator *(right: Vector2) 🔗
Transforma (multiplica) el Vector2 por esta matriz de transformación.
Transform2D operator *(right: float) 🔗
Multiplica todos los componentes del Transform2D por el float dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente.
Transform2D operator *(right: int) 🔗
Multiplica todos los componentes del Transform2D por el int dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente.
Transform2D operator /(right: float) 🔗
Divide todos los componentes del Transform2D por el float dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente.
Transform2D operator /(right: int) 🔗
Divide todos los componentes del Transform2D por el int dado, incluyendo el origin. Esto afecta la escala de la transformación uniformemente.
bool operator ==(right: Transform2D) 🔗
Devuelve true si los componentes de ambas transformaciones son exactamente iguales.
Nota: Debido a errores de precisión de punto flotante, considera usar is_equal_approx() en su lugar, lo cual es más fiable.
Vector2 operator [](index: int) 🔗
Accede a cada eje (columna) de esta transformación por su índice. El índice 0 es el mismo que x, el índice 1 es el mismo que y, y el índice 2 es el mismo que origin.