1

私の問題は、updateAccelerometerの呼び出し回数を減らす方法を見つけることです。

int count = 0;
int accelerometer = updateAccelerometer();
while (accelerometer <= 500) {
  printf("Actual: %lf", accelerometer);
  accelerometer = updateAccelerometer();
  count++;
}

これは次のようになります。

Actual: 9
Actual: 28
Actual: 47
Actual: 65
Actual: 84
Actual: 103
Actual: 122
Actual: 141
Actual: 159
Actual: 178
Actual: 197
Actual: 216
Actual: 235
Actual: 253
Actual: 272
Actual: 291
Actual: 310
Actual: 329
Actual: 347
Actual: 366
Actual: 385
Actual: 404
Actual: 423
Actual: 442
Actual: 460
Actual: 479
Actual: 498

今、私の問題は、加速度計を毎回更新したくないということですが、たとえば、指数比例比で更新します。「線形比例比」を導入すると

私はただします:

if (count % 2 = 0) accelerometer = updateAccelerometer();

つまり、1つの値が読み取られ、1つの値が読み取られない、などなどです。updateAccelerometerを呼び出すたびに時間がかかる可能性があるため、遠くにあるときは値を減らし、近くにいるときは値を増やしたいと考えています。

したがって、アイデアは、xでマークされたものだけを返す指数関数を持つことです。他の関数を印刷しないためではなく、加速度計を更新しないためです。

Actual: 9
Actual: 28
Actual: 47
Actual: 65
Actual: 84
Actual: 103x
Actual: 122
Actual: 141
Actual: 159
Actual: 178
Actual: 197
Actual: 216
Actual: 235x
Actual: 253
Actual: 272
Actual: 291
Actual: 310
Actual: 329x
Actual: 347
Actual: 366
Actual: 385
Actual: 404x
Actual: 423
Actual: 442
Actual: 460x
Actual: 479
Actual: 498x

他の多くの状況で更新を指数関数的にスキップするというこの問題があったので、これはそれほど具体的な問題ではありません。

4

2 に答える 2

3

次にアクセラレータをサンプリングするまでのカウント数は約であるように見えますsqrt(fabs(500 - accelerometer)) / 3.25

于 2013-01-25T13:36:11.047 に答える
0

あなたがそれをすることができるたくさんの方法があります!データを印刷する必要がある場合は、事前定義された反復インデックスを設定します。これは、データを決定するためのある種の数学関数です。

しかし、私はこのようなもので行きます:

int count = 0;
int timeToPrint = 5;
int timeSincePrinted = 0;
int minPrintSpan = 2;
int accelerometer = updateAccelerometer();
while (accelerometer <= 500) {
  timeSincePrinted++;
  if (timeToPrint == timeSincePrinted && timeSincePrinted >= minPrintSpan) {
    printf("Actual: %lf and %d", accelerometer, count);
    timeSincePrinted=0;
    timeToPrint--;
  }
  accelerometer = updateAccelerometer();
  count++;
}

そのワットは、かなりシンプルで、複雑さが少なく、簡単に調整できる機能を備えています。お役に立てれば。

于 2013-01-25T13:29:00.543 に答える