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.
fonte
Respostas:
Achei isso útil : Crie padrões inclináveis girados
Como você mencionou, há matemática envolvida que está muito além do meu entendimento, portanto, trarei apenas alguns dos princípios relacionados ao design.
Basicamente, a 'solução' seria:
A imagem abaixo mostra uma textura girada que foi formada lado a lado o padrão não rotacionado original e depois girando o mosaico resultante. O texel básico não rotacionado é destacado e possui largura we altura h. O ângulo de rotação é o ângulo agudo formado pela linha w com a horizontal:
Como queremos ângulos agudos, se você estiver girando na outra direção, o diagrama acima terá a seguinte aparência:
O tamanho da imagem (w 'x h') necessário para tornar a textura inclinável pode ser encontrado da seguinte maneira:
A explicação continua um pouco mais; portanto, se você achou útil, sinta-se à vontade para editar a resposta (ou publicar uma nova).
fonte
Aqui está uma abordagem não matemática de quando eu precisava fazer coisas semelhantes:
Agora você tem o que deve ser um retângulo de 4 linhas em torno do menor bloco possível (novamente, não será pequeno).
Depois, há um pouco de tentativa e erro frustrante para tornar o pixel perfeito, então você deve estar pronto para usar.
fonte