mate
Funciones matemáticas de uso general: valores absolutos, redondeo, trigonometría y el tipo Vec2/Rect para trabajar con posiciones y áreas.
usar std/mateConstantes
mate.pi decimal = 3.141592653589793
Tipos
mate.Rect
Un rectángulo alineado a los ejes, definido por su posición (pos) y tamaño (tamano).
pos Vec2tamano Vec2Rect.interseca(otro mate.Rect) bool
verdadero si este rectángulo se superpone con `otro`, aunque sea parcialmente.
Rect.contiene(punto mate.Vec2) bool
verdadero si `punto` cae dentro de este rectángulo.
Rect.centro() mate.Vec2
El punto central de este rectángulo.
Rect.interseccion(otro mate.Rect) mate.Rect
El rectángulo donde se superponen ambos; tiene tamaño cero si no se tocan.
Rect.desplazado(delta mate.Vec2) mate.Rect
Una copia de este rectángulo movida `delta`.
Rect.colision_circulo(centro mate.Vec2, radio decimal) bool
verdadero si un círculo con ese centro y radio toca este rectángulo.
mate.Vec2
Un vector/punto 2D: dos números decimales, x e y.
x decimaly decimalVec2.longitud() decimal
La magnitud (largo) del vector, es decir su distancia al origen (0, 0).
Vec2.normalizado() mate.Vec2
El mismo vector pero con longitud 1 (misma dirección, sin importar la magnitud original).
Vec2.distancia_a(otro mate.Vec2) decimal
La distancia entre este vector y `otro`, tratados como puntos.
Vec2.producto_punto(otro mate.Vec2) decimal
El producto punto (dot product) con `otro`: útil para saber qué tan alineados están dos vectores.
Vec2.rotado(angulo decimal) mate.Vec2
El mismo vector rotado `angulo` radianes alrededor del origen.
Vec2.colision_circulo(radio decimal, otro mate.Vec2, radio_otro decimal) bool
verdadero si un círculo de este radio centrado aquí se superpone con un círculo de `radio_otro` centrado en `otro`.
Vec2.angulo() decimal
Ángulo en radianes del vector respecto al eje x (0 apunta a la derecha; la y crece hacia abajo).
Vec2.interpolar(otro mate.Vec2, t decimal) mate.Vec2
El punto que está a la fracción `t` (0 a 1) del camino entre este vector y `otro`.
Vec2.reflejar(normal mate.Vec2) mate.Vec2
Este vector rebotado contra una superficie cuya normal (de longitud 1) es `normal`; útil para que una pelota rebote.
Vec2.perpendicular() mate.Vec2
Un vector de la misma longitud girado 90 grados en el sentido de las agujas del reloj en pantalla.
Funciones
mate.absoluto(valor decimal) decimal
Valor absoluto: siempre positivo o cero. Ejemplo: absoluto(-5) → 5
mate.minimo(a decimal, b decimal) decimal
El menor de dos valores. Ejemplo: minimo(3, 7) → 3
mate.maximo(a decimal, b decimal) decimal
El mayor de dos valores. Ejemplo: maximo(3, 7) → 7
mate.limitar(valor decimal, minimo decimal, maximo decimal) decimal
Recorta `valor` para que quede dentro de [minimo, maximo]. Ejemplo: limitar(150, 0, 100) → 100
mate.interpolar(a decimal, b decimal, t decimal) decimal
Interpola linealmente entre a y b según t (0 = a, 1 = b, 0.5 = el punto medio). Ejemplo: interpolar(0, 10, 0.5) → 5
mate.piso(valor decimal) entero
Redondea hacia abajo al entero más cercano. Ejemplo: piso(2.9) → 2
mate.techo(valor decimal) entero
Redondea hacia arriba al entero más cercano. Ejemplo: techo(2.1) → 3
mate.redondear(valor decimal) entero
Redondea al entero más cercano (0.5 redondea hacia arriba). Ejemplo: redondear(2.5) → 3
mate.raiz(valor decimal) decimal
Raíz cuadrada. Ejemplo: raiz(9) → 3
mate.seno(angulo decimal) decimal
Seno del ángulo dado en radianes.
mate.coseno(angulo decimal) decimal
Coseno del ángulo dado en radianes.
mate.atan2(y decimal, x decimal) decimal
Ángulo en radianes del vector (x, y) respecto al eje x, considerando el signo de ambos componentes (útil para apuntar hacia un punto).
mate.tangente(angulo decimal) decimal
Tangente del ángulo en radianes.
mate.potencia(base decimal, exponente decimal) decimal
`base` elevada a `exponente`; por ejemplo potencia(2, 10) es 1024.
mate.signo(valor decimal) decimal
-1 si el valor es negativo, 1 si es positivo y 0 si es cero; con enteros devuelve un entero.
mate.distancia(x1 decimal, y1 decimal, x2 decimal, y2 decimal) decimal
Distancia entre los puntos (x1, y1) y (x2, y2).
mate.angulo(x1 decimal, y1 decimal, x2 decimal, y2 decimal) decimal
Ángulo en radianes de la dirección que va del punto (x1, y1) al punto (x2, y2); útil para apuntar.
mate.radianes(grados decimal) decimal
Convierte grados a radianes.
mate.grados(radianes decimal) decimal
Convierte radianes a grados.
mate.bit_y(a entero, b entero) entero
Y bit a bit: quedan los bits encendidos en los dos números. Sirve para leer una máscara. Ejemplo: bit_y(0b1100, 0b1010) → 0b1000
mate.bit_o(a entero, b entero) entero
O bit a bit: quedan los bits encendidos en cualquiera de los dos. Sirve para encender una bandera. Ejemplo: bit_o(0b1100, 0b1010) → 0b1110
mate.bit_xor(a entero, b entero) entero
O exclusivo bit a bit: quedan los bits que difieren. Ejemplo: bit_xor(0b1100, 0b1010) → 0b0110
mate.bit_no(valor entero) entero
Invierte todos los bits del número. Con `bit_y` apaga una bandera: bit_y(banderas, bit_no(0b0100)).
mate.desplazar_izquierda(valor entero, bits entero) entero
Mueve los bits hacia la izquierda; cada posición multiplica por 2. `bits` no puede ser negativo y con 64 o más el resultado es 0. Ejemplo: desplazar_izquierda(1, 4) → 16
mate.desplazar_derecha(valor entero, bits entero) entero
Mueve los bits hacia la derecha conservando el signo; cada posición divide entre 2 redondeando hacia abajo. `bits` no puede ser negativo. Ejemplo: desplazar_derecha(0xFF00, 8) → 0xFF