GaitGeneration by Graph Search
読み取り中…
検索中…
一致する文字列を見つけられません
simulation_map_parameter.h
[詳解]
1
3
4// Copyright(c) 2023-2025 Design Engineering Laboratory, Saitama University
5// Released under the MIT license
6// https://opensource.org/licenses/mit-license.php
7
8#ifndef DESIGNLAB_SIMULATION_MAP_PARAMETER_H_
9#define DESIGNLAB_SIMULATION_MAP_PARAMETER_H_
10
11#include <vector>
12
13#include "cassert_define.h"
14#include "string_util.h"
16
17
18namespace designlab::enums
19{
20
23enum class SimulationMapMode : int
24{
25 kFlat = 0,
29 kMesh,
31 kCircle,
32 kDonut,
33};
34
41enum class SimulationMapOption : unsigned int
42{
43 // 1 << x は 2^x を表す.
44
45 kNone = 0,
46 kPerforated = 1 << 0,
47 kStep = 1 << 1,
48 kSlope = 1 << 2,
49 kTilt = 1 << 3,
50 kRough = 1 << 4,
51 kRadiation = 1 << 5,
52};
53
54} // namespace designlab::enums
55
56
57namespace designlab
58{
59
63{
64public:
66 mode(enums::SimulationMapMode::kFlat),
67 option(static_cast<unsigned int>(enums::SimulationMapOption::kNone))
68 {
69 }
70
73 constexpr void SetMode(const enums::SimulationMapMode create_mode)
74 {
75 mode = create_mode;
76 }
77
82 void SetOption(const std::vector<enums::SimulationMapOption> create_options)
83 {
84 assert(!create_options.empty());
85
86 for (const auto& i : create_options)
87 {
88 option |= static_cast<unsigned int>(i);
89 }
90 }
91
99 constexpr void SetMapSize(const float max_x, const float min_x, const float max_y,
100 const float min_y, const float start_rough_x, const float map_base_z)
101 {
102 assert(min_x < max_x);
103 assert(min_y < max_y);
104 assert(min_x < start_rough_x);
105 assert(start_rough_x < max_x);
106
107 map_max_x = max_x;
108 map_min_x = min_x;
109 map_max_y = max_y;
110 map_min_y = min_y;
111 map_start_rough_x = start_rough_x;
112 base_z = map_base_z;
113 }
114
115 constexpr void SetStripeInterval(const int interval)
116 {
117 assert(0 < interval);
118
119 stripe_interval = interval;
120 }
121
122 constexpr void SetHoleRate(const int rate)
123 {
124 assert(0 <= rate);
125 assert(rate <= 100);
126
127 hole_rate = rate;
128 }
129
130 constexpr void SetStepValue(const float height, const float length)
131 {
132 assert(0 < length);
133
134 step_height = height;
135 step_length = length;
136 }
137
138 constexpr void SetTiltAngle(const float angle)
139 {
140 tilt_angle = angle;
141 }
142
143 constexpr void SetSlopeAngle(const float angle)
144 {
145 slope_angle = angle;
146 }
147
148 constexpr void SetRouthHeight(const float height_min, const float height_max)
149 {
150 assert(height_min < height_max);
151
152 rough_min_height = height_min;
153 rough_max_height = height_max;
154 }
155
158 unsigned int option{ 0 };
159
160 float base_z{ 0.0f };
161 float map_max_x{ 2600.f };
162 float map_min_x{ -400.f };
163 float map_max_y{ 2000.f };
164 float map_min_y{ -2000.f };
165 float map_start_rough_x{ 400.f };
166
169
170 int hole_rate{ 20 };
171 float step_height{ 100.f };
172 float step_length{ 600.f };
173 float slope_angle{ 10.f };
174 float tilt_angle{ 5.f };
175 float rough_max_height{ 30.f };
176 float rough_min_height{ -30.f };
177
178 Vector3 circle_center{ 0.f, 0.f, 0.f };
179 float circle_radius{ 1000.f };
180 float donut_radius{ 200.f };
181
182 Vector2 radial_center{ 0.f, 0.f };
183 int radial_division{ 10 };
184 int radial_hole_rate{ 100 };
185 float radial_angle_offset{ 0.0 };
186};
187
188
190{
192
194
197 "生成するマップの種類.(\"" +
199 "\")");
202 "マップ生成のオプション.複数指定したいならば足し合わせて指定すること.( " +
204 " )");
205
206 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(base_z, "Basic", "マップの基準となるZ座標.");
207 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(map_max_x, "Basic", "マップのX座標の最大値.");
208 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(map_min_x, "Basic", "マップのX座標の最小値.");
209 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(map_max_y, "Basic", "マップのY座標の最大値.");
210 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(map_min_y, "Basic", "マップのY座標の最小値.");
211 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(map_start_rough_x, "Basic", "不整地が始まるX座標.");
212
213 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(stripe_interval, "Stripe",
214 "各種模様や穴を作成する際,これで指定したマス分(1マス20[mm])の1辺を持つ"
215 "正方形状にあなをあける.0より大きくすること.");
216
217 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(hole_rate, "Perforated", "不整地上の足場を除外する割合.ホール率[%].0~100の間にすること.");
218
219 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(step_height, "Step", "段差高さ[mm].負の値にすると下りの階段になる.");
220 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(step_length, "Step", "階段の奥行[mm].正の値にすること.");
221
222 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(slope_angle, "Slope", "斜面の傾斜角[deg].");
223
224 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(tilt_angle, "Tilt", "地形を傾ける角度[deg].");
225
226 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(rough_max_height, "Rough", "デコボコな地形の最大高さ[mm].最小値より大きい値にすること.");
227 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(rough_min_height, "Rough", "デコボコな地形の最小高さ[mm]");
228
229 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(circle_center, "Circle", "円 / ドーナツの中心座標.");
230 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(circle_radius, "Circle", "円 / ドーナツの半径.");
231 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(donut_radius, "Circle", "ドーナツの内側の半径.");
232
233 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(radial_center, "Radial", "放射状の地形の中心座標.");
234 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(radial_division, "Radial", "放射状の地形の分割数.");
235 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(radial_hole_rate, "Radial", "放射状の地形のホール率[%].");
236 DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(radial_angle_offset, "Radial", "放射状の地形の角度オフセット[deg].");
237};
238
239} // namespace designlab
240
241
244 mode, option,
245 base_z, map_max_x, map_min_x, map_max_y, map_min_y, map_start_rough_x,
246 stripe_interval,
247 hole_rate, step_height, step_length, slope_angle, tilt_angle, rough_max_height, rough_min_height,
248 circle_center, circle_radius, donut_radius,
249 radial_center, radial_division, radial_hole_rate, radial_angle_offset);
250
251
252#endif // DESIGNLAB_SIMULATION_MAP_PARAMETER_H_
SimulationMapMode
getMap関数のマップ生成のモードを指定する列挙体.
@ kHorizontalStripe
横じまの面を生成する.
@ kVerticalStripe
縦じまの面を生成する.
@ kLatticePoint
格子点の面を生成する.網目状の逆.
@ kFlat
普通の平らな面を生成する.
@ kMesh
格子状の面を生成する.網目状の地形ともいっていい.
@ kDiagonalStripe
斜めじまの面を生成する.
@ kCircle
円形の面を生成する.
@ kDonut
ドーナツ状の面を生成する.
SimulationMapOption
getMap関数のマップ生成のオプションを指定する列挙体. bit演算を利用して複数指定できる. 例えば穴あきかつ,階段状にしたいならば, MapCreateOption::kPerforated ...
@ kNone
特にオプションを指定しない.
@ kTilt
縦軸を中心軸として回転させた地形に変化させる.
@ kRough
凸凹の地形に変化させる.
@ kRadiation
放射状の地形に変化させる.
@ kPerforated
穴の空いたマップに変化させる.
@ kStep
階段状の地形に変化させる.
@ kSlope
スロープ状の地形に変化させる.
std::string EnumValuesToString(const std::string separator)
enum型を渡すと,その要素を列挙した文字列を返す関数.
Definition string_util.h:75
@ kNone
何も動作をしない.
マップ生成時のモードとオプションを指定する構造体.
int radial_hole_rate
放射状の地形のホール率[%].
int radial_division
放射状の地形の分割数.
void SetOption(const std::vector< enums::SimulationMapOption > create_options)
マップ生成のオプションを指定する. この関数を呼んだあと,その他のSet~関数を呼ぶと,段差の高さや,傾斜角を指定できる.
float map_max_y
マップのY座標の最大値.
int stripe_interval
各種模様や穴を作成する際,これで指定したマス分の1辺を持つ正方形状にあなをあける.
float map_min_x
マップのX座標の最小値.
float map_start_rough_x
不整地が始まるX座標.
constexpr void SetTiltAngle(const float angle)
float circle_radius
円 / ドーナツの半径.
constexpr void SetMode(const enums::SimulationMapMode create_mode)
マップ生成のモードを指定する.
float radial_angle_offset
放射状の地形の角度オフセット[deg].
float map_min_y
マップのY座標の最小値.
constexpr void SetHoleRate(const int rate)
float donut_radius
ドーナツの内側の半径.
unsigned int option
マップ生成のオプションを指定するbit.
Vector2 radial_center
放射状の地形の中心座標.
float step_height
段差高さ[mm].負の値にすると下りの階段になる.
constexpr void SetMapSize(const float max_x, const float min_x, const float max_y, const float min_y, const float start_rough_x, const float map_base_z)
マップの大きさを指定する.
float rough_min_height
デコボコな地形の最小高さ[mm]
float map_max_x
マップのX座標の最大値.
float slope_angle
斜面の傾斜角[deg]
float rough_max_height
デコボコな地形の最大高さ[mm]
float tilt_angle
地形を傾ける角度[deg]
constexpr void SetStripeInterval(const int interval)
float base_z
マップの基準となるZ座標.
constexpr void SetSlopeAngle(const float angle)
Vector3 circle_center
円 / ドーナツの中心座標.
constexpr void SetStepValue(const float height, const float length)
int hole_rate
不整地上の足場を除外する割合。ホール率[%]
constexpr void SetRouthHeight(const float height_min, const float height_max)
マップ生成のモードを指定する列挙体.
2次元の位置ベクトルを表す構造体.
3次元の位置ベクトルを表す構造体.
#define DESIGNLAB_TOML11_SERIALIZE(NAME,...)
tomlファイルのシリアライズ/デシリアライズを行うためのマクロ. TOML11_DEFINE_CONVERSION_NON_INTRUSIVEをラッパしたもの. もともとのほうでは enum型...
#define DESIGNLAB_TOML11_NO_TABLE
tomlファイルに追加する変数をテーブルに追加しないことを示すためのマクロ.
#define DESIGNLAB_TOML11_DESCRIPTION_CLASS(CLASS)
tomlファイルに説明を追加するためのクラスの宣言を行うためのマクロ.
#define DESIGNLAB_TOML11_FILE_NO_DESCRIPTION()
tomlファイルにファイルの説明を追加しないことを示す文字列. DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
#define DESIGNLAB_TOML11_TABLE_NO_DESCRIPTION()
tomlファイルに追加するテーブルにコメントを追加しないことを示すマクロ. DESIGNLAB_TOML11_DESCRIPTION_CLASS内に必ず記述する必要がある.
#define DESIGNLAB_TOML11_VARIABLE_ADD_DESCRIPTION(VARIABLE, TABLE, DESCRIPTION)
tomlファイルに変数とファイルの説明を追加するためのマクロ.