고라니드로koranidro.hashnode.dev·Dec 8, 2024[TypeScript] 제스처로 대화하기. #14 - 핀치 편잠깐! PointerEvent에 대해 아직 잘 모른다면 [typescript] 포인터 대통합(with. PointerEvent)을 먼저 읽어보세요! 핀치는 지정된 중심점을 기준으로 스와이프하는 동작을 말합니다. 포인터가 중심점으로부터 멀어지면 핀치 아웃, 가까워지면 핀치 인이라고 합니다. 가상의 중심점을 상상해 보세요. 이제 포인터를 배치한 후, 이동하여 멀어지기도 하고, 가까워지기도 하는 겁니다. 이렇게 하면 아래와 같은 세 점이 발생합니다...[TypeScript] 제스처로 대화하기.pinch
고라니드로koranidro.hashnode.dev·Nov 30, 2024[TypeScript] 제스처로 대화하기. #13 - 플릭(with. 범위) 편이번 편은 이전 편으로부터 이어집니다. 플릭의 이동 범위를 제한하고 싶다면 어떻게 해야 할까요? 단순히 계산 시마다 대상이 유효한 범위 내에 있는지 확인할 수도 있을 것입니다. 하지만 이는 다소 비합리적으로 보일 수 있습니다. 우리는 조금 더 영리한 방법으로 이를 해결할 수 있습니다. 최대 변위 변위가 아래를 만족해야 한다고 합시다. $$\begin{aligned} & s \leq k \end{aligned}$$우리는 수식을 다음과 같이 전개...[TypeScript] 제스처로 대화하기.JavaScript
고라니드로koranidro.hashnode.dev·Nov 23, 2024[TypeScript] 제스처로 대화하기. #12 - 플릭(with. 성분 분해) 편이번 편은 이전 편으로부터 이어집니다. 지난 편에서는 시간에 따른 변위를 구했습니다. 그러면 이것을 코드에 바로 적용할 수 있을까요? 아쉽지만 조금 부족합니다. 얼마나 이동해야 하는지 알 수 있었지만 결국 각 좌표에 대해 어떻게 이동해야 하는지 알 수 없었으니까요. 이를 위해 두 가지 좌표 성분 즉, \(x\)와 \(y\) 좌표로 분해해야 합니다. 초기 속도를 \(x\)와 \(y\) 좌표 성분으로 분해하면 다음과 같습니다. $$\begin{a...[TypeScript] 제스처로 대화하기.JavaScript
고라니드로koranidro.hashnode.dev·Nov 17, 2024[TypeScript] 제스처로 대화하기. #11 - 플릭(with. 변위) 편이번 편은 이전 편으로부터 이어집니다. 지난 편에서는 간단히 플릭에 대한 초기 속도를 계산해 봤습니다. 그렇다면 이것을 어떻게 활용할 수 있을까요? 여러분의 관심사는 결국 얼마나 이동해야 하는지일 것입니다. 이를 위해서는 시간에 따른 속도를 알 필요가 있습니다. 등가속도 운동에서의 속도는 \(v = v_0 + at\) 입니다. 각각 \(v_0\) = 초기 속도, \(a\) = 가속도, \(t\) = 시간입니다. 속도는 점차 감속해야 하므로 가...[TypeScript] 제스처로 대화하기.displacement
고라니드로koranidro.hashnode.dev·Nov 10, 2024[TypeScript] 제스처로 대화하기. #10 - 플릭(with. 초기 속도) 편잠깐! PointerEvent에 대해 아직 잘 모른다면 [typescript] 포인터 대통합(with. PointerEvent)을 먼저 읽어보세요! 플릭은 스와이프하다가 포인터를 떼는 동작을 말합니다. 다른 제스처는 포인터를 뗌과 동시에 종료되지만, 플릭은 뗀 이후에 의미가 있습니다. 그렇다면 포인터 이벤트가 종료된 후에 어떻게 동작을 이어갈 수 있을까요? 비밀은 순간 속도에 있습니다. interface PanEvent { timest...[TypeScript] 제스처로 대화하기.flick
고라니드로koranidro.hashnode.dev·Nov 3, 2024[TypeScript] 제스처로 대화하기. #9 - 팬(with. 스와이프) 편이번 편은 이전 편으로부터 이어집니다. 스와이프는 특정 축을 따라 이동하는 팬 동작을 의미합니다. 즉, 이동 축을 제한한 팬입니다. 대부분 수직, 수평 축에 대해 사용합니다. 축을 제한하려면 어떻게 해야 할까요? 이를 위해서는 포인터의 좌표를 축 위에 놓아야 합니다. 이는 축에 내린 수선의 발을 구하는 문제와 동일합니다. function findPerpendicularFootOnAxis(x: number, y: number, axis: num...[TypeScript] 제스처로 대화하기.gesture
Shagnik Sarkarsarkarshagnik.hashnode.dev·Nov 2, 2024Gesture Controlled Virtual MouseOne afternoon, while studying a PDF on my PC, I had to keep scrolling down with my mouse, which was out of reach. It was frustrating. So, I wondered, "Isn't there a way to use my hands from a far distance to scroll the PDF?" With this thought, I sear...python 3.8.5
고라니드로koranidro.hashnode.dev·Oct 27, 2024[TypeScript] 제스처로 대화하기. #8 - 팬(with. 드래그) 편이번 편은 이전 편으로부터 이어집니다. pointermove를 드래그 대상에 설정하면 포인터를 빠르게 이동할 경우, 대상을 놓치는 것을 느끼셨을 겁니다. 왜 이런 일이 벌어질까요? 상상해 보세요. 포인터가 이동했습니다. 충분히 이동했다면 요소 바깥으로 넘어갔을 겁니다. 이후 핸들러가 호출되고, 대상을 이동하면 포인터를 따라잡을 겁니다. 하지만 핸들러가 호출되기 전에 포인터가 한 번 더 이동하면 어떻게 될까요? 이번에도 충분히 이동했다면 대상이...[TypeScript] 제스처로 대화하기.JavaScript
고라니드로koranidro.hashnode.dev·Oct 20, 2024[TypeScript] 제스처로 대화하기. #7 - 팬 편잠깐! PointerEvent에 대해 아직 잘 모른다면 [typescript] 포인터 대통합(with. PointerEvent)을 먼저 읽어보세요! 팬은 포인터를 누른 상태로 방향 상관없이 이동하는 것을 말합니다. 좌표가 중요했던 이전 제스처와는 달리 이번에 중요한 것은 이동량입니다. 즉, 이전 좌표로부터 현재 좌표는 얼마 만큼 이동했느냐가 관건이지요. interface Point { x: number; y: number; } ...[TypeScript] 제스처로 대화하기.pan
고라니드로koranidro.hashnode.dev·Sep 26, 2024[TypeScript] 제스처로 대화하기. #6 - 롱 프레스(with. 범위) 편이번 편은 이전 편으로부터 이어집니다. 거리 계산은 지난 편의 내용으로 쉽게 구현할 수 있습니다. 하지만 한 가지 차이점은 탭의 경우, 이벤트 핸들러에서 처리하기 때문에 쉽게 좌표를 받아올 수 있지만 롱 프레스의 경우에는 그렇지 못하다는 것입니다. 현재 구현에서도 pointerdown의 좌표를 받아올 수 있지만 목적에 부합하지 않습니다. 필요한 것은 타이머가 호출된 시점의 좌표입니다. 타이머 호출 시점의 좌표를 받아오려면 어떻게 해야 할까요?...[TypeScript] 제스처로 대화하기.JavaScript