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