直線(線分)の交点判定をプログラムで求めてみます。
#0.計算したいこと
二つの一次関数で描かれる直線(線分)が交差するか判定してみます。
y = 2x + 3
y = x + 9
#1.Rubyで計算式をプログラムしてみる
プログラム名は、math02.rbとします。
交差したら、座標とともにtrueを表示します。
def f1(x)
2 * x + 3
end
def f2(x)
x + 9
end
puts "x,y1,y2,cross"
-10.upto(10) do |x|
y1 = f1(x)
y2 = f2(x)
cross = ( y1 == y2 )
puts "#{x},#{y1},#{y2}, #{cross}"
end
#2.実行してみる
ruby math02.rb
#3.結果
x,y1,y2,cross
-10,-17,-1, false
-9,-15,0, false
-8,-13,1, false
-7,-11,2, false
-6,-9,3, false
-5,-7,4, false
-4,-5,5, false
-3,-3,6, false
-2,-1,7, false
-1,1,8, false
0,3,9, false
1,5,10, false
2,7,11, false
3,9,12, false
4,11,13, false
5,13,14, false
6,15,15, true
7,17,16, false
8,19,17, false
9,21,18, false
10,23,19, false
どうやら、x=6で2つの直線(線分)は交差するようです。
#4.表計算ソフトで確認してみる
計算結果をファイルに保存します。
ruby math02.rb > math02.csv
エクセルかLibreOfficeを呼び出して、ファイルに保存した結果を開きます。ファイルの種類をテキストファイルやCSVに切り替えないとうまく見つけられないかも知れません。結果の値をカンマ(,)で区切ったので、表計算ソフトで開くときも区切りにカンマ(コンマ)を指定しないと、うまくxとyの値が分かれてくれないので注意します。エクセルはファイルをダブルクリックして開くだけでうまく分けてくれるハズです。
表計算ソフトでうまく値が表示されたら、2行目以降のxとy1,y2の値の部分だけを範囲選択します。
エクセルの場合は、メニューの挿入から、散布図(直線)か散布図(平滑線)を選択します。
LibreOffceの場合は、メニューのグラフボタンでグラフウィザードを開いて、散布図の線のみを選択して、種類で直線か平滑化曲線を選択して完了ボタンをクリックします。
ちょっとわかりにくいかも知れませんが、x=6の時、交差する2本の線分が表示されます。