Матричная структура для поворота экрана

Матричная структура для поворота экрана

Я могу установить инвертированный поворот экрана с помощью:

xrandr -o inverted
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' -1 0 1 0 -1 1 0 0 1

и вернуться к нормальной жизни с помощью:

xrandr -o normal
xinput set-prop 'ELAN Touchscreen' 'Coordinate Transformation Matrix' 1 0 0 0 1 0 0 0 1

Я нашел инструкцию здесь:https://wiki.ubuntu.com/X/InputCoordinateTransformation
Итак, я предполагаю, что для (90° вправо) это будет:

# ⎡ 0 -1 1 ⎤
# ⎜ 1  0 0 ⎥
# ⎣ 0  0 1 ⎦
right='0 -1 1 1 0 0 0 0 1'

Но что такое правая «матрица преобразования координат» слева?

решение1

Судя по вопросу, это стандартная матрица преобразования координат.

Так:

⎡x_out⎤   ⎡ a b c ⎤   ⎡ x_in ⎤
⎜y_out⎥ = ⎜ d e f ⎥ * ⎜ y_in ⎥
⎣z_out⎦   ⎣ 0 0 1 ⎦   ⎣ z_in ⎦

с z_out= z_in= 1.

Т.е.

x_out = a * x_in + b * y_in + c
y_out = d * x_in + e * y_in + f

Пример матрицы, которую вы привели для правого вращения

⎡ 0 -1 1 ⎤
⎜ 1  0 0 ⎥
⎣ 0  0 1 ⎦

таким образом, означает

x_out = 1 - y_in
y_out = x_in

для вращения влево все будет наоборот, то есть:

x_out = y_in
y_out = 1 - x_in

давая матрицу

⎡  0 1 0 ⎤
⎜ -1 0 1 ⎥
⎣  0 0 1 ⎦

решение2

Последняя отсутствующая Матрица будет

left='0 1 0 -1 0 1 0 0 1'

Мне удалось написать скрипт, который ротирует скрипт каждый раз, когда вы его вызываете:

https://gist.github.com/rubo77/daa262e0229f6e398766

решение3

Итак, у меня есть все преобразования для сенсорного экрана и тачпада на ноутбуке... предполагается, что физическая ориентация трекпада находится перед пользователем, между клавиатурой пользователя и eDP1. Независимо от того, в какую сторону я поворачиваю дисплей по оси x, курсор мыши перемещается вместе с пальцем на трекпаде. Я сделал это давным-давно и забыл логику. Теперь я добавил преобразования «зеркало по оси x» и «зеркало по оси y» с помощью xrandr -xи xrandr -y, но я не могу найти координаты матрицы для трекпада, чтобы перемещение курсора на экране было таким же, как перемещение пальца на трекпаде.

function rotate_left (){
    xrandr --output "$connected" --rotate left
    xinput set-prop "$touch" "Evdev Axis Inversion" 0, 1
    xinput set-prop "$touch" "Evdev Axes Swap" 1
    xinput set-prop "$pad" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
    xinput set-prop "$touch" "$TRANSFORM" 0 -1 1 1 0 0 0 0 1
    echo "left" >/etc/rotate
    echo "icon:$camino/icons/left.png" >>"$track"/ayp
}; export -f rotate_left

function rotate_right (){
    xrandr --output "$connected" --rotate right
    xinput set-prop "$touch" "Evdev Axis Inversion" 0, 1
    xinput set-prop "$touch" "Evdev Axes Swap" 1
    xinput set-prop "$pad" "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
    xinput set-prop "$touch" "$TRANSFORM" 0 1 0 -1 0 1 0 0 1
    echo "right" >/etc/rotate
    echo "icon:$camino/icons/right.png" >>"$track"/ayp
}; export -f rotate_right

function rotate_inverted (){
    xrandr --output "$connected" --rotate inverted
    xinput set-prop "$touch" "Evdev Axis Inversion" 1, 1
    xinput set-prop "$touch" "Evdev Axes Swap" 0
    xinput set-prop "$pad" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
    xinput set-prop "$touch" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
    echo "inverted" >/etc/rotate
    echo "icon:$camino/icons/inverted.png" >>"$track"/ayp
}; export -f rotate_inverted

function rotate_normal (){
    xrandr --output "$connected" --rotate normal
    xinput set-prop "$touch" "Evdev Axis Inversion" 1, 1
    xinput set-prop "$touch" "Evdev Axes Swap" 1
    xinput set-prop "$pad" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
    xinput set-prop "$touch" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
    echo "normal" >/etc/rotate
    echo "icon:$camino/icons/normal.png" >>"$track"/ayp
}; export -f rotate_normal
function rotate_flipx {
    xrandr -x
    xinput set-prop "$touch" "Evdev Axis Inversion" 0,0
    xinput set-prop "$touch" "Evdev Axes Swap" 0
   xinput set-prop "$pad" "$TRANSFORM" 3 1 1 -1 1 1
    xinput set-prop "$touch" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
};export -f rotate_flipx
function rotate_flipy {
 xrandr -y
    xinput set-prop "$touch" "Evdev Axis Inversion" 0, 0
    xinput set-prop "$touch" "Evdev Axes Swap" 0
    xinput set-prop "$pad" "$TRANSFORM" 3 1 1 -1 1 1
    xinput set-prop "$touch" "$TRANSFORM" -1 0 1 0 -1 1 0 0 1
};export -f rotate_flipy
function rotate_flip_normal {
xrandr -o normal
    xinput set-prop "$touch" "Evdev Axis Inversion" 0, 0
    xinput set-prop "$touch" "Evdev Axes Swap" 0
    xinput set-prop "$pad" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
    xinput set-prop "$touch" "$TRANSFORM" 1 0 0 0 1 0 0 0 1
};export rotate_flip_normal

Связанный контент