#!/usr/koeki/bin/ruby # -*- coding: utf-8 -*- # Curses で関数のグラフを描画する # 作者:山本裕樹 require "curses" # 関数 def func(x) return 0.001 * x * (x - 25) * (x + 25) end # Curses の初期化 Curses.init_screen begin # 色の使用開始 Curses.start_color # グラフ用のカラーペア番号を用意 Curses.init_pair(1, Curses::COLOR_RED, Curses::COLOR_BLACK) # 原点の座標 ox = Curses.cols / 2 oy = Curses.lines / 2 # x軸の描画 cy = oy 0.upto(Curses.cols - 1) do |cx| Curses.setpos(cy, cx) Curses.addch("-") end # y軸の描画 cx = ox 0.upto(Curses.lines - 1) do |cy| Curses.setpos(cy, cx) Curses.addch("|") end # 原点の描画 Curses.setpos(oy, ox) Curses.addch("+") # 色の指定 Curses.attrset(Curses.color_pair(1)) # グラフの描画 0.upto(Curses.cols - 1) do |cx| # 関数に与える x の値 x = cx - ox # 関数 y = func(x) # Curses の y座標への変換 cy = oy - y.round * 0.5 # 仮想端末画面の範囲内なら描画 if (cy >= 0 && cy <= Curses.lines - 1) Curses.setpos(cy, cx) Curses.addch("*") end end # 画面表示を更新 Curses.refresh # 標準入力から1文字だけ読み込む(Enter キー不要) Curses.getch ensure # Curses の終了処理 Curses.close_screen end