optional<Dimensions> getDimensions() const { if (polylines.empty()) return optional<Dimensions>(); optional<Point> min = getMinPoint(polylines[0].points); optional<Point> max = getMaxPoint(polylines[0].points); for (unsigned i = 0; i < polylines.size(); ++i) { if (getMinPoint(polylines[i].points)->x < min->x) min->x = getMinPoint(polylines[i].points)->x; if (getMinPoint(polylines[i].points)->y < min->y) min->y = getMinPoint(polylines[i].points)->y; if (getMaxPoint(polylines[i].points)->x > max->x) max->x = getMaxPoint(polylines[i].points)->x; if (getMaxPoint(polylines[i].points)->y > max->y) max->y = getMaxPoint(polylines[i].points)->y; } return optional<Dimensions>(Dimensions(max->x - min->x, max->y - min->y)); }
std::vector<Geo::Point> SquareObstacle::getVertexList() const { std::vector<Geo::Point> vertex_list; Geo::Point min = getMinPoint(); Geo::Point max = getMaxPoint(); // 各辺の生成に利用するため、頂点は隣り合う順で追加する vertex_list.push_back( Geo::Point(min.x(), min.y()) ); vertex_list.push_back( Geo::Point(min.x(), max.y()) ); vertex_list.push_back( Geo::Point(max.x(), max.y()) ); vertex_list.push_back( Geo::Point(max.x(), min.y()) ); return vertex_list; }