Моделювання тремору (наприклад, хвороба Паркінсона) мишею на веб-сторінці?


204

Я працюю над фондом, який підвищує обізнаність щодо доступності в Інтернеті. Для презентації ми хочемо запропонувати невелику майстерню, яка імітує різні обмеження / порушення людей. Це робиться через веб-сайт, створений спеціально для цієї презентації.

Одне з продемонстрованих порушень - це тремор, що означає відчуття хитких, важко контрольованих рухів руки. При цьому порушенні дуже важко точно перемістити курсор миші та натиснути кнопку миші, поки миша переходить через посилання. Як деякі старі люди, так і люди з захворюваннями, наприклад, хвороба Паркінсона, можуть страждати від тремору.

Тепер я хотів би якось перемістити курсор миші непередбачувано, так що людям дуже важко натискати на маленьку кнопку. Оскільки JavaScript не дозволяє переміщувати курсор миші безпосередньо, я шукаю інші способи цього досягти. Я придумав такі ідеї:

  • Використання драйвера / утиліти миші, що імітує тремтіння миші.
  • Сховати курсор миші за допомогою CSS, розмістіть GIF-анімацію тремтячого курсору миші на місці початкового курсору (з JavaScript), а потім зробіть натискання цільового посилання лише кожні кілька секунд на секунду. Принаймні, це дасть відчуття, ніби завжди натискаєш у той момент.

Хоча перша ідея була б дуже крутою, я не зміг знайти такий інструмент, як для Mac, чи для Windows. І я не маю ніяких навичок програмування подібного.

Друга ідея здається трохи незграбною, але це дозволило б досягти бажаного ефекту, я думаю.

Хтось має іншу ідею?


35
Ви фактично можете керувати положенням курсору (ну, емульованим) за допомогою API Lock Lock
Stuart P. Bentley

2
Спробуйте переглянути developer.mozilla.org/en-US/docs/Web/API/… . Пряме посилання на демонстраційний файл - mdn.github.io/pointer-lock-demo . Поки доцільно сказати користувачам натиснути на полотно та дозволити на сторінці відключити курсор миші, ви можете базувати свій код від цього
Аристократ

5
Саме питання викликає поінформованість серед нас веб-розробників. Спасибі за запитання! Наскільки великою, на вашу думку, повинна бути кнопка, щоб її можна було натискати?
Ідеограма

4
Просто рівень тремору: Є два основні види - «суттєвий тремор» і тремтіння Паркінсона - і вони абсолютно різні. «Суттєвий тремор» (який не є суто станом людей похилого віку), це тремор «наміру», тобто він очевидний лише тоді, коли людина намагається щось зробити, і стає гірше, чим сильніше людина намагається це контролювати. Тремор ПД, з іншого боку, виникає насамперед у спокої, і тремор часто не очевидний, коли людина намагається щось зробити (хоча жорсткість через ПД цілком може бути присутнім).
Гарячі лизи

2
Я опублікував версію linux, яка використовує xdotool для управління мишею, але є аналогічний інструмент для Windows під назвою autoit. Це виглядає досить просто, і для нього є навіть тег [autoit]. Також звучить так, що вам потрібні 2 версії. Той, який більше тремтить, поки рух не починається, а потім трохи заспокоюється, а другий є відносно стійким, поки рух не почнеться.
технозавр

Відповіді:


148

Я зробив швидку демонстрацію чогось, на що, сподіваємось, ви зможете базувати свій код, використовуючи API Lock Lock .

Я розпрощав це репо-покажчик-демо-репо і змінив його, щоб додати елемент випадкового руху.

Ось посилання на мою сторінку GitHub: https://aristocrates.github.io/pointer-lock-demo
А ось посилання на моє репо: https://github.com/aristocrates/pointer-lock-demo

Javascript код значення містяться в app.js, в canvasLoop(e)методі.

Єдине, що я змінив від початкової демонстрації - це після рядків

x += movementX * 2;
y += movementY * 2;

Я додав два рядки для зображення випадкового руху:

x += Math.floor(Math.random()*3 - 1);
y += Math.floor(Math.random()*3 - 1);

Є ще багато речей, які ви могли б покращити, але, сподіваємось, це може допомогти вам почати.


36
Як зауваження у функціональності, випадковий рух не те саме, що тремтить рука. При випадковому русі вказівник може переміщатися по екрану. Тремтячими руками вказівник буде вібрувати навколо центральної точки.
zzzzBov

5
Варто відзначити, що підтримка браузера для блокування вказівника Api не чудова - це не буде працювати в Internet Explorer або Safari.
Стів Сандерс

3
Я не знайшов часу, щоб спробувати це самостійно, але, можливо, ви знаєте це: чи працює API-блокування вказівника також поза полотном? Або обмежується полотном?
Джошуа Мухайм

8
Більш реалістична реалізація дозволила б відстежувати "реальне" положення курсору і переміщатися випадковим чином у колі навколо цього, але це може бути занадто складним.
tckmn

1
@Chris Chrome зараз кидає Blocked pointer lock on an element because the element's frame is sandboxed and the 'allow-pointer-lock' permission is not set.. Здається, що jsFiddle вкладає вміст у пісочний кадр (тобто не дозволяє блокувати покажчик через <iframe sandbox="webkit-allow-pointer-lock">, див. Документи ). Спробуйте помістити зразок на одну, не пісочну сторінку.
ComFreek

36

Не-JavaScript-спосіб

Насправді мені подобаються рішення, які можуть базуватися на JavaScript, оскільки вони швидше пов’язані з Інтернетом, і хороші шанси - незалежні від ОС. Однак я замислювався над тим, як вирішити свою проблему для всіх браузерів, оскільки рішення Javascript у цьому випадку буде важко налаштувати для всіх можливих браузерів (я не впевнений, чи можливо це взагалі).

Отже, як ви вже згадували, є інший спосіб - тобто наслідувати поведінку на рівні ОС. У цього є ще одна перевага - ви можете бути впевнені, що для браузера він виглядає на 100% таким же, як і людським (адже, ну, драйвер передає сигнал). Таким чином, ви можете використовувати рішення на основі драйверів / пристроїв у будь-яких браузерах (або навіть у ситуації, коли JavaScript відключений).

Linux

На жаль, залучення драйвера / пристрою негайно спричиняє залежність від ОС. Тому для кожної ОС вам потрібно власне рішення. У цій публікації я зосереджений на базі Linux-рішення (значить, я працюю з Linux) - і Mac OS трохи. За допомогою Linux можна записувати події на пристрій явно, тому нижче наведено зразок функції з основним циклом:

int main()
{
    struct input_event event, event_end;

    int  fd = open("/dev/input/event4", O_RDWR);
    long ma = getInteger("Enter max amplitude [points, 0..50]: ", 0, 50);
    long ta = getInteger("Enter max wait time [usecs , 0..200000]: ", 0, 200000);
    if (fd < 0)
    {
        printf("Mouse access attempt failed:%s\n", strerror(errno));
        return -1;
    }
    memset(&event, 0, sizeof(event));
    memset(&event, 0, sizeof(event_end));
    gettimeofday(&event.time, NULL);
    event.type = EV_REL;
    gettimeofday(&event_end.time, NULL);
    event_end.type = EV_SYN;
    event_end.code = SYN_REPORT;
    event_end.value = 0;
    while(1)
    {
        event.code  = rand() % 2 ? REL_X : REL_Y;
        event.value = (rand() % 2 ? -1 : 1) * randomTill(ma);
        write(fd, &event, sizeof(event));
        write(fd, &event_end, sizeof(event_end));
        usleep(randomTill(ta));
    }
    close(fd);
    return 0;
}

Мій повний код проблеми ви знайдете тут . Програма попросить амплітуду "тремтіння" та її частоти (таким чином, скільки разів у мікросекундах проходить "тремор"). Щоб наслідувати ситуацію, вона змусить мишу рухатися випадковим чином за 0..Xточками у випадковому напрямку (вгору-вліво-вниз) і чекати випадковим чином, 0..Yмікросекунди до наступного "тремтіння", Xє амплітуда "тремтіння" і Yчастота "тремор" "

Інша справа може полягати в адаптації програми до вашої системи. Програма "фіктивна" і не може самостійно виявити мишу, тому "/dev/input/event4"вона жорстко закодована. Щоб зрозуміти, що може бути ідентифікатором для вашої системи, ви можете спробувати:

user@host:/path$ cat /proc/bus/input/devices | grep mouse
H: Handlers=mouse0 event3 
H: Handlers=mouse1 event4

Отож можливості є "event3"і "event4"- але для вашої системи, які можуть мати інші значення. Отже, якщо це відрізняється від використовуваного в даний час у коді С, просто змініть відповідний рядок (так, рядок int fd = open("/dev/input/event4", O_RDWR);і розмістіть свій пристрій замість event4)

Демонстраційна версія для цієї програми (низька частота кадрів, на жаль, тому зберігайте зображення не надто великі) тут .

Маленька бічна примітка (якщо ви не знаєте, що робити з кодом C) - для компіляції програми вище, просто використовуйте:

user@host:/path$ gcc -std=gnu99 file.c -o m

де file.cназва вашого файлу вихідного коду С, тоді ви отримаєте виконуваний файл, названий mу вашому каталозі. Швидше за все, вам знадобляться дозволи для прямого запису в пристрій миші, тож ви можете використовувати sudo:

user@host:/path$ sudo ./m

Інші ОС

Логіка залишиться такою ж:

  • Знайдіть спосіб отримати доступ до пристрою миші
  • Написати подію переміщення миші
  • Застосуйте рандомізацію до своєї події

Це воно. Наприклад, Mac OS має свій власний шлях до роботи з мишею (не як Linux, Mac має не procfsтак), це добре описано тут .

Як висновок

Що краще - JavaScript або орієнтовані на пристрої рішення - вирішувати тільки вам, оскільки певна умова (наприклад, крос-браузер або крос-ОС) може вирішити все в цьому випадку. Тому я надав рекомендації разом із певним робочим прикладом того, як це реалізувати на рівні ОС. Перевага тут полягає в тому, що рішення є перехресним браузером, але як вартість ми маємо програму, пов’язану з ОС.


Дякую за цей дуже детальний пост. Я підозрюю, що ми демонструватимемо на планшеті (андроїд чи ios), тому ми не зможемо змінити поведінку миші на рівні ОС. Але дуже цікаво все одно!
Джошуа Мухайм

53
Як чорт ти продемонструєш хитну мишку на сенсорних екранах?
Давор

6
@Davor Чесно кажучи, я дуже сумніваюся, що люди, які насправді мають проблеми з тремтінням / хиткими руками, будуть користуватися сенсорним пристроєм , якщо тільки вони не хочуть навмисно звести себе з розуму.
Chris Cirefice

2
@ChrisCirefice: Або змушені використовувати, тому що вони повинні використовувати один з gazillion пристроїв, які призначені для того, щоб зробити наше життя кращим і використовувати сенсорні екрани ... пам'ятайте, це підвищити обізнаність про проблему, з якою у цих людей проблеми що.
ПлазмаHH

@PlasmaHH В ОП не згадувалося, що це спрямовано на підвищення рівня обізнаності людей, які мають тремор та їх труднощі (зокрема) із пристроями з сенсорним екраном. І знову: я не думаю, що хтось, хто насправді має проблеми з тремтінням, не є достатньо мазохістським, щоб спробувати використовувати ручні пристрої з сенсорним екраном . Є пристрої, які набагато простіше у використанні, наприклад телефони з великими (механічними) кнопками. Більшість операційних систем включає навігацію за мовою (наприклад, розпізнавання мови - ОС Windows). Я думаю, що люди, які страждають серйозними наслідками, використовуватимуть ці інструменти замість iPhone.
Кріс Сірефіс

23

Я зробив це як жарт один раз на форумі Puppy Linux і отримав коментар, що:

Люди з Паркінсоном не думають, що це смішно !!!

Вилікувати тут просто cntrl-C, на щастя.

Ось сценарій оболонки, для якого потрібен xdotool

#!/bin/sh
while :; do
   xdotool mousemove_relative -- -$(($RANDOM % 10)) $(($RANDOM % 10))
   xdotool mousemove_relative -- $(($RANDOM % 10)) -$(($RANDOM % 10))
   sleep ${1:-.1} #adjust this as necessary for effect
done

Назвіть як parkinson_sim та запустіть з необов’язковим аргументом за час між тремтіннями, який може бути від 0,001 до 999,0.

parkinson_sim [time_between_tremors_in_seconds] # за замовчуванням дорівнює 0,1

Я помилився, натиснувши на нього сам, замість того, щоб запустити його з командного рядка і швидко виявив, наскільки це має бути розчаруванням. Мені знадобилося кілька спроб відкрити вікно терміналу, щоб його вбити.


1
ви можете замінити товсту кишку чимось на кшталт "сон 0,01", щоб обмежити використання процесора та швидкість, тому що, на моїй установці, це робить нереально швидкі стрибки з вашим кодом.
нечип

1
@nonchip - Дякую за інформацію, я ніколи не працював досить довго, щоб дізнатися про використання процесора. Додав сон організму.
технозавр

Ви знаєте, що в більшості дистрибутивів Linux ви можете відкрити термінал за допомогою команд клавіатури, правда?
justhalf

@justhalf У той час Щеня за замовчуванням, клавіша швидкого терміналу повинна була натискати `у вікні ROX-Filer. Щоб відкрити це, знадобилося кілька спроб, тому я використовував клавіатуру, щоб відкрити меню. Невдовзі я створив рудиментарний демон голосового управління, використовуючи pocketsphinx_continuous та приблизно 10 ліній оболонки.
технозавр

while :; do ...; sleep $time; doneмайже завжди повинно бути while sleep $time; do ...; done, тому що коли користувач натискає Ctrl-C, команда, що виконує в даний час, майже напевно буде sleep, і оболонки не завжди закінчують сценарій, коли користувач хоче. Це особливо помітно під час тестування в інтерактивних оболонках, але іноді може траплятися навіть у сценаріях. Ще краще було б while xdotool ... && xdotool ... && sleep ...; do :; done.

16

Ваша друга ідея (приховати курсор) знаходиться на півдорозі, та, на мою думку, може спрацювати для вас:

  • Сховайте курсор миші за допомогою CSS, як ви пропонуєте. ( cursor:noneIIRC)
  • Замість GIF з хитким курсором використовуйте деяке зображення + абсолютне позиціонування CSS + JS для емуляції вказівника миші; тобто, слідкуйте за мишкою за сторінкою і посадіть зображення курсора там, де спочатку був би курсор миші.

Потім ви додасте трохи математики тремтіння до коду курсору, щоб "похитнути" курсор. Ви повинні визначити, які правильні криві, щоб правильно імітувати введення тремору.

Нарешті: для будь-яких елементів керування, які ви програмуєте (посилання тощо):

  • фіксуйте події клацань, пересувайте їх до поточного місця "тремтіння", залежно від стану кривих тремтіння, і перевірте свої елементи, щоб побачити, чи користувач викреслив елемент, який призначений, або, можливо, елемент, який не призначений .

Один головний бонус при цій реалізації: ваш «хиткий курсор» відображатиметься на сенсорних пристроях, на яких курсор не починається.


Редагувати:

Виходячи з основи Майкла Теріо (JSFiddle з коментарів), ось такий, який постійно тремтить, нормально розподіляючись по поточному розташуванню курсора: http://jsfiddle.net/benmosher/0x4mc64v/4/

( normalМасив є результатом виклику rnorm(100)в консолі R. Найпростіший спосіб, який я міг би придумати в JS, для вибірки звичайно розподіленого випадкового цілого числа.)


Деякі стандартні відомості про події миші JS: javascript.info/tutorial/…
Бен Мошер

Дякую, це справді дуже гідне доповнення до моєї ідеї.
Джошуа Мухайм

Загадка просто прекрасна для проекту, над яким я працюю, хоча це вже 4 роки, чи не заперечуєте ви, щоб викрали це як основу для моделювання Паркінсона, що є частиною мого проекту?
Грем Річі

@GrahamRitchie: добре зі мною, але Майкл Теріот зробив більшу частину роботи, хоча IIRC 😄
Бен Мошер

14

Просто ідея отримати тремор «правильно», ви можете записати рух миші реального пацієнта, це робить його більш автентичним, коли ви повідомляєте людям, звідки беруться дані.

Там є сценарії, що дозволяють кішці слідувати за курсором миші, ви можете налаштувати один, щоб другий курсор слідував за вашим курсором. Сторінка обчислює позицію другого курсору, тому вона також може визначити, чи вдала подія натискання чи ні.

Якщо ви можете, будь-ласка, зробіть це на веб-основі, ви наблизите до цього набагато більше людей, ніж просите їх встановити програму або активувати флеш або все, що там є.


Дякую за цю пропозицію.
Джошуа Мухайм

1
Мені подобається ця ідея - положення миші можна записувати в будь-який часовий проміжок через JavaScript. Тоді ви можете побудувати графіки рухів (площину XY) і навіть отримати основні статистичні дані для більш "правильної" формули "tremor_randomness" для рішення API Lock API або чогось подібного. Для цього знадобиться трохи більше роботи (наприклад, завантажуйте позицію XY кожні 100 мс протягом 10 секунд) та аналізу, але це дасть вам набагато більш реальний ефект, ніж проста рандомізація. З вашої справи, можливо, воно того варте.
Chris Cirefice

10

Замість того, щоб намагатися перемістити вказівник, ви можете замість цього перемістити додаток (веб-сторінку). Я написав просту форму HTML, в якій є деякі поля введення. При переміщенні миші на форму, форма переміщується.

Демонстраційну демонстраційну форму ви можете побачити на jsfiddle . Спробуйте натиснути на одне з полів введення, щоб побачити ефект.

Для цього я використав ефект тремтіння jquery . Javascript для ефекту тремтіння виглядає так, і просто змушує форму переміщуватися вгору та вниз, коли миша рухається по ній:

<script type="text/javascript">
    $(document).ready(function() {
        $("#toggle").hover(function () {
            $(this).effect("shake", { direction: "up", times: 1, distance: 40}, 1000);
        });
    });
</script>

Хоча форма рухається лише вгору і вниз, я думаю, що це має бажаний ефект. Ви можете грати з параметрами (напрямок, час, відстань, а також без назви "1000" вище), щоб налаштувати рух форми.


3
Я теж думав про це теж, але хоча це легше здійснити, він не показує "справжнього" досвіду тремору.
Джошуа Мухайм

10

Чому б не використовувати апаратне рішення? Існують певні миші, на які можна вводити ваги, як у Logitech G500. Замість того, щоб набирати вагу, покладіть невеликий коливальний двигун, який змушує мишку злегка трясти. Це ще більше моделювало фактичний розлад: тремтить не просто курсор, а вся рука та миша. А це також означає, що ви можете показувати інше програмне забезпечення, ніж веб-сайти.

Замість миші з прорізом для ваги ви також можете просто приклеїти щось до миші, але це помітніше.


Оскільки я комп'ютер-вихователь, а не механічний, я буду дотримуватися електронного рішення. Дякую!
Джошуа Мухайм

Хоча можливим апаратним рішенням є підключити (імовірно провідну) мишу, додавши до неї генератор випадкових шумів.
Гарячі лизання

6

Як ви думали про те, щоб зробити це зі спеціальним драйвером миші, я вважаю, що це зробить і невелика програма, що працює на ПК? Якщо це так, ось невеликий фрагмент для C #, який нескінченно переміщує курсор випадковим чином, витримуючи діапазон плюс мінус 5 пікселів навколо поточної позиції курсору. Після кожного переміщення програма чекає від 50 мс до 100 мс (не точно!). Хиткість може бути налаштована шляхом пристосування значень для переміщення та пауз. Я запустив це в консольній програмі і - залежно від значень - це досить важко зупинило програму.

Random rand = new Random();

while(true)
{
    Cursor.Position = new Point() { X = Cursor.Position.X + rand.Next(11)-5, Y = Cursor.Position.Y + rand.Next(11)-5 };
    Thread.Sleep(rand.Next(50) + 50);
}

6

Ось версія Windows мого сценарію xdotool, яка використовує AutoIt . Це був мій перший в історії сценарій AutoIt, а на написання пішло лише кілька хвилин, тому я впевнений, що його можна вдосконалити. Просто збережіть з розширенням .au3 і запустіть його з AutoIt (Run Script x86).

HotKeySet("{HOME}", "GStart")
HotKeySet("{PAUSE}", "Gpause")
HotKeySet("{ESC}", "Gexit")

While 1
    Sleep(100)
WEnd

Func Gstart()
While 1
    sleep(100)
    $pos = MouseGetPos()
    $x = $pos[0] + 10 - Random(0, 20, 1)
    $y = $pos[1] + 10 - Random(0, 20, 1)
    MouseMove($x,$y)
Wend
Endfunc


Func Gpause()
While 1
   sleep(100)
Wend
Endfunc

Func Gexit()
    MsgBox(0, "exit box", "Script exited")
    Exit 0
EndFunc

Управління

  • Головна: Почніть моделювання.
  • пауза: моделювання пауз.
  • Esc: Вихід із моделювання.

Або скористайтеся моєю складеною версією звідси .


Дуже хороша. Дякую!
Джошуа Мухайм

5

Ви не можете очікувати, що хтось зможе тримати свої руки ідеально стійкими, тому одне, що ви можете врахувати, це

  1. Поясніть користувачам, що ви робите, і,
  2. Зробіть елементи, які можна натиснути на демонстраційній сторінці набагато менше, ніж зазвичай.
  3. Підвищення чутливості миші в прикладі системи до максимуму.

Мої міркування: (застереження, я не є експертом в галузі США або медицини), зменшуючи елементи, що здатні натискати, ви створюєте подібну проблему для більшості людей, з якою людина, яка страждає на хворобу Паркінсона, стикається з веб-сайтом щодня.


Це теж цікава ідея. Я впевнено планую зробити так, щоб елементи, які можна натискати, були зовсім маленькими.
Джошуа Мухайм

2
Я боюся, що більшість користувачів миші можуть керувати своїм пристроєм до 1-2 пікселів, якщо вони зосереджуються, - наприклад, тремтіння руки не перевищує 1 пікселя за допомогою налаштувань миші. Тож, мабуть, не універсальне рішення, якщо кнопки розміром перевищують 1-2 пікселі ...
Йонас Гейдельберг

Я додав би №3, стикаючись зі швидкістю миші та натискав налаштування до максимуму
Ryan B

Було б сенс мати на миші своєрідне "автоматичне регулювання гучності", підсилюючи невеликі рухи, роблячи більші, наближаючись до "нормальних".
Гарячі лизи

4

Ви можете скористатися імітаційним костюмом для старості, наприклад, описаним у цій статті ... Я підозрюю, що частина тремтіння рук - це лише вібраційний мотор, обв'язаний навколо зап'ястя, а також кілька товстих рукавичок, щоб зробити руки в основному незграбними.


Дякую. Хоча це дуже цікаво, у нас, мабуть, не буде грошей та часу, щоб укласти кожного відвідувача в костюм. ;)
Джошуа Мухайм

5
Не було б це краще підходити як коментар?
Selali Adobor

Ну, я трохи розгубився щодо тегів javascript та html, але оскільки аскер також запропонував використовувати спеціальні драйвери миші (а потім згадані планшети), схоже, інші рішення вітаються. Після того, як ви знімете специфічне обмеження технології, це відповідь. Це дійсно так, як дослідники в цій галузі вирішують проблему моделювання вікової інвалідності. Я також думаю, що ви могли б зробити DIY порівняно дешево, якщо ви просто хочете тремтіння - одна з цих гілок на зап'ясті на липучках і вібраційний двигун не повинна бути занадто важкою.
користувач3067860

4
  • У вашому DIVCSS-хові курсор за допомогоюcursor:none;
  • Створіть зображення .png курсору та перемістіть його ( left, top) з увімкненим jQmousemove
  • Рандомізуйте .png margin-leftта margin-topвикористовуючи setTimeout (для того, щоб плавне позиціонування було плавним, використовуйте CSS3 transitionабо робіть це за допомогою jQ .animate()).

Примітка. Сценарій не може знати, чи рука все ще на миші;)

function rand(min, max) {return Math.random() * (max - min) + min;}

var $cursor = $('div img');

$('div').mousemove(function(e) {  // Make .png follow the mouse coordinates
  $cursor.css({
    left: e.pageX,
    top:e.pageY
  });
}).hover(function(e){
  $cursor.toggle(); // Show .png cursor as we enter the DIV
});

(function tremor(){ // Add tremor to .png image
  $cursor.css({
      marginLeft: rand(-15,15), // arm tremor
      marginTop:  rand(-30,30)  // hand contractions
  });
  setTimeout(tremor, rand(50,100));
}());
div{
  position:absolute;
  background:#eee;
  height:100%;
  width:100%;
  cursor:none;
}

div img{
  display:none;
  position:absolute;
  transition: margin 0.2s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div><img src="http://i.stack.imgur.com/KwMGA.png"></div>


2

На сьогоднішній день добре відповіли низькорівневі частини, що імітують тремор. Я додам щось, зосередившись на типі тремтіння, щоб імітувати:

Більшість відповідей реалізує курсор миші, який рухається випадковим шляхом з деякою фіксованою максимальною шириною кроку в напрямку X і Y.

Це має працювати досить добре для випадку використання, що ускладнює натискання на певну область, як-от кнопка.

Що стосується більш загального питання моделювання проблем з інтерфейсом, викликаних тремором від хвороби Паркінсона, було б принаймні цікавим насправді імітувати рухи рук цього виду тремору.
Я підозрюю, що випадкова прогулянка може бути не дуже хорошим наближенням .

Звичайно, може бути важко отримати справжні дані про сліди руху тремору, але, безумовно, є документи про аналіз такого роду тремору:

У параметричному зображенні руху рук при хворобі Паркінсона йдеться про те, як найкраще побудувати сліди руху 3D рукою.
Папір розплачується, але попередній перегляд у верхньому правому куті з написом "Подивися всередину>" на зображенні книги показує кілька цікавих сюжетів різних зображень даних про сліди рук .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.