एक वेबपेज पर माउस के साथ कंपकंपी (उदाहरण के लिए पार्किंसंस रोग)?


204

मैं एक नींव के लिए काम कर रहा हूं जो इंटरनेट में पहुंच के लिए जागरूकता बढ़ाता है। एक प्रस्तुति के लिए, हम एक छोटी सी कार्यशाला की पेशकश करना चाहते हैं जो लोगों को अलग-अलग अक्षमताओं / हानि का अनुकरण करती है। यह विशेष रूप से इस प्रस्तुति के लिए बनाई गई वेबसाइट के माध्यम से किया जाता है।

प्रदर्शित दोषों में से एक कांप रहा है, जिसका अर्थ है अस्थिर, कठिन-से-नियंत्रित हाथ आंदोलनों का अनुभव करना। इस हानि के साथ, माउस कर्सर को वास्तव में स्थानांतरित करना और माउस बटन को दबाना बहुत मुश्किल है, जबकि माउस एक लिंक पर है। कुछ पुराने लोग और बीमारी वाले लोग, जैसे पार्किंसंस, झटके से पीड़ित हो सकते हैं।

अब मैं किसी तरह अप्रत्याशित रूप से माउस कर्सर को स्थानांतरित करना चाहूंगा, ताकि लोगों के लिए एक छोटे बटन पर क्लिक करना बहुत कठिन हो। क्योंकि जावास्क्रिप्ट सीधे माउस कर्सर को ले जाने की अनुमति नहीं देता है, मैं इसे प्राप्त करने के अन्य तरीकों की तलाश कर रहा हूं। मैं निम्नलिखित विचारों के साथ आया:

  • माउस चालक / उपयोगिता का उपयोग करना जो माउस को हिलाने का काम करता है।
  • CSS के माध्यम से माउस कर्सर को छिपाएं, मूल कर्सर (जावास्क्रिप्ट के साथ) के स्थान पर एक हिलाने वाले माउस कर्सर का जीआईएफ एनीमेशन रखें, और फिर लक्ष्य लिंक को केवल कुछ सेकंड के लिए एक-एक सेकंड के लिए क्लिक करें। यह कम से कम भावना देता है जैसे कि कोई हमेशा गलत क्षण पर क्लिक करता है।

जबकि पहला विचार बहुत अच्छा होगा, मुझे इस तरह का कोई टूल नहीं मिला, चाहे मैक के लिए और न ही विंडोज के लिए। और मुझे इस तरह की चीज़ की प्रोग्रामिंग करने का कोई कौशल नहीं है।

दूसरा विचार थोड़ा अनाड़ी लगता है, लेकिन यह वांछित प्रभाव प्राप्त करेगा, मुझे लगता है।

किसी को भी एक और विचार है?



2
Developer.mozilla.org/en-US/docs/Web/API/… को देखने का प्रयास करें । डेमो का सीधा लिंक mdn.github.io/pointer-lock-demo है । जब तक यह उपयोगकर्ताओं को एक कैनवास पर क्लिक करने और माउस कर्सर को निष्क्रिय करने के लिए पृष्ठ को अनुमति देने के लिए आपके उद्देश्य के लिए स्वीकार्य है, तब तक आप अपने कोड को इस से दूर करना चाहते हैं
Aristocrates

5
बहुत ही सवाल हमारे बीच वेब डेवलपर्स के बीच जागरूकता बढ़ाता है। पूछने के लिए धन्यवाद! क्लिक करने योग्य होने के लिए आपको कितना बड़ा बटन लगता है?
आइडोग्राम

4
कंपकंपी पर बस एक स्तर-सेट: दो बुनियादी प्रकार हैं - "आवश्यक कंपन" और पार्किंसंस कांपना - और वे पूरी तरह से अलग हैं। "आवश्यक कंपन" (जो विशुद्ध रूप से बुजुर्गों की स्थिति नहीं है ), एक "इरादा" कांपना है, जिसका अर्थ है कि यह केवल तभी स्पष्ट होता है जब व्यक्ति कुछ करने की कोशिश कर रहा होता है, और जो व्यक्ति इसे नियंत्रित करने की कोशिश करता है वह और अधिक कठिन हो जाता है। दूसरी ओर पीडी कंपकंपी मुख्य रूप से आराम से होती है, और जब अक्सर व्यक्ति कुछ करने की कोशिश कर रहा होता है, तो कंपकंपी अक्सर स्पष्ट नहीं होती है (हालांकि पीडी के कारण कठोरता अच्छी तरह से मौजूद हो सकती है)।
हॉट लिक्स

2
मैंने एक लिनक्स संस्करण पोस्ट किया है जो माउस को नियंत्रित करने के लिए xdotool का उपयोग करता है, लेकिन ऑटोइट नामक खिड़कियों के लिए एक समान उपकरण है। यह बहुत आसान लग रहा है और इसके लिए एक टैग भी है [autoit]। यह भी लगता है कि आपको 2 संस्करणों की आवश्यकता है। एक जो आंदोलन शुरू होने तक अधिक हिलाता है और फिर थोड़ा शांत हो जाता है जबकि दूसरा आंदोलन शुरू होने तक अपेक्षाकृत स्थिर रहता है।
टेक्नोसॉरस

जवाबों:


148

मैंने कुछ का एक त्वरित डेमो बनाया है, जो आपको उम्मीद है कि पॉइंटर लॉक एपीआई का उपयोग करके आपके कोड को आधार बनाने में सक्षम होना चाहिए ।

मैंने इस पॉइंटर-लॉक-डेमो रेपो को कांटा और इसे एक यादृच्छिक आंदोलन तत्व जोड़ने के लिए संशोधित किया।

यहाँ मेरे GitHub पेज का लिंक दिया गया है : https://aristocrates.github.io/pointer-lock-demo
और यहाँ मेरे रेपो का लिंक है: https://github.com/aristocrates/pointer-lock-demo

विधि 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
यह ध्यान देने योग्य है कि पॉइंटर लॉक आपी के लिए ब्राउज़र समर्थन महान नहीं है - यह इंटरनेट एक्सप्लोरर या सफारी में काम नहीं करेगा।
स्टीव सैंडर्स

3
मुझे स्वयं इसे आज़माने का समय नहीं मिला, लेकिन शायद आप यह जानते हैं: क्या पॉइंटर-लॉक एपीआई एक कैनवास के बाहर भी काम करता है? या यह एक कैनवास तक ही सीमित है?
जोशुआ म्यूहेम

8
एक अधिक यथार्थवादी कार्यान्वयन कर्सर की "वास्तविक" स्थिति को ट्रैक करेगा और इसके चारों ओर एक सर्कल के भीतर बेतरतीब ढंग से आगे बढ़ेगा, लेकिन यह बहुत जटिल हो सकता है।
tckmn

1
@ क्रिस क्रोम अब फेंकता है 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

गैर-जावास्क्रिप्ट तरीका

दरअसल, मुझे समाधान पसंद हैं, जो जावास्क्रिप्ट पर आधारित हो सकते हैं, क्योंकि वे अधिक संभावना वेब से संबंधित हैं, और अच्छे मौके हैं - ओएस-स्वतंत्र। हालांकि, मैं इस बारे में सोच रहा था - जावास्क्रिप्ट समाधान के बाद से सभी ब्राउज़रों के लिए अपने मुद्दे को कैसे हल किया जाए, इस मामले में, सभी संभव ब्राउज़रों के लिए समायोजित करना मुश्किल होगा (मुझे यकीन नहीं है कि यह बिल्कुल संभव है)।

इसलिए, जैसा कि आपने उल्लेख किया है, एक और तरीका है - यानी ओएस स्तर पर व्यवहार का अनुकरण करने के लिए। इसका एक और फायदा भी है - आप सुनिश्चित हो सकते हैं कि ब्राउज़र के लिए यह 100% दिखता है क्योंकि यह मानव था (क्योंकि, ठीक है, यह ड्राइवर है जो सिग्नल भेज रहा है)। तो आप किसी भी ब्राउज़र के साथ ड्राइवर / डिवाइस-आधारित समाधान का उपयोग कर सकते हैं (या स्थिति में भी, जब जावास्क्रिप्ट अक्षम हो)।

लिनक्स

दुर्भाग्य से, ड्राइवर / डिवाइस को शामिल करने से तुरंत ओएस निर्भरता हो जाती है। इसलिए प्रत्येक OS के लिए आपको स्वयं के समाधान की आवश्यकता होगी। इस पोस्ट में मैं लिनक्स-आधारित समाधान पर ध्यान केंद्रित कर रहा हूं (इसलिए, लिनक्स के साथ काम करूंगा) - और मैक ओएस थोड़ा। लिनक्स के साथ, घटनाओं को स्पष्ट रूप से डिवाइस में लिखना संभव है, इसलिए नीचे मुख्य लूप के साथ फ़ंक्शन का नमूना है:

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"- लेकिन आपके सिस्टम के लिए अन्य मान हो सकते हैं। इसलिए, यदि वह वर्तमान में C कोड में उपयोग किए गए से भिन्न है, तो संबंधित लाइन को बदलें (इसलिए, लाइन को int fd = open("/dev/input/event4", O_RDWR);अपने डिवाइस के बजाय और उसके साथ रखें event4)

इस कार्यक्रम के लिए एक GIF डेमो (कम फ्रेम दर, दुर्भाग्य से, इसलिए छवि को बहुत बड़ा नहीं रखें) यहां

थोड़ा साइड नोट (यदि आपको नहीं पता कि सी कोड के साथ क्या करना है) - ऊपर दिए गए प्रोग्राम को संकलित करने के लिए, बस उपयोग करें:

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

जहां file.cआपकी सी स्रोत कोड फ़ाइल का नाम है, तो आपको निष्पादन योग्य मिलेगा, जिसे mआपकी निर्देशिका में बुलाया जाएगा । सबसे अधिक संभावना है कि आपको सीधे माउस डिवाइस में लिखने की अनुमति चाहिए, ताकि आप उपयोग कर सकें sudo:

user@host:/path$ sudo ./m

अन्य OS

तर्क वही रहेगा:

  • अपने माउस डिवाइस को एक्सेस करने का तरीका खोजें
  • मूविंग माउस की घटना लिखें
  • अपने ईवेंट में यादृच्छिकरण लागू करें

बस। उदाहरण के लिए, मैक ओएस में माउस के साथ काम करने का अपना तरीका है (लिनक्स की तरह नहीं, मैक procfsउतना अच्छा नहीं है ), यह यहाँ अच्छी तरह से वर्णित है

एक निष्कर्ष के रूप में

क्या बेहतर है - जावास्क्रिप्ट या डिवाइस-उन्मुख समाधान - आप पर निर्भर है, क्योंकि कुछ स्थिति (जैसे क्रॉस-ब्राउज़र या क्रॉस-ओएस) इस मामले में सब कुछ तय कर सकती है। इसलिए, मैंने ओएस स्तर पर इसे लागू करने के कुछ निश्चित उदाहरणों के साथ दिशानिर्देश प्रदान किए हैं। यहां लाभ यह है कि समाधान क्रॉस-ब्राउज़र है, लेकिन लागत के रूप में हमारे पास ओएस-बाइंडेड प्रोग्राम है।


इस बहुत विस्तृत पोस्ट के लिए बहुत बहुत धन्यवाद। मुझे संदेह है कि हम एक टैबलेट (एंड्रॉइड या आईओएस) पर प्रदर्शित करेंगे, इसलिए हम ओएस स्तर पर माउस व्यवहार को बदलने में सक्षम नहीं होंगे। लेकिन बहुत दिलचस्प वैसे भी!
जोशुआ मुहीम

53
कैसे हो तुम टचस्क्रीन उपकरणों पर अस्थिर माउस का प्रदर्शन करने वाले हैं?
Davor

6
@ ईमानदारी से कहूं, तो मुझे बहुत संदेह है कि जिन लोगों को वास्तव में झटके / झटके से परेशानी होती है , वे एक स्पर्श डिवाइस का उपयोग करेंगे , जब तक कि वे जानबूझकर खुद को पागल नहीं करना चाहते थे।
क्रिस क्रेफ़िस


@PlasmaHH ओपी ने उल्लेख नहीं किया कि यह उन लोगों के लिए जागरूकता बढ़ाने के लिए है, जिनके पास टच स्क्रीन उपकरणों के साथ कंपन और उनकी कठिनाई (विशेष रूप से) है। और फिर, मुझे नहीं लगता कि किसी को भी वास्तव में झटके के साथ समस्या है जो हाथ से पकड़े हुए टच-स्क्रीन उपकरणों का उपयोग करने की कोशिश करने के लिए पर्याप्त है । ऐसे उपकरण हैं जो उपयोग करने में बहुत आसान हैं, जैसे कि बड़े (यांत्रिक) बटन वाले फोन। अधिकांश ऑपरेटिंग सिस्टम में भाषण द्वारा नेविगेशन शामिल है (जैसे, भाषण मान्यता - विंडोज ओएस)। मुझे लगता है कि गंभीर रूप से पीड़ित व्यक्ति iPhone के बजाय उन उपकरणों का उपयोग करेंगे।
क्रिस क्रेफ़िस

23

मैंने इसे एक बार एक मजाक के रूप में, पिल्ला लिनक्स फोरम पर किया और टिप्पणी मिली कि:

पार्किंसंस वाले लोगों को यह हास्यास्पद नहीं लगेगा !!!

यहाँ इलाज बस 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] #default 0.1 है

मैंने कमांड लाइन से इसे चलाने के बजाय इसे स्वयं क्लिक करने की गलती की और जल्दी से पता चला कि यह कितना निराशाजनक होना चाहिए। इसने मुझे मारने के लिए टर्मिनल विंडो खोलने के लिए कई प्रयास किए।


1
आप सीपीयू के उपयोग और गति को सीमित करने के लिए "स्लीप 0.01" जैसी किसी चीज से कोलन को बदलना चाह सकते हैं, क्योंकि मेरी रिग पर यह आपके कोड के साथ अवास्तविक तेज कूदता है।
नॉनचिप

1
@nonchip - जानकारी के लिए धन्यवाद, मैंने सीपीयू के उपयोग का पता लगाने के लिए इसे कभी नहीं चलाया। शरीर के लिए एक नींद जोड़ा।
टेक्नोसॉरस

आप अधिकांश लिनक्स डिस्ट्रोस में जानते हैं कि आप कीबोर्ड कमांड का उपयोग करके टर्मिनल खोल सकते हैं, है ना?
justhalf

@ अन्याय समय में डिफ़ॉल्ट पिल्ला, टर्मिनल शॉर्टकट को `ROX-Filer विंडो में प्रेस करना था । इसे खोलने की कोशिश की गई, इसलिए मैंने मेनू खोलने के लिए कीबोर्ड का उपयोग किया। कुछ ही समय बाद मैंने पॉकेटफिनक्स_कॉन्टिनस और शेल की लगभग 10 पंक्तियों का उपयोग करके एक अल्पविकसित आवाज नियंत्रण डेमॉन बनाया।
टेक्नोसॉरस

while :; do ...; sleep $time; doneलगभग हमेशा होना चाहिए while sleep $time; do ...; done, क्योंकि जब उपयोगकर्ता Ctrl-C दबाता है, तो वर्तमान में निष्पादित कमांड लगभग निश्चित रूप से होगा sleep, और शेल हमेशा स्क्रिप्ट को समाप्त नहीं करते हैं जब उपयोगकर्ता चाहता है। यह सबसे विशेष रूप से इंटरैक्टिव गोले में परीक्षण के दौरान होता है, लेकिन यह कभी-कभी लिपियों में भी हो सकता है। इससे भी बेहतर होगा while xdotool ... && xdotool ... && sleep ...; do :; done

16

आपका दूसरा विचार (कर्सर छुपाना) एक आधा है जो मुझे लगता है कि आपके लिए अच्छा काम कर सकता है:

  • जैसा कि आप सुझाव देते हैं, सीएसएस के माध्यम से माउस कर्सर छिपाएं। ( cursor:noneIIRC)
  • एक अस्थिर-कर्सर GIF के बजाय, माउस पॉइंटर का अनुकरण करने के लिए कुछ छवि + सीएसएस पूर्ण स्थिति + जेएस का उपयोग करें; यानी, पृष्ठ के चारों ओर माउस का पालन करें और कर्सर छवि को वहां लगाए जहां मूल रूप से माउस कर्सर होगा।

फिर, आप कर्सर को "हिला" करने के लिए अपने कर्सर कोड में कुछ कंपकंपी गणित जोड़ते हैं। आपके पास यह निर्धारित करने के लिए कि सही घटता क्या सही ढंग से कंपन इनपुट का अनुकरण करने के लिए है।

अंत में: आप जो भी प्रोग्रामिंग (लिंक आदि) नियंत्रित कर रहे हैं, उसके लिए:

  • क्लिक की घटनाओं को कैप्चर करें, उन्हें अपने कंपकंपी की अवस्था के आधार पर वर्तमान "कंपकंपी" स्थान पर न्यूड करें, और यह देखने के लिए कि क्या उपयोगकर्ता इच्छित तत्व से बाहर हिल गया है या नहीं, यह देखने के लिए अपने तत्वों की जाँच करें। ।

इस कार्यान्वयन के साथ एक प्रमुख बोनस : आपका 'अस्थिर कर्सर' स्पर्श उपकरणों पर प्रदर्शित किया जाएगा, जिसमें शुरू करने के लिए एक कर्सर नहीं होगा।


संपादित करें:

टिप्पणियों से माइकल थेरोट के आधार पर (बहुत साफ और उपयोगी!) आधार JSFiddle, यहाँ एक है जो वर्तमान कर्सर स्थान के आसपास सामान्य रूप से वितरित स्वीप के साथ लगातार झटके देता है: http://jsfiddle.net/benmosher/0x4mc642/4/

( normalसरणी rnorm(100)मेरे आर कंसोल में कॉल करने का परिणाम है । सबसे सामान्य तरीका मैं जेएस में एक सामान्य रूप से वितरित यादृच्छिक एंगर का नमूना लेने के लिए सोच सकता था।)


कुछ मानक जेएस माउस घटना की जानकारी: javascript.info/tutorial/…
बेन मोशेर

धन्यवाद, यह वास्तव में मेरे विचार के लिए एक बहुत योग्य है।
जोशुआ मुहीम

मैं जिस प्रोजेक्ट पर काम कर रहा हूं, उसके लिए फिडेल बस सुंदर है, हालांकि यह 4 साल पुराना है, क्या आप मुझे पार्किन्सन के सिमुलेशन के लिए आधार के रूप में चोरी करना चाहेंगे जो कि मेरी परियोजना का हिस्सा है?
ग्राहम रिची

@GrahamRitchie: मेरे साथ ठीक है, लेकिन माइकल थेरियट ने ज्यादातर काम किया, हालांकि, IIRC
बेन मोशेर

14

बस "सही" प्राप्त करने के लिए एक विचार है, आप एक वास्तविक रोगी के माउस आंदोलन को रिकॉर्ड कर सकते हैं, यह इसे और अधिक प्रामाणिक बनाता है जब आप लोगों को बताते हैं कि डेटा कहां से आता है।

एक बिल्ली को अपने माउस कर्सर का अनुसरण करने देने के लिए एक स्क्रिप्ट, आप एक दूसरे कर्सर का अनुसरण करने के लिए एक को समायोजित कर सकते हैं (अपने चारों ओर कूदें)। पेज दूसरे कर्सर की स्थिति की गणना कर रहा है, इसलिए यह भी निर्धारित कर सकता है कि एक क्लिक इवेंट सफल है या नहीं।

यदि आप कर सकते हैं, तो कृपया इसे वेब आधारित बनाएं, आप इस कार्यक्रम को स्थापित करने या फ्लैश को सक्रिय करने या जो कुछ भी है, उससे अधिक लोगों तक इस तरह पहुंचेंगे।


इस सुझाव के लिए धन्यवाद।
जोशुआ मुहीम

1
मुझे यह विचार पसंद आया - जावास्क्रिप्ट के माध्यम से किसी भी समय अंतराल पर माउस स्थिति दर्ज की जा सकती है। आप तब मूवमेंट (XY प्लेन) की साजिश रच सकते हैं, और पॉइंटर लॉक एपीआई सॉल्यूशन या कुछ इसी तरह के '' थरथरापन 'के अधिक' वैध 'फॉर्मूले के लिए कुछ बुनियादी आँकड़े भी प्राप्त कर सकते हैं। इसके लिए थोड़ा और अधिक काम करने की आवश्यकता होगी (उदाहरण के लिए, 10 सेकंड के लिए हर 100 एमएस में बस एक्सवाई स्थिति प्राप्त करें) और विश्लेषण, लेकिन आप सरल यादृच्छिककरण की तुलना में बहुत अधिक वास्तविक प्रभाव देंगे । आपके कारण के लिए, यह इसके लायक हो सकता है।
क्रिस क्रेफ़िस

10

पॉइंटर को स्थानांतरित करने की कोशिश करने के बजाय, आप इसके बजाय एप्लिकेशन (वेब ​​पेज) को स्थानांतरित कर सकते हैं। मैंने एक सरल HTML फॉर्म लिखा है जिसमें कुछ प्रवेश क्षेत्र हैं। जब आप माउस को फ़ॉर्म पर ले जाते हैं, तो फ़ॉर्म चलता है।

आप jsfiddle पर चलते हुए फॉर्म का डेमो देख सकते हैं । प्रभाव देखने के लिए इनपुट फ़ील्ड में से किसी एक पर क्लिक करने का प्रयास करें।

मैंने इसे प्राप्त करने के लिए जेकरी शेक प्रभाव का उपयोग किया। हिला प्रभाव के लिए जावास्क्रिप्ट इस तरह दिखता है, और जब भी माउस को ऊपर ले जाया जाता है, तब यह ऊपर और नीचे जाने के लिए फार्म का कारण बनता है:

<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 # के लिए एक छोटा स्निपेट है, जो वर्तमान कर्सर स्थिति के चारों ओर प्लस माइनस 5px की सीमा के साथ कर्सर को अनियमित रूप से स्थानांतरित करता है। प्रत्येक विस्थापन के बाद कार्यक्रम 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

यहाँ मेरे 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. उदाहरण प्रणाली पर माउस संवेदनशीलता को अधिकतम तक बढ़ाना।

मेरा तर्क यह है (कैविएट, मैं क्लिक करने योग्य तत्वों को छोटा बनाकर ux या दवा का विशेषज्ञ नहीं हूं), आप ज्यादातर लोगों के लिए एक समान समस्या पैदा करते हैं कि पार्किंसंस रोग से पीड़ित व्यक्ति एक रोज़ वेब साइट के साथ सामना करेगा।


यह एक दिलचस्प विचार है। मुझे यकीन है कि क्लिक करने योग्य तत्वों को काफी छोटा करने की योजना है, वैसे भी।
जोशुआ मुहीम

2
मुझे डर है कि अधिकांश माउस उपयोगकर्ता अपने डिवाइस को 1-2 पिक्सेल तक नियंत्रित कर सकते हैं यदि वे ध्यान केंद्रित करते हैं - उदाहरण के लिए हाथ का हिलना माउस सेटिंग्स के साथ 1 पिक्सेल से नीचे है। तो शायद एक सार्वभौमिक समाधान नहीं है यदि आप बटन 1-2 पिक्सेल से बड़े हैं ...
जोनास हीडलबर्ग

मैं # 3 को जोड़ूंगा, माउस की गति को बढ़ाता हूं और सेटिंग्स को अधिकतम
Ryan B

यह माउस पर "स्वचालित वॉल्यूम नियंत्रण" का एक प्रकार है, जो छोटे आंदोलनों को बढ़ाता है, जबकि बड़े "सामान्य" के करीब होता है।
हॉट लिक्स

4

आप एक वृद्धावस्था सिमुलेशन सूट का उपयोग कर सकते हैं, जैसे कि इस आलेख में वर्णित एक ... मुझे संदेह है कि हाथ-कांपना हिस्सा कलाई के चारों ओर सिर्फ एक हिल मोटर है, साथ ही हाथों को सामान्य रूप से भद्दा बनाने के लिए कुछ मोटे दस्ताने।


धन्यवाद। हालांकि यह बहुत दिलचस्प है, लेकिन हमारे पास प्रत्येक आगंतुक को सूट में रखने के लिए पैसा और समय नहीं होगा। ;)
जोशुआ म्यूहेम

5
क्या यह एक टिप्पणी के रूप में बेहतर नहीं होगा?
सेलाली अडोबोर

वैसे, मैं जावास्क्रिप्ट और HTML टैग के बारे में थोड़ा उलझन में था, लेकिन चूंकि पूछने वाले ने विशेष माउस ड्राइवरों (और फिर उल्लिखित टैबलेट) का उपयोग करने का सुझाव दिया था, ऐसा लगता है कि अन्य समाधान स्वागत योग्य हैं। एक बार जब आप विशिष्ट प्रौद्योगिकी सीमा को हटा देते हैं, तो यह एक उत्तर है। यह वास्तव में है जिस तरह से इस क्षेत्र में शोधकर्ताओं ने उम्र से संबंधित विकलांगता का अनुकरण करने की समस्या को हल कर रहे हैं। मुझे भी लगता है कि आप अपेक्षाकृत सस्ते में DIY कर सकते हैं यदि आप सिर्फ झटके चाहते हैं - उन वेल्क्रो कलाई वज़न और एक हिल मोटर में से एक, बहुत मुश्किल नहीं होना चाहिए।
user3067860

4
  • अपने में DIV, CSS का उपयोग करके कर्सर को छुपाएँcursor:none;
  • .Png कर्सर छवि बनाएं और इसे jQ पर ले जाएं ( left, top)mousemove
  • .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

कंपकंपी का अनुकरण करने वाले निम्न-स्तरीय भागों को अब तक अच्छी तरह से उत्तर दिया गया है। मैं अनुकरण करने के लिए इस तरह के झटके पर ध्यान केंद्रित करने के लिए कुछ जोड़ूंगा:

अधिकांश उत्तर एक माउस कर्सर को लागू करते हैं जो एक्स और वाई दिशा में कुछ निश्चित अधिकतम कदम चौड़ाई के साथ यादृच्छिक पथ पर आगे बढ़ रहा है।

एक बटन की तरह एक विशिष्ट क्षेत्र को हिट करने के लिए इसे कठिन बनाने के उपयोग के मामले के लिए यह काफी अच्छी तरह से काम करना चाहिए।

पार्किंसंस रोग से एक झटके के कारण यूआई समस्याओं के अनुकरण के अधिक सामान्य मुद्दे के लिए, वास्तव में इस तरह के कंपन के हाथ आंदोलनों का अनुकरण करना कम से कम दिलचस्प होगा।
मुझे लगता है कि बेतरतीब चलना बहुत अच्छा अनुमान नहीं हो सकता है ।

यह मुश्किल हो सकता है कि वास्तविक हाथ का पता लगाने के लिए कंपन के आँकड़ों की पकड़ ज़रूर हो, लेकिन इस तरह के कंपकंपी का विश्लेषण करने के बारे में निश्चित रूप से कागजात हैं:

पार्किंसंस रोग में हाथ आंदोलन के पेपर पैरामीट्रिक प्रतिनिधित्व 3 डी हाथ आंदोलन निशान का सबसे अच्छा साजिश कैसे करें के बारे में है।
पेपर का भुगतान किया जाता है, लेकिन पुस्तक छवि पर "लुक इनसाइड>" लेबल के शीर्ष दाईं ओर पूर्वावलोकन, हाथ ट्रेस डेटा के विभिन्न अभ्यावेदन के कुछ दिलचस्प प्लॉट दिखाता है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.