Eu tenho um padrão geométrico - digamos, uma cruz:
O que eu quero repetir com alguma sobreposição e lado a lado ... fácil:
O quadrado azul marca o bloco da unidade de 100 × 100 px.
No entanto, aqui está o problema: eu quero girar a imagem em cerca de 30 ° e depois colocá-la em mosaico. Isso se mostrou surpreendentemente difícil; é claro que é fácil girar a imagem - mas encontrar um bloco de unidade perpendicular (o bloco azul na imagem acima) não é:
Claramente, o ladrilho da unidade 100 × 100 não será suficiente. Como escolho o bloco de unidades correto? A posição presumivelmente não importa, apenas o tamanho é importante, mas não sei como calcular isso. Intuitivamente, espero que o ângulo de rotação e o produto escalar apresentem uma forte carga, mas isso é o máximo que obtive 1 . O que é pior, a rotação para ângulos arbitrários não é exata devido à discrição inerente dos pixels, por isso, mesmo que eu calcule o tamanho matematicamente correto, não resultará necessariamente em um bloco sem costura.
Então, como posso calcular uma combinação ideal de ângulo / tamanho, considerando o tamanho da célula unitária perpendicular (aqui, 100 × 100) e um ângulo desejado aproximado?
1 Meu pensamento era que (usando a notação da Wikipedia), já que queremos que a projeção de A em B seja tão longa quanto B, temos | B | = | A | · cosϑ e, portanto, | A | = | B | / cosϑ . O que, no meu caso, produziria o novo comprimento | A | = 115.470, mas uma tentativa simples mostra que isso não pode ser corrigido a longo prazo, além de gerar um número não integral feio. De fato, apenas olhando para a imagem girada acima, podemos ver que a imagem inteira de 200 × 400 não contém uma unidade perpendicular repetida.