スポンサーリンク

| キーワード:

二次元のN角形の頂点座標の計算

たまに欲しくなる、三角形とか五角形とかの座標計算をする。

実のところ円を描くのと全く同じ。以前円を描くプログラムを書いた。

これを書いた当時は事情によりこの方法の法が簡単だったのだけれどやはり普通の方法の方が簡単だ。

コード

//! @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();

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: