数学

Ruby/SDL でランダム・ウォーク

Ruby/SDL(参照)を使ってランダム・ウォークしてみました。Linux Mint 19、Ruby 2.5.1 で確認しました。コード。 sdl_random_walk.rb require_relative 'sdl_draw' WindowWidth = 300 FieldWidth = 50.0 N = 30 class Agent def initialize(ob) @x = @y = 0…

平方根(ルート)を計算して遊ぶライブラリを作った(Ruby)

遊びで平方根(二乗根)を扱うクラス(Root)を Ruby で書いてみました。三乗根とかそれ以上は扱えません(笑)。コードは下(Gist)にあります。 平方根の計算 · GitHub オブジェクトの生成。Integer, Rational, Float のルートが扱えます。Root.new(n) ま…

高速な素数の判定(Ruby)

素数は約数を 2個(1 とそれ自身)もつ自然数ですね。ですから、自然数 n が素数かどうかを判定するには、n がそれ自身より小さい自然数(1 を除く)で割ることができるかどうかを確かめればよいわけです。このとき、割る数は を超える必要がないことは明ら…

素因数分解(Ruby)

素因数分解は結局素数で順に割っていくしかないのだけれど、素数をわざわざ求めてというのは却って大変ですね。うまいやり方としては、2 および 3 以上の奇数で割るという方法があります。これは多少のムダは出るけど、全部の数で割るより効率的ですね。さら…

L-system で描いた再帰曲線の例

obelisk.hatenablog.com 前回のエントリで Ruby で実装してみた L-system を使って、実際に再帰曲線を描いてみます。Gem 'kaki-lsystem' が必要です。 C曲線。 コード。 require 'kaki/lsystem' l = Lsystem.new(600, 500, "C curve") l.move(-130, 100) l.p…

再帰曲線を描く言語「L-system」を Ruby で実装した

L-system って何でしょうか。Wikipedia にはこうあります。 L-system(エルシステム、Lindenmayer system)は形式文法の一種で、植物の成長プロセスを初めとした様々な自然物の構造を記述・表現できるアルゴリズムである。自然物の他にも、反復関数系(Itera…

ジュリア集合を描いてみる(Ruby)

ジュリア集合(Julia set)を Ruby で描いてみました。 描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura コード。 julia_set.rb require 'oekaki' Width, …

タートルグラフィックスで再帰曲線をいろいろ描いてみる(Ruby)

Ruby で簡単なタートルグラフィックスを実装して、いろいろ再帰曲線を描いてみました。描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - Camera Obscura ※追記 Gem化しまし…

パスカルの三角形(Ruby)

パスカルの三角形とは、こんな感じのものです。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 規則性がわかりますね。多項式 (a + b)n を展開すると、係数がこんな風に並びます。Ruby で関数型プログラミングっぽく書…

n進グレイコード(Ruby)

ゆえあって n進グレイコードへの変換式を作ることになった。 グレイコード - Wikipedia グレイコードについてはここにあるとおりである。2進グレイコードなら、ネットを検索すればたくさん出てくる。具体例は、Ruby のハッシュで表すとこんな感じだ。 {"0"=>…

「シェルピンスキーのギャスケット」を描いてみる(Ruby)

「シェルピンスキーのギャスケット」を Ruby で描いてみました。 フラクタルな図形なので正確ではないですが、7次まで描いてみました。描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみ…

スプライン曲線を描く(Ruby)

複数の点をなめらかにつなぐ「スプライン曲線」を描いてみました。全体的に下のサイトを参考にしました(ありがとうございます!) Ruby - 3次スプライン補間! - mk-mode BLOG gnuplot で出力してみるとこんな感じです。 spline_curve.rb require 'numo/gn…

Ruby FFI でエラトステネスの篩

これまで Ruby と C言語で「エラトステネスの篩」を書いたので、Ruby FFI で融合させてみました。Ruby FFI で簡単に Ruby から C言語の関数を呼ぶことができます。Linux Mint 18.2, Ruby 2.3.3 で確認しました。Ruby FFI を使うには libffi が必要ですが、Li…

Swift でエラトステネスの篩

こんな感じ。 eratosthenes.swift func eratosthenes(_ n: Int) -> [Int] { var ar = Array(0...n) for i in 2...Int(sqrt(Double(n))) { if ar[i] == 0 {continue} for j in 2...(n / i) {ar[i * j] = 0} } return ar.filter {$0 != 0} } print(eratosthene…

Ruby で循環小数を扱う

以前にも同様の試みをしたのですが(参照)、コードを始めから書き直しました。以前のは何か自分でもよくわからない、面倒なことをしているので。作ったのは Rational#to_rec_decimal と String#to_r で、前者は Rational(分数)を(String で表される)循…

GTK+ で落書き 12(Ruby)

三角形の内心・外心・重心・垂心・傍心 自分で求めた公式を使って、三角形の内接円と外接円を Ruby で描いてみました。 描画には自作の Gem 'oekaki' を使っています。 oekaki | RubyGems.org | your community gem host GTK+でお絵かきしてみた(Ruby) - C…

OpenGL で正多面体を回転させてみる その2(Ruby)

前回のエントリの隠面消去バージョンです。 5つのウィンドウが同時に立ち上がるのは同じです。Windows ではたぶんこのままでは動きません。コードは下のリンク先にあります。 OpenGL で正多面体を回転させる · GitHub

OpenGL で正多面体を回転させてみる(Ruby)

Ruby 用に OpenGL を手軽に使うライブラリ「miniopengl.rb」を書いたので、その例として 5つの正多面体すべてを回転させてみました。 正多面体のデータはここより頂戴しました。ありがとうございます。polyhedrons_obj.zip をダウンロードして解凍し、フォル…

フロイド−ワーシャル・アルゴリズム(Ruby)

フロイド−ワーシャル・アルゴリズムは、グラフの全点から全点へのすべての最短経路を求めます。重みは負値を許しますが、負閉路は許しません。上のようなグラフは次のようなハッシュで表現されます。頂点を表わすオブジェクトは何でもかまいません。 g = {a:…

RubyGem 'Salamander' でコッホ曲線を描く

以前、自作の Gem 'oekaki' でコッホ曲線を描いてみましたが(参照)、タートルグラフックスを実装している Gem 'salamander'(参照)を使って同じことをしてみました。4次のコッホ曲線です。 salamander_koch_curve.rb require 'salamander' require 'salam…

RubyGem 'Salamander' でヒルベルト曲線を描く

RubyGem 'Salamander' は Ruby/SDL を使ってタートルグラフックスを実装しています。これを使ってヒルベルト曲線を描いてみました。Linux Mint 18.2 と Ruby 2.3.3 で確認しています。インストールは Bundler で入りますが($ gem install salamander でもた…

「既約分数クイズ」を解く(Ruby, C言語)

ここのところで結城先生の「既約分数クイズ」のことを知りました。結城先生らしい「お話」仕立てですので、是非参照して頂きたいですが、簡単にいうと 問題:正の整数Nが与えられているとき、 以下の条件を満たす既約分数p/qを「すべて」求めるアルゴリズム…

フォードの円、GTK+ で落書き10(Ruby)

いわゆる「フォードの円」というものを描いてみました。これについてはここで知ったものです。ありがとうございます。Ruby で描きました。描画には自作の Gem 'oekaki' を使っています。 oekaki_sample10.rb require 'oekaki' Width, Height = 500, 500 Oeka…

ドラゴン曲線を描く(Ruby)

自己相似図形であるドラゴン曲線を Ruby で描いてみました。 3次。 5次。 10次。これだと確かにドラゴンみたいですね。 描画には自作の Gem 'oekaki' を使っています。 require 'oekaki' Width, Height = 600, 400 class Point < Struct.new(:x, :y) end Oek…

マンデルブロ集合を描いてみる(Ruby)

このサイトのそのままパクリです(ありがとうございます!)。やったのは Java から Ruby へ移植しただけ。 def mandelbrot_count(c) z = Complex(0) 100.times do |i| z = z ** 2 + c return i if z.abs > 10 end 100 end Diff = 0.001 io = open("mandelbr…

コッホ曲線を描く(Python, Ruby)

自己相似図形であるコッホ曲線を Python と Ruby で描いてみました。 Python では手軽にタートル・グラフィックスが使えるので、これを利用するのが簡単です。 3次のコッホ曲線を描きます。 from turtle import * def draw(length, depth): if depth == 0: f…

Ruby でローレンツアトラクタを描画する

Ruby + gnuplot でローレンツアトラクタを描いてみました。 全体的にここなどを参考にしました。微分方程式はオイラー法(参考)で数値計算しています。gnuplot での描画は numo/gnuplot という Gem を使っています。 require 'numo/gnuplot' fx = lambda {|…

「孤独の7」を Ruby で

rscの日記さんのところで、「孤独の7」という虫喰い算を知りました。問題は右の画像のとおりです。ここで回答を募集していたようです。 Ruby で解きました。かかった時間はほぼ 0.1秒です(答えの uniqueness のチェックなし。チェックすると 0.7秒程度)。R…

複素フィボナッチ数列と GTK+ お絵かき

GTK+でお絵かきしてみた(Ruby) - Camera Obscura これまで mygtk.rb と言っていた GTK+ お絵かきモジュールを、Gem 'oekaki' として RubyGems.org に登録いたしました。よろしかったら使ってやって下さい。 oekaki | RubyGems.org | your community gem ho…

コンウェイのライフゲームを Ruby で実装してみた

有名な「コンウェイのライフゲーム」を素朴に実装してみました。一種の生態系シミュレーションですね。ルールは簡単です。「セル」が集まって長方形領域を形成しているとき、それぞれの「セル」はまわりの 8つの「セル」の状態によって「生きる」か「死ぬ」…