8#ifndef DESIGNLAB_MATH_POLYGON2_H_
9#define DESIGNLAB_MATH_POLYGON2_H_
44 explicit Polygon2(
const std::vector<Vector2>& vertex);
52 vertex[
static_cast<size_t>(vertex_num)] = v;
55 assert(vertex_num <= kMaxVertexNum);
110 return vertex[
static_cast<size_t>(i)];
124 return vertex[
static_cast<size_t>(i)];
131 float max_x = vertex[0].x;
135 max_x = (std::max)(max_x, vertex[
static_cast<size_t>(i)].x);
145 float min_x = vertex[0].x;
149 min_x = (std::min)(min_x, vertex[
static_cast<size_t>(i)].x);
159 float max_y = vertex[0].y;
163 max_y = (std::max)(max_y, vertex[
static_cast<size_t>(i)].y);
173 float min_y = vertex[0].y;
177 min_y = (std::min)(min_y, vertex[
static_cast<size_t>(i)].y);
204 static constexpr int kMaxVertexNum = 6;
206 std::array<Vector2, kMaxVertexNum> vertex;
215 std::basic_ostream<Char>& os,
const Polygon2& poly)
217 os << poly.ToString();
std::basic_ostream< Char > & operator<<(std::basic_ostream< Char > &os, const EulerXYZ &r)
出力ストリーム.Csv形式で出力する.カンマ区切り.単位は [rad].
constexpr float GetMaxX() const
頂点の中で最大のx座標を返す関数.
std::string ToString() const
多角形のデータを文字列で出力する
constexpr float GetMinY() const
頂点の中で最小のy座標を返す関数.
bool IsInside(const Vector2 &point) const
点が多角形の内部にあるかどうか調べる関数. 多角形が凸でない場合は正しく判定できない.
constexpr std::optional< Vector2 > GetVertexOpt(const int i) const
頂点の座標を返す関数.std::optional を使っているので, 存在しない頂点を指定した場合は std::nullopt を返す.
constexpr void AddVertex(const Vector2 &v)
頂点を追加する関数.
bool AddVertexCheckForDuplicates(const Vector2 &v)
頂点を追加する関数.他の頂点と重なっている場合は追加しない.
constexpr int GetVertexNum() const
多角形の頂点数を返す関数.
constexpr float GetMaxY() const
頂点の中で最大のy座標を返す関数.
constexpr void RemoveLastVertex()
1番最後の頂点を削除する関数.
void RemoveVertex(const int index)
頂点を削除する関数.遅いので多用するべきではない.
constexpr Vector2 GetVertex(const int i) const
頂点の座標を返す関数.
constexpr float GetMinX() const
頂点の中で最小のx座標を返す関数.
bool IsConvex() const
多角形が凸かどうか調べる関数.
constexpr void Reset()
多角形をリセットする関数. 頂点を削除して,頂点数を0にする.