Matrixstruktur für die Bildschirmrotation

Matrixstruktur für die Bildschirmrotation

Ich kann meine Bildschirmdrehung wie folgt invertieren:

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

und zurück zum Normalzustand mit:

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

Ein HowTo habe ich hier gefunden:https://wiki.ubuntu.com/X/InputCoordinateTransformation
Ich schätze also, dass es für (90° nach rechts) folgendermaßen aussehen wird:

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

Aber was ist die rechte „Koordinatentransformationsmatrix“ links?

Antwort1

Der Frage nach zu urteilen handelt es sich um eine Standard-Koordinatentransformationsmatrix.

Also:

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

mit z_out= z_in= 1.

Dh

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

Die von Ihnen angegebene Beispielmatrix für die Rechtsdrehung

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

bedeutet also

x_out = 1 - y_in
y_out = x_in

Beim Drehen nach links wäre es umgekehrt, also:

x_out = y_in
y_out = 1 - x_in

gibt die Matrix an

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

Antwort2

Die letzte fehlende Matrix wird

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

Es ist mir gelungen, ein Skript zu schreiben, das bei jedem Aufruf das Skript rotiert:

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

Antwort3

Ich habe also alle Transformationen für Touchscreen und Touchpad auf einem Laptop ... die physische Ausrichtung des Trackpads wird vor dem Benutzer angenommen, zwischen Benutzertastatur und eDP1. Egal, in welche Richtung ich das X-Display drehe, der Mauszeiger bewegt sich im Einklang mit dem Finger auf dem Trackpad. Ich habe das vor Ewigkeiten gemacht und die Logik vergessen. Jetzt habe ich mit und die Transformationen „Spiegelung auf X“ und „Spiegelung auf Y“ hinzugefügt xrandr -x, xrandr -yaber ich kann die Matrixkoordinaten für das Trackpad nicht finden, sodass die Cursorbewegung auf dem Bildschirm der Fingerbewegung auf dem Trackpad entspricht.

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

verwandte Informationen