Tengo un patrón geométrico, por ejemplo, una cruz:
Que quiero repetir con algo de superposición y mosaico… fácil:
El cuadrado azul marca el mosaico de unidad de 100 × 100 px.
Sin embargo, aquí viene el problema: quiero rotar la imagen unos 30° y luego colocarla en mosaico. Esto ha resultado sorprendentemente difícil; por supuesto, rotar la imagen es fácil, pero encontrar un mosaico de unidad perpendicular (el bloque azul en la imagen de arriba) no lo es:
Claramente, el mosaico de 100 × 100 unidades no lo cortará. ¿Cómo elijo la ficha de unidad correcta? Presumiblemente, la posición no importa, solo el tamaño es importante, pero no sé cómo calcularlo. Intuitivamente, espero que el ángulo de rotación y el producto punto se presenten en gran medida, pero eso es todo lo que obtuve 1 . Lo que es peor, la rotación para ángulos arbitrarios no es exacta debido a la discreción inherente de los píxeles, por lo que incluso si calculo el tamaño matemáticamente correcto, no necesariamente dará como resultado un mosaico sin costuras.
Entonces, ¿cómo puedo calcular una combinación óptima de ángulo/tamaño dado el tamaño de la celda unitaria perpendicular (aquí, 100 × 100) y un ángulo deseado aproximado?
1 Pensé que (usando la notación de Wikipedia), ya que queremos que la proyección de A sobre B sea tan larga como B, tenemos |B|=|A|·cosϑ, y por lo tanto |A|=|B|/cosϑ . Lo cual, en mi caso, daría como resultado la nueva longitud |A|=115.470 pero un simple intento muestra que esto no puede ser correcto ni mucho menos, además de dar como resultado un número feo no entero. De hecho, con solo mirar la imagen rotada de arriba, podemos ver que la imagen completa de 200 × 400 no contiene una unidad perpendicular repetida.
Encontré esto que podría ser de ayuda: Crear patrones enlosables rotados
Como mencionas, hay matemáticas involucradas que están mucho más allá de mi comprensión, así que solo traeré algunos de los principios que tienen que ver con el diseño.
Básicamente, la 'solución' sería:
La siguiente imagen muestra una textura rotada que se formó al colocar en mosaico el patrón original sin rotar y luego rotar el mosaico resultante. El elemento de textura básico sin rotar está resaltado y tiene un ancho w y un alto h. El ángulo de giro es el ángulo agudo que forma la recta w con la horizontal:
Como queremos ángulos agudos, si giras en la otra dirección, entonces el diagrama de arriba se ve así:
El tamaño de la imagen (ancho x alto) necesario para que la textura se pueda enlosar se puede encontrar de la siguiente manera:
La explicación continúa un poco más, por lo que si la encontró útil, siéntase libre de editar la respuesta (o publicar una nueva).
Aquí hay un enfoque no matemático de cuando necesitaba hacer cosas similares:
Ahora tiene lo que debería ser un rectángulo de 4 líneas alrededor del mosaico más pequeño posible (nuevamente, no será pequeño).
Luego hay un poco de prueba y error frustrante para que sea perfecto en píxeles, entonces deberías estar listo para comenzar.
joojaa