화면 회전을 위한 매트릭스 구조

화면 회전을 위한 매트릭스 구조

다음을 사용하여 화면 회전을 반전하도록 설정할 수 있습니다.

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

여기에서 HowTo를 찾았습니다.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= = 1 입니다 z_in.

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 디스플레이를 어떤 방향으로 회전시키든 마우스 커서는 트랙패드의 손가락과 함께 움직입니다. 나는 오래 전에 이것을 했고 논리를 잊어버렸습니다. 이제 xrandr -xand 를 사용하여 x에 미러를 추가하고 y 변환에 미러를 추가했지만 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

관련 정보