19 const std::shared_ptr<const IHexapodPostureValidator>& validator,
20 const std::shared_ptr<const IHexapodCoordinateConverter>& converter) :
21 validator_(validator),
30 for (
int i = 0; i < kDivNum; ++i)
32 for (
int j = 0; j < kDivNum; ++j)
34 for (
int k = 220; k < kDivNum; ++k)
36 if (pos_state_[i][j][k] == PosState::kInRangeDrawable)
39 center_.
x + (i - kDivNum / 2) * EdgeLength / kDivNum,
40 center_.
y + (j - kDivNum / 2) * EdgeLength / kDivNum,
41 center_.
z + (k - kDivNum / 2) * EdgeLength / kDivNum);
58void ApproximatedMotionRangeRender::InitPosState()
61 for (
int i = 0; i < kDivNum; ++i)
63 for (
int j = 0; j < kDivNum; ++j)
65 for (
int k = 0; k < kDivNum; ++k)
67 pos_state_[i][j][k] = PosState::kNotInRange;
74 center_ = Vector3(0.f, -150.f, -100.f);
76 for (
int i = 0; i < kDivNum; ++i)
78 for (
int j = 0; j < kDivNum; ++j)
80 for (
int k = 0; k < kDivNum; ++k)
82 const Vector3 pos = Vector3(
83 center_.
x + (i - kDivNum / 2) * EdgeLength / kDivNum,
84 center_.
y + (j - kDivNum / 2) * EdgeLength / kDivNum,
85 center_.
z + (k - kDivNum / 2) * EdgeLength / kDivNum);
87 if (validator_->IsLegInRange(kLegIndex, pos))
89 pos_state_[i][j][k] = PosState::kInRange;
96 for (
int i = 0; i < kDivNum; ++i)
98 for (
int j = 0; j < kDivNum; ++j)
100 for (
int k = 0; k < kDivNum; ++k)
103 if (pos_state_[i][j][k] == PosState::kNotInRange) {
continue; }
105 int in_range_num = 0;
107 for (
int di = -1; di <= 1; ++di)
109 for (
int dj = -1; dj <= 1; ++dj)
111 for (
int dk = -1; dk <= 1; ++dk)
113 if (i + di < 0 || i + di >= kDivNum ||
114 j + dj < 0 || j + dj >= kDivNum ||
115 k + dk < 0 || k + dk >= kDivNum)
120 if (pos_state_[i + di][j + dj][k + dk] == PosState::kInRange ||
121 pos_state_[i + di][j + dj][k + dk] == PosState::kInRangeDrawable)
129 if (in_range_num <= 25)
131 pos_state_[i][j][k] = PosState::kInRangeDrawable;
void SetNode(const RobotStateNode &node) override
ノードをセットする.
void Draw() const override
描画処理を行う. const 関数にしているのは, 描画処理の中でメンバ変数を変更しないようにするため.
ApproximatedMotionRangeRender(const std::shared_ptr< const IHexapodPostureValidator > &validator, const std::shared_ptr< const IHexapodCoordinateConverter > &converter)
VECTOR ConvertToDxlibVec(const Vector3 &vec)
Dxlibの座標を示すVECTORと,このプログラムで使用しているVectorを変換する. ロボット座標系は右手座標系, Dxlibは左手座標系(工学は右手・ゲームライブラリは左手が多い)なのでyを...
void DrawCube3D(const VECTOR ¢er_pos, const float side_len, const unsigned int color)
3D空間に立方体を描画する.
グラフ構造のためのノード(頂点).旧名 LNODE
Vector3 center_of_mass_global_coord
[4 * 3 = 12byte] グローバル座標系における重心の位置.旧名 GCOM
Quaternion posture
[4 * 4 = 16byte] 姿勢を表すクォータニオン.