2 つの点 $\boldsymbol{v}_1$ と $\boldsymbol{v}_2$ を通る直線 $\boldsymbol{v}$ をパラメーター $k$ で表すと、 $$\boldsymbol{v} = (1 - k) \boldsymbol{v}_1 + k \boldsymbol{v}_2 $$ となります。$k = 0$ のときは、 $$\boldsymbol{v} = \boldsymbol{v}_1 $$ となり、$k = 1$ のときは、 $$\boldsymbol{v} = \boldsymbol{v}_2 $$ となります。また、$k = 0.5$ のときは、 $$\boldsymbol{v} = 0.5 \boldsymbol{v}_1 + 0.5 \boldsymbol{v}_2 = \frac{\boldsymbol{v}_1 + \boldsymbol{v}_2}{2} $$ となって、ちょうど中間の点になります。これは平均を求める式と同じ形ですね。 逆に考えると、平均の式をちょうど真ん中以外も計算できるように一般化したのが、直線の方程式とも言えるでしょう。
このプログラムは 2 点 $\boldsymbol{v}_1 = (100, 100)$ と $\boldsymbol{v}_2 = (500, 300)$ の間で緑の点を移動させます。上記の $k$ を $0$ から $1$ まで $0.05$ おきに変化させて、$\boldsymbol{v}$ に相当する $x$ と $y$ の値を求めて、そこに点を移動します。
Small Basic オンラインで実行したスクリーンショットを以下に示します。 まず、座標 (100, 100) と座標 (500, 300) に $\boldsymbol{v}_1$ と $\boldsymbol{v}_2$ を表す黒い点を打っています。 下図では $k = 0.45$ のときの $\boldsymbol{v}$ を緑の点で表示しています。
方眼線を引く DrawGrid は前回から変わっていません。DrawPoint は新たに作成しましたが、 Points.txt の ● のほうを応用しています。
' Line Anime
' Version 0.1.0
' Copyright © 2020 Nonki Takahshi. The MIT License.
' Last update 2020-08-26
DrawGrid()
size = 10 ' size of a point
x = 100
y = 100
DrawPoint()
x1 = x
y1 = y
x = 500
y = 300
DrawPoint()
x2 = x
y2 = y
AddPoint()
While "True"
For k = 0 To 1 Step 0.05
MovePoint()
Program.Delay(500)
EndFor
EndWhile
Sub AddPoint
shT = Shapes.AddText("")
Shapes.Move(shT, 40, 40)
GraphicsWindow.PenWidth = 0
GraphicsWindow.BrushColor = "DarkGreen"
shP = Shapes.AddEllipse(size, size)
EndSub
Sub DrawPoint
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FillEllipse(x - size / 2, y - size / 2, size, size)
GraphicsWindow.DrawText(x, y, "(" + x + ", " + y + ")")
EndSub
Sub DrawGrid
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
fn = GraphicsWindow.FontName
If (fn = "Tahoma") Or (fn = "Segoe UI") Then
c10 = "#33000000"
c100 = "#66000000"
bc = "#CC000000"
Else ' for SBO
c10 = "#00000033"
c100 = "#00000066"
bc = "#000000CC"
EndIf
GraphicsWindow.FontName = "Courier New"
GraphicsWindow.FontSize = 18
GraphicsWindow.BrushColor = bc
For x = 0 To gw Step 10
If Math.Remainder(x, 100) = 0 Then
GraphicsWindow.PenColor = c100
GraphicsWindow.DrawText(x + 2, 0, x)
Else
GraphicsWindow.PenColor = c10
EndIf
GraphicsWindow.DrawLine(x, 0, x, gh)
EndFor
For y = 0 To gh Step 10
If Math.Remainder(y, 100) = 0 Then
GraphicsWindow.PenColor = c100
GraphicsWindow.DrawText(2, y, y)
Else
GraphicsWindow.PenColor = c10
EndIf
GraphicsWindow.DrawLine(0, y, gw, y)
EndFor
EndSub
Sub MovePoint
x = (1 - k) * x1 + k * x2
y = (1 - k) * y1 + k * y2
Shapes.Move(shP, x - size / 2, y - size / 2)
Shapes.SetText(shT, "k = " + k)
EndSub