たまに欲しくなる、三角形とか五角形とかの座標計算をする。
実のところ円を描くのと全く同じ。以前円を描くプログラムを書いた。
これを書いた当時は事情によりこの方法の法が簡単だったのだけれどやはり普通の方法の方が簡単だ。
//! @tparam Point2D 二次元座標を一つ表現する。operator[](int)が必要 //! @brief 多角形を作成する //! @param [out] points 作成した多角形の頂点 //! @param [in] N 頂点数 //! @param [in] radius 中心から頂点までの距離 //! @return なし template<typename Point2D> void createNgon( std::vector< Point2D >& points, const int N, const double radius = 1.0 ) { for (size_t i = 0; i < N; i++) { double t = 2 * 3.14 / N * i; double x = sin(t); double y = cos(t); Point2D p; p[0] = x * radius; p[1] = y * radius; points.push_back(p); } }
//多角形作成 std::vector<std::array<double, 2>> ngon; createNgon(ngon,3); //表示 glPointSize(1); glBegin(GL_LINE_LOOP); for (size_t i = 0; i < ngon.size(); i++) { glVertex2dv(ngon[i].data()); } glEnd();