裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

三角形の種類はいくつか

2014年11月21日 | ブログラミング

円周上を n 等分する点を,順に「点 1」から「点 n」とする。
これらの点から m 個の点を選ぶ( m ≦ n )。
m 個の点において,その内の 3 個の点を頂点とする三角形は mC3 個あるが,形の異なるものはいくつあるか。ただし,裏返さずに回転してぴったり重ねられる三角形は同じものとする。
添付図は,n=8,m=5 で,選ばれる点が 1,3,4,6,7 の場合である。

a, j は同じ形
b, d, e は同じ形
f, g は同じ形
残り c, h, i は,他に同じものはない
よって,形の異なる三角形は 6 種類

以下がプログラム。

dist = function(x) {
  p = pos[x]
  d = combn(3, 2, function(y) {
        res = abs(p[y[1]]-p[y[2]])
        ifelse(res > n %/% 2, n-res, res)
        })
  min.pos = which.min(d)
  if (min.pos == 3) d[c(3, 1, 2)]
  else if (min.pos == 2) d[c(2, 3, 1)]
  else if (d[1] == d[3]) d[c(3, 1, 2)]
  else d
}

n = 26 で,全ての点を使ってできる三角形の種類は

> n = 26
> pos = 1:n
> nrow(unique(t(combn(length(pos), 3, dist))))
[1] 100

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« combn の FUN 引数で定義する... | トップ | まじか... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事