前回は JavaScript で行列の関数とクラスを考えた。 今度はベクトルの関数である。すでに行列を考えたのだからかなりの部分実装しているのだが、 ここでは外積など、ベクトル解析に関する関数を実装したいと考えた。
ベクトルを一次元配列で、また行列を二次元配列で表すのは、行列の関数とクラスと同様である。
同一直線上にない 3 点 `"A"(a_1, a_2, a_3), "B"(b_1, b_2, b_3), "C"(c_1, a_2, a_3) ` を通る平面の方程式は、行列式を用いて次のようにあらわされる。
これを利用して、A, B, C の座標を与えるとこれら 3 点を通る平面の方程式を求めるプログラムを書いてみた。 `px+qy+rz+s=0` のように表示するが、`p, q, r, s` に公倍数があってもその公倍数で割っていないので、 みっともない。
A: B: C: 平面:-19x-11y+10z-15=0
ベクトル `bbA = (a_1, a_2, a_3)` と `bbB = (b_1, b_2, b_3)` の外積は次であらわされる:
ベクトルの外積を計算するプログラムを作った。
A: B: 外積 : (-8,2,7)
3 次元空間で点 `P` が変数 `t` の値に応じて連続的に動くものとする。このとき点 `P` は曲線を描く。点 `P` の位置ベクトルを `bbr` とすると。`bbr` は `t` の関数として次のように書ける。
これをベクトル方程式という。
曲線 `bbr(t)` の `t = 0` から `t = a` までの長さ `s(a)` は次で与えられる。
ベクトル方程式の表す曲線の長さを計算するプログラムを作った。 数式微分はアドホックなやり方であり、成分が `asint` か `acost` か `at` の場合にしか対応できない。 他の場合は誤った結果になる。
`bbr(t)` : , `bbr'(t)` : `(-3sint,-3cost,4)`, `abs(bbr'(t))` : `5`, `s(a)` : `5a`
数式記述には ASCIIMathML を使っている。 また数式表現には MathJax を使っている。
まりんきょ学問所 > JavaScript 手習い > ベクトルの関数とクラス