タグ

関連タグで絞り込む (1)

タグの絞り込みを解除

mathとrubyに関するnilabのブックマーク (3)

  • 線分と点の距離

    線分と点の距離を求めるアルゴリズム 概要 線分 (x0,y0) – (x1,y1) と与えられた点 (px,py)との距離をもとめる。 点から線上に垂線をおろし、その垂線の長さを計れば距離が求まる。 手法 簡単にするため、直線(上の点)は、媒介変数 t を使って (x0+dx*t, y0+dy*t)で表すことにする。 垂線と線分のベクトルの内積が0であることを利用して解をもとめる。 例外 垂線の足 (tx,ty) が線分上になければ、線分の端点(x0,y0) ,(x1,y1)のうち、 垂線の足に近い方の端点から与えられた点までの距離を計れば良い。 手順 dx = x1 - x0; dy = y1 - y0 とする。 -- 線分上の点は (x0+dx*t,y0+dy*t) 線分と垂線のベクトルの内積は . (dx,dy)・(x0+dx*t-px,y0+dy*t-py) = (dx^2+dy^

    nilab
    nilab 2010/09/14
    「簡単にするため、直線(上の点)は、媒介変数 t を使って (x0+dx*t, y0+dy*t)で表すことにする。 垂線と線分のベクトルの内積が0であることを利用して解をもとめる」線分と点の距離を求めるアルゴリズム
  • 100までの整数から素数を列挙せよ - rubyco(るびこ)の日記

    普通に実装。(追記:不等号、間違っていたので直しました)。 def prime(n = 100, &block) is_prime = Array.new(n + 1, true) is_prime[0] = false is_prime[1] = false (2..n).each do |p| next unless is_prime[p] block.call(p) k = p + p while k <= n is_prime[k] = false k += p end end is_prime end prime(1000000) do |p| print "#{p}, " end追記:最後にis_primeを戻しているのは後で調べ物をするときのためです。たとえば999907は素数かな? def nil.call(*a) end def prime(n = 100, &block

    100までの整数から素数を列挙せよ - rubyco(るびこ)の日記
    nilab
    nilab 2006/07/08
    rubyco(るびこ)の日記 - 100までの整数から素数を列挙せよ
  • 10000までの完全数を列挙せよ - rubyco(るびこ)の日記

    エラトステネスの篩もよいけれど、別の問題もやろうよ。ということで「完全数」です。 def perfect(n = 100, &block) sum = Array.new(n + 1, 1) (2..n).each do |i| if i == sum[i] block.call(i) end k = i + i while k <= n sum[k] += i k += i end end sum end perfect(10000) do |k| print "#{k}, " end #=> 6, 28, 496, 8128,あらら? エラトステネスの篩とほぼ同じになっちゃった♪ 完全数 (Wikipedia) 追記:おお、Danさんが反応してくださいました。感謝です♪ http://blog.livedoor.jp/dankogai/archives/50538972.html

    10000までの完全数を列挙せよ - rubyco(るびこ)の日記
    nilab
    nilab 2006/07/08
    rubyco(るびこ)の日記 - 10000までの完全数を列挙せよ
  • 1