MicroMouse Maze Library  3703225
StepMap.h
[詳解]
1 
8 #pragma once
9 
10 #include <limits> //< for std::numeric_limits
11 
12 #include "MazeLib/Maze.h"
13 
14 namespace MazeLib {
15 
19 class StepMap {
20  public:
21  using step_t = uint16_t;
22  static constexpr step_t STEP_MAX =
23  std::numeric_limits<step_t>::max();
25  public:
30  StepMap();
35  void reset(const step_t step = STEP_MAX) { stepMap.fill(step); }
40  step_t getStep(const int8_t x, const int8_t y) const {
41  return getStep(Position(x, y));
42  }
47  step_t getStep(const Position p) const {
48  return p.isInsideOfField() ? stepMap[p.getIndex()] : STEP_MAX;
49  }
54  void setStep(const int8_t x, const int8_t y, const step_t step) {
55  return setStep(Position(x, y), step);
56  }
61  void setStep(const Position p, const step_t step) {
62  if (p.isInsideOfField()) stepMap[p.getIndex()] = step;
63  }
67  const auto& getMapArray() const { return stepMap; }
72  const auto getScalingFactor() const { return scalingFactor; }
80  void print(const Maze& maze, const Position p = Position(-1, -1),
81  const Direction d = Direction::Max,
82  std::ostream& os = std::cout) const;
83  void print(const Maze& maze, const Directions& dirs,
84  const Position start = Position(0, 0),
85  std::ostream& os = std::cout) const;
86  void printFull(const Maze& maze, const Position p = Position(-1, -1),
87  const Direction d = Direction::Max,
88  std::ostream& os = std::cout) const;
89  void printFull(const Maze& maze, const Directions& dirs,
90  const Position start = Position(0, 0),
91  std::ostream& os = std::cout) const;
99  void update(const Maze& maze, const Positions& dest, const bool knownOnly,
100  const bool simple);
111  Directions calcShortestDirections(const Maze& maze, const Position start,
112  const Positions& dest, const bool knownOnly,
113  const bool simple);
122  Directions calcShortestDirections(const Maze& maze, const bool knownOnly,
123  const bool simple) {
124  return calcShortestDirections(maze, maze.getStart(), maze.getGoals(),
125  knownOnly, simple);
126  }
135  Pose calcNextDirections(const Maze& maze, const Pose& start,
136  Directions& nextDirectionsKnown,
137  Directions& nextDirectionCandidates) const;
147  Directions getStepDownDirections(const Maze& maze, const Pose& start,
148  Pose& end, const bool knownOnly,
149  const bool simple,
150  const bool breakUnknown) const;
158  const Pose& focus) const;
166  static void appendStraightDirections(const Maze& maze,
167  Directions& shortestDirections,
168  const bool knownOnly,
169  const bool diagEnabled);
170 
171 #if MAZE_DEBUG_PROFILING
172  int queueSizeMax = 0;
173 #endif
174 
175  protected:
177  std::array<step_t, Position::SIZE> stepMap;
179  static constexpr int stepTableSize = MAZE_SIZE;
181  static constexpr float scalingFactor = 2;
183  std::array<step_t, MAZE_SIZE> stepTable;
184 
188  void calcStraightCostTable();
189 };
190 
191 } // namespace MazeLib
マイクロマウスの迷路を扱うクラスを定義
int y
区画のy座標
Definition: Maze.h:608
unsigned int d
壁の方向
Definition: Maze.h:609
int x
区画のx座標
Definition: Maze.h:607
迷路上の方向を表す。
Definition: Maze.h:145
static constexpr const int8_t Max
方向の総数。for文などで使える。
Definition: Maze.h:178
迷路の壁情報を管理するクラス
Definition: Maze.h:646
const Position & getStart() const
スタート区画を取得
Definition: Maze.h:834
const Positions & getGoals() const
ゴール区画の集合を取得
Definition: Maze.h:830
区画ベースのステップマップを管理するクラス
Definition: StepMap.h:19
StepMap()
デフォルトコンストラクタ
Definition: StepMap.cpp:17
std::array< step_t, Position::SIZE > stepMap
迷路中のステップ数
Definition: StepMap.h:177
void print(const Maze &maze, const Position p=Position(-1, -1), const Direction d=Direction::Max, std::ostream &os=std::cout) const
ステップの表示
Definition: StepMap.cpp:21
void setStep(const int8_t x, const int8_t y, const step_t step)
ステップの更新
Definition: StepMap.h:54
std::array< step_t, MAZE_SIZE > stepTable
台形加速を考慮した移動コストテーブル (壁沿い方向)
Definition: StepMap.h:183
static constexpr step_t STEP_MAX
最大ステップ値
Definition: StepMap.h:22
void calcStraightCostTable()
計算の高速化のために予め直進のコストテーブルを計算する関数
Definition: StepMap.cpp:417
static constexpr float scalingFactor
コストが最大値を超えないようにスケーリングする係数
Definition: StepMap.h:181
Directions calcShortestDirections(const Maze &maze, const bool knownOnly, const bool simple)
スタートからゴールまでの最短経路を導出する関数
Definition: StepMap.h:122
void printFull(const Maze &maze, const Position p=Position(-1, -1), const Direction d=Direction::Max, std::ostream &os=std::cout) const
Definition: StepMap.cpp:82
uint16_t step_t
ステップの型
Definition: StepMap.h:21
void setStep(const Position p, const step_t step)
ステップの更新
Definition: StepMap.h:61
step_t getStep(const int8_t x, const int8_t y) const
ステップの取得
Definition: StepMap.h:40
static void appendStraightDirections(const Maze &maze, Directions &shortestDirections, const bool knownOnly, const bool diagEnabled)
ゴール区画内を行けるところまで直進させる方向列を追加する関数
Definition: StepMap.cpp:360
Directions calcShortestDirections(const Maze &maze, const Position start, const Positions &dest, const bool knownOnly, const bool simple)
与えられた区画間の最短経路を導出する関数
Definition: StepMap.cpp:221
void update(const Maze &maze, const Positions &dest, const bool knownOnly, const bool simple)
ステップマップの更新
Definition: StepMap.cpp:136
const auto getScalingFactor() const
ステップのスケーリング係数を取得
Definition: StepMap.h:72
step_t getStep(const Position p) const
ステップの取得
Definition: StepMap.h:47
const auto & getMapArray() const
ステップマップの生配列への参照を取得 (読み取り専用)
Definition: StepMap.h:67
void reset(const step_t step=STEP_MAX)
ステップマップを初期化する関数
Definition: StepMap.h:35
Directions getNextDirectionCandidates(const Maze &maze, const Pose &focus) const
引数区画の周囲の未知壁の確認優先順位を生成する関数
Definition: StepMap.cpp:330
static constexpr int stepTableSize
コストテーブルのサイズ
Definition: StepMap.h:179
Pose calcNextDirections(const Maze &maze, const Pose &start, Directions &nextDirectionsKnown, Directions &nextDirectionCandidates) const
ステップマップから次に行くべき方向を計算する関数
Definition: StepMap.cpp:234
Directions getStepDownDirections(const Maze &maze, const Pose &start, Pose &end, const bool knownOnly, const bool simple, const bool breakUnknown) const
ステップマップにより次に行くべき方向列を生成する
Definition: StepMap.cpp:243
迷路探索ライブラリはすべてこの名前空間に格納されている。
Definition: Maze.h:101
std::vector< Position > Positions
Position 構造体の動的配列、集合
Definition: Maze.h:375
std::vector< Direction > Directions
Direction 構造体の動的配列、集合
Definition: Maze.h:248
static constexpr int MAZE_SIZE
迷路の1辺の区画数の定数。
Definition: Maze.h:106
Position と Direction をまとめた型。位置姿勢。
Definition: Maze.h:393
迷路の区画の位置(座標)を定義。
Definition: Maze.h:268
bool isInsideOfField() const
フィールド内かどうかを判定する関数
Definition: Maze.h:336
uint16_t getIndex() const
迷路内の区画の一意な通し番号となるIDを取得する
Definition: Maze.h:298