連立方程式とグラフ


rittan-appleさんから連立方程式の問題をプログラミングで表現できないか?との質問をもらったのでやってみました。

-3x + y = 50 …①
4x + 2y = 200 …②

これをグラフにしてみましょう。

yについて解く

連立方程式をそれぞれyについて解いてみます

解けたら、プログラミングで表現してみましょう。

座標系

processingの座標系と学校の算数で習う座標系はことなります。ちなみに

processingの原点は画面のどこですか?yは画面のどちらに進むとプラスになりますか?
学校の算数の原点は画面でいうとどこですか?yは画面で言えばどちらに進むとプラスになりますか?

これらを解消するためにprocessingの座標系を学校の算数の座標系にする方法を下記に示します。

size(300, 300)
translate(width/2, height/2) # 原点を画面中央にする
scale(1, -1) # y軸を反転する

stroke(150)
line(-width/2, 0, width/2, 0)
line(0, -height/2, 0, height/2)

準備が整ったところで、yについて解いたそれぞれの数式をグラフとして描きましょう!

点を使って描く方法

線を使って描く方法

おまけ1

x -2y = 4 …①
3x + y = 5 …②

おまけ2

傾きと切片を入力すると自動でグラフを描くプログラムを作ってみた

size(400, 400)

# y = ax + b
# 式1(赤)の傾き(a)と切片(b)
a1 = 2
b1 = 3
# 式2(青)の傾き(a)と切片(b)
a2 = -1.0 / 2.0
b2 = 13

# 画面の倍率
sca = 10

# 原点(Processingの座標系で指定する)
# x0 = width / 4
# y0 = height / 4 * 3
x0 = width / 2
y0 = height / 2

# 座標をScratch風に中央を原点とする
translate(x0, y0)
scale(1, -1)

# xの最小値(左端)と最大値(右端)座標
xMin = -x0
xMax = width - x0

# yの最小値(下端)と最大値(上端)座標
yMin = -(height - y0)
yMax = y0

# 独自関数
def line2(x1, y1, x2, y2):
    line(x1*sca, y1*sca, x2*sca, y2*sca)

def point2(x, y):
    ellipse(x*sca, y*sca, 2, 2)

# 方眼線
stroke(180)
for x in range(xMin / sca, xMax / sca):
    line(x*sca, -height, x*sca, height)
for y in range(yMin / sca, yMax / sca):
    line(-width, y*sca, width, y*sca)

# XY軸
stroke(100)
line(xMin, 0, xMax, 0)
line(0, yMin, 0, yMax)

# 点でグラフを描く
stroke(255, 0, 0) # 赤
for x in range(xMin / sca, xMax / sca):
    point2(x, a1 * x  + b1)

stroke(0, 0, 255) # 青
for x in range(xMin / sca, xMax / sca):
    point2(x, a2 * x + b2)

# 線でグラフを描く
stroke(255, 0, 0) # 赤
x1 = xMin
y1 = a1 * x1 + b1
x2 = xMax
y2 = a1 * x2 + b1
line2(x1, y1, x2, y2)

stroke(0, 0, 255) # 青
x1 = xMin
y1 = a2 * x1 + b2
x2 = xMax
y2 = a2 * x2 + b2
line2(x1, y1, x2, y2)

コメントする