Desde que você não especificou o sistema operacional, me sinto livre para assumir que é GNU / Linux.
Nesse caso, há o comando xrandr
, com a opção --transform
.
Diverta-se! (:
De xrandr
página man (confira as outras opções, como --out
):
--transform a,b,c,d,e,f,g,h,i
Especifica uma matriz de transformação a ser aplicada na saída. Automaticamente, um filtro bilinear é selecionado. A forma matemática corresponde a:
a b c
d e f
g h i
A transformação é baseada em coordenadas homogêneas. A matriz multiplicada pelo vetor de coordenadas de um pixel da saída fornece o vetor de coordenadas transformadas de um pixel no buffer gráfico. Mais precisamente, o vetor (xy) do pixel de saída é estendido para 3 valores (x y w) , com 1 como a coordenada w e multiplicado contra a matriz. As coordenadas finais do dispositivo do pixel são então calculadas com a chamada divisão homogênica pela coordenada transformada de w . Em outras palavras, as coordenadas do dispositivo (x'y ') do pixel transformado são:
x' = (ax + by + c) / w' and
y' = (dx + ey + f) / w' ,
with w' = (gx + hy + i) .
Normalmente, a
e e
correspondem ao escalonamento nos eixos X e Y , c
e f
correspondem à tradução naqueles eixos, e g
, h
e i
são respectivamente 0, 0 e 1. A matriz também pode ser usada para expressar transformações mais complexas, como correção de distorção ou rotação. Para uma rotação de um ângulo T , esta fórmula pode ser usada:
cos T -sin T 0
sin T cos T 0
0 0 1
Como um argumento especial, em vez de passar uma matriz, pode-se passar a string none
, nesse caso os valores padrão são usados (uma matriz unitária sem filtro).