2016-08-18 4 views
0

C#을 사용하여 커서 위치를 기록하는 동안 모니터에서 원형 경로로 커서를 이동합니다. 여기에 또한 내가 커서를 기록하는 데 사용하는 코드는 경과 시간 :C#으로 기록 된 커서의 속도에서의 소음

:

Stopwatch swTime = new Stopwatch(); 
    private StreamWriter swRecorder; 

    private void start_Click(object sender, EventArgs e) 
    { 
     swRecorder = new StreamWriter("cursor.txt"); 
     swTime.Start(); 
     timer1.Enabled = true; 
    } 

    private void stop_Click(object sender, EventArgs e) 
    { 

     timer1.Enabled = false; 
     swTime.Stop(); 
     swRecorder.Close(); 
    } 

    private void timer1_Tick(object sender, EventArgs e) 
    { 
     string strNewLine = swTime.Elapsed.TotalMilliseconds.ToString(); 
     strNewLine = strNewLine + "," + Cursor.Position.X.ToString(); 
     swRecorder.WriteLine(strNewLine); 
    } 

나는 시간에 대한 커서의 기록 위치 (X 구성 요소) 플롯 경우에, 나는 다음과 같은 그래프를 얻을 것이다

enter image description here

그런 다음 속도 (DeltaX/DeltaT)를 측정하고 시간 대 플롯을 다시 플롯합니다. 그럼 다음과 같은 그래프를 얻을 것이다 :

enter image description here

이제 내 질문은 : 속도가 들쭉날쭉/잡음 왜?

+1

커서를 안정된 속도로 움직이지 않으므로? – PaulF

+0

타이머 자체의 틱 길이 때문일 수 있습니까? 편집 : 아래 @dlxeon 매우 정확한 대답을 참조하십시오. –

+0

@RyanPeters 기록 시간에 대비하여 플롯이 그려집니다. 그래서 틱 길이는 문제가 될 수 없습니다! – NESHOM

답변

1

나는 주된 이유는 일정한 속도로 정확한 원을 그리지 않는다는 것입니다. 다음과 같은 것이 가능하다고 생각합니다.

  • Windows Forms 타이머는 정확히 xx 밀리 초마다 호출되는 것이 보장되지 않습니다. 따라서 약간 다른 시간대에 새로운 측정 값을 얻을 수 있습니다.
  • 마우스 센서 정밀도 (DPI)로 인해 실제 마우스 위치와 약간 다른 좌표가 발생할 수 있습니다.
  • 표준 비 게이밍 USB 마우스는 일반적으로 125Hz 재생 빈도 마우스를 8ms에 한 번). Windows 자체가 다소 지연되면서 가치를 얻는다는 의미입니다. 거의 모든 게임용 마우스에는 1000Hz 재생 빈도 (1ms 지연)가 있습니다.
+0

저는 속도가 일정하지 않다는 것이 문제라고 생각하지 않습니다. 소음과 같은 변동은 20-30ms마다 발생합니다. 인간이 손을 움직일 때, 속도의 변화는 고주파수에서는 빠를 수 없습니다. 손 움직임으로 인한 속도 변화는 작은 소리가 아닌 부비동 형태 (두 번째 그림에서)를 따르는 속도입니다. – NESHOM

0

대부분의 가능성이 있기 때문에 차트의 자동가 최대로 데이터를 확대하고, 따라서 작은 속도 차이가 거대한 큰 볼 확장.

line 그래프를 선택하는 것은 데이터 포인트 간의 데이터에 대해 '알고있는'착각을 일으키기 때문에 실제로 좋은 선택이 아닙니다. 산점도 (points)가 더 적절합니다.