ARCS6 AR6-REV.24062600
読み取り中…
検索中…
一致する文字列を見つけられません
SpeedCalculator.hh
[詳解]
1
8//
9// Copyright (C) 2011-2020 Yuki YOKOKURA
10// This program is free software;
11// you can redistribute it and/or modify it under the terms of the FreeBSD License.
12// For details, see the License.txt file.
13
14#ifndef SPEEDCALCULATOR
15#define SPEEDCALCULATOR
16
17#include <cmath>
18#include "RingBuffer.hh"
19
20namespace ARCS { // ARCS名前空間
23 template <size_t N>
25 public:
28 : PositionBuff(), TimeBuff(), FirstTime(true)
29 {
30
31 }
32
36 : PositionBuff(r.PositionBuff), TimeBuff(r.TimeBuff), FirstTime(r.FirstTime)
37 {
38
39 }
40
43
44 }
45
50 double GetSpeed(const double Position, const double Time){
51 if(FirstTime){
52 // 初めて呼ばれた場合は,
53 PositionBuff.FillBuffer(Position); // 初期位置でバッファを埋めておく
54 TimeBuff.FillBuffer(Time); // 初期時刻でバッファを埋めておく
55 FirstTime = false; // フラグリセット
56 return 0; // 最初の1回目は速度を計算できないのでゼロ
57 }else{
58 // 2回目以降は,
59 const double dx = Position - PositionBuff.GetFinalValue(); // 現在位置と位置リングバッファの最後尾との偏差の計算
60 const double dt = Time - TimeBuff.GetFinalValue(); // 現在時刻と時刻リングバッファの最後尾との偏差の計算
61 const double v = dx/dt; // 速度の計算
62 PositionBuff.SetFirstValue(Position); // 位置リングバッファの先頭に現在位置を詰める
63 TimeBuff.SetFirstValue(Time); // 時刻リングバッファの先頭に現在時刻を詰める
64 if(std::isfinite(v)){
65 return v; // 速度が有限値なら計算結果を返す
66 }else{
67 return 0; // ゼロ割のときはゼロにしておく
68 }
69 }
70 }
71
73 void Reset(void){
74 FirstTime = true;
75 }
76
77 private:
78 SpeedCalculator(const SpeedCalculator&) = delete;
79 const SpeedCalculator& operator=(const SpeedCalculator&) = delete;
80 RingBuffer<double, N, false> PositionBuff;
82 bool FirstTime;
83 };
84}
85
86#endif
87
リングバッファクラス
Definition RingBuffer.hh:51
T GetFinalValue(void)
バッファから最後尾の値を取り出す関数
Definition RingBuffer.hh:128
void SetFirstValue(const T &u)
値をバッファの先頭に格納する関数
Definition RingBuffer.hh:80
void FillBuffer(const T &u)
バッファを指定値で埋める
Definition RingBuffer.hh:160
速度計算器
Definition SpeedCalculator.hh:24
double GetSpeed(const double Position, const double Time)
速度を計算する関数
Definition SpeedCalculator.hh:50
SpeedCalculator(SpeedCalculator &&r)
ムーブコンストラクタ
Definition SpeedCalculator.hh:35
SpeedCalculator()
コンストラクタ
Definition SpeedCalculator.hh:27
~SpeedCalculator()
デストラクタ
Definition SpeedCalculator.hh:42
void Reset(void)
リセット
Definition SpeedCalculator.hh:73