メインコンテンツへスキップ
CalcMax

ベクトル間の角度計算

計算結果

60.0000 °

ベクトル間の角度

角のコサイン
0.5000
角度(ラジアン)
1.0472

ベクトル間の角度計算ツールは、2つのベクトルからそのなす角を求め、角度の基になったコサインと、同じ角度をラジアンで表した値も一緒に返します。3次元なら1 1 0、2次元なら0 3のように、各ベクトルの成分を空白かカンマで区切って入力してください。2つのベクトルは成分の数がそろっている必要がありますが、それ以外に個数の制限はなく、成分が負の数でもかまいません。答えを出す計算は短いものです。1つ目の成分どうし、2つ目の成分どうしを掛けて足し合わせると内積になります。各ベクトルの大きさは、成分の2乗和の平方根です。内積を2つの大きさの積で割れば、なす角のコサインが出ます。角度そのものは、その数の逆コサインです。角度を直接ではなくコサインを経由して求めるのがこの計算の勘所で、コサインは内積が自然に生み出す数であると同時に、眺める価値のある数でもあります。2つのベクトルが同じ向きなら1、直角なら0、反対向きなら−1で、その間を埋めていきます。人が実際に見分けられるのはこの3つで、どれも計算機がなくても分かります。このページが最もよく使われる場面である垂直なベクトルは、コサインがちょうど0になる場合です。それ以外はどこか中間に落ち着き、ページはそれを度とラジアンの両方で小数第4位まで表示します。世界の式の半分はラジアンを欲しがり、ほとんどの人は度を読むからです。答えずに断る入力が1つあります。大きさが0で向きをまったく持たないゼロベクトルです。その大きさで割ってコサインを出すのは0での割り算になり、角度0を返すのは入力したベクトルと同じ向きだと言っていることになるので、このページは計算そのものを断ります。

よく出てくるベクトルの組と、そのなす角

ベクトルuベクトルv角のコサイン角度(°)
1 1 01 0 10.560
1 00 1090
1 0 01 0 010
-1 0 01 0 0-1180
1 11 00.707145
3 4 04 3 00.9616.2602
1 2 22 2 10.888927.266
2 -34 5-0.3032107.6501

8組のペアで、1行目はこのページが開いたときに入っている組です。コサインの列がこの表の趣旨です。角度の列だけでは規則性が隠れてしまい、コサインが隣にあると3つの特別な値がすぐ浮かび上がります。1行目はコサインがちょうど0.5で角度がちょうど60度、6行目はコサインが0.96で16.26度です。この2行の間にあるのがこのページの警告の全部で、コサインは0度から90度までの範囲を1から0へ押し込み、しかも不均等に押し込みます。2行目は最も分かりやすい直角で、3行目はベクトルと自分自身の組でコサインの範囲の両端0と1を与え、4行目がベクトルとその符号を反転したものを組にして3つ目の端−1を補います。この3行でものさしが全部そろいます。5行目は45度の組で、実務で絶えず出てくる直角の半分です。7行目はきたない3次元の組で、どちらの大きさもちょうど3ですが内積が8なので、コサインは8 ÷ 9で終わらない小数になります。8行目は符号の混ざった鈍角の場合で、コサイン−0.3032と角度107.6501が、あるべきとおりに一致しています。コサインが負で角度が90度未満という組み合わせは両立しないからです。ラジアンの値はここで列にしていません。同じ角度を別の記法で書いただけで、5列目は何も新しいことを言わないからです。ここにある数はすべてページのビルド時に計算し直しており、最初の2列にある空白は区切り記号で、数の一部ではありません。

公式

cos θ = (u · v) ÷ (|u| × |v|) θ = arccos(cos θ) u · v = u₁v₁ + u₂v₂ + … + uₙvₙ

ベクトルu
1つ目のベクトル。成分を空白かカンマで区切って並べます。3次元なら1 1 0、2次元なら0 3、必要ならもっと多くてもかまいません。このページはどの次元でも受け付けるので入力欄の数は固定されておらず、2つのベクトルどうしで成分の数がそろっている必要があります
ベクトルv
2つ目のベクトル。同じ書き方で、1つ目と同じ数の成分を持ちます。2つのベクトルを入れ替えても何も変わりません。なす角はどちらから測っても同じです
u · v
内積。このページは使いますが印字しません。1つ目の成分どうし、2つ目の成分どうしを掛けて足し合わせたものです。ここでは答えそのものではなく、角度を作る原材料にあたります
|u| と |v|
各ベクトルの大きさ。成分が測られた単位のまま、成分の2乗和の平方根です。内積を割る2つの数で、それぞれがそのベクトルだけの話です。片方が大きくても、もう片方については何も言えません
cos θ
2つのベクトルのなす角のコサイン。内積を2つの大きさの積で割ったものです。同じ向きなら1、直角なら0、反対向きなら−1で、その範囲を出ることはありません。角度は実際にはこの数から計算されるので、ページはこれを印字します
θ
2つのベクトルのなす角を度で表したもの。同じ向きの0から、垂直な90を経て、反対向きの180までです。上の数の逆コサインなので、その範囲を受け継ぎ、外に出ることはありません
ラジアン
同じ角度をもう1つの書き方で表したもの。180度はπラジアン、90度はその半分で、出力は単位のないただの数です。微分積分の式やほとんどのプログラミング言語はラジアンを欲しがるので、πを掛けて180で割る手間をかけさせないよう、ページは両方を出します
度
主出力の単位で、このページで単位を持つ唯一の出力です。コサインとラジアンの値はただの数です
小数第4位
すべての出力を書く桁数。コサインがちょうど出るのは0、0.5、1、−1といった特別な場合だけで、角度がちょうど出るのはコサインがそのどれかのときに限られるので、このページのほとんどの行は丸めた数を載せています

2つの向きの関係だけでなく、角度そのものが欲しいときのページです。計算なしで見分けられる角度が3つあります。コサインが1なら0度で同じ向き、0なら90度で垂直、−1なら180度で反対向きです。それ以外は本物の角度で、ページが小数第4位まで出します。実際によくある使い方は、ある向きを基準の向きと突き合わせることです。風が真北からどれだけ振れたか、カメラがどれだけ回ったか、測った向きがあるべき向きからどれだけずれたか、といった場面です。既知の2つの向きを使う図形の問題も同じ計算で、2本の直線をそれぞれベクトルで書いた後の直線どうしの角度も同じです。どんな答えでも使える確かめ方が1つあります。コサインと角度は同じことを言っていなければなりません。コサインが正なら角度は90度未満、負なら90度より大きく、0ならちょうど90度です。この2つが食い違うなら、成分が思っていたものと違います。ラジアンの出力は、その角度を式やコードに渡そうとしているときのためのものです。それらはほとんどいつもラジアンを欲しがり、手で換算するところで符号の誤りや180倍・180分の1の間違いが生まれます。

計算例

  1. 「1 1 0」と「1 0 1」

    1. 内積:1 × 1 + 1 × 0 + 0 × 1 = 1
    2. uの大きさ:√(1 + 1 + 0) = √2 = 1.414214…
    3. vの大きさ:√(1 + 0 + 1) = √2 = 1.414214…
    4. コサイン:1 ÷ (1.414214 × 1.414214) = 1 ÷ 2 = 0.5
    5. 角度:0.5の逆コサインは60度で、60 × π ÷ 180 = 1.047198…ラジアン

    このページが開いたときに入っている入力で、いちばんきれいな行です。コサインはちょうど2分の1、角度はちょうど60度になります。内積の1がどこにも出ていないことに注目してください。このページはコサインと角度を印字し、内積はその間の段階です。2つの大きさはどちらも√2なので、掛けるとちょうど2になり、コサインと角度が丸めではなく正確に出るのはそのためです。

  2. 「3 4 0」と「4 3 0」

    1. 内積:3 × 4 + 4 × 3 + 0 × 0 = 24
    2. それぞれの大きさ:3つ目の成分が0なので√(9 + 16) = 5
    3. コサイン:24 ÷ (5 × 5) = 0.96
    4. 角度:0.96の逆コサインは16.2602…度で、0.2838…ラジアン

    コサインを印字する価値が分かる行です。コサイン0.96はほとんど同じ向きの2つのベクトルに聞こえますが、角度は16.26度、直角の6分の1ほどです。コサインは0度から90度までの範囲を1から0の間の数に押し込み、しかもそれを均等に押し込みません。だからコサインを何かの割合として読むと間違えます。ここではどちらの大きさもちょうど5で、3-4-5の三角形がいつもどおり働いています。

  3. 「1 0」と「0 1」

    1. 内積:1 × 0 + 0 × 1 = 0
    2. それぞれの大きさ:1
    3. コサイン:0 ÷ 1 = 0
    4. 角度:0の逆コサインはちょうど90度で、1.570796…ラジアン

    このページがいちばんよく開かれる答えで、しかも正確に出る場合です。コサインが0なら垂直なベクトルで、角度は丸めた値ではなくちょうど90として返ります。この2つは最も分かりやすい垂直の組で、片方はx軸に沿い、もう片方はy軸に沿っています。ラジアンの1.5708はπ ÷ 2です。

  4. 「-1 0 0」と「1 0 0」

    1. 内積:(−1) × 1 + 0 × 0 + 0 × 0 = −1
    2. それぞれの大きさ:1
    3. コサイン:−1 ÷ 1 = −1
    4. 角度:−1の逆コサインはちょうど180度で、3.141593…ラジアン

    範囲の反対側の端です。コサインが−1というのは2つのベクトルが作れるいちばん大きい角度、180度のことで、ラジアンの値はπです。ちょうど反対を向いた2つもやはり2つのベクトルで、そのなす角は0ではありません。180という答えがおかしいと思ったときに見る行です。おかしくはありません。反対向きは平行と同じで、関係の名前です。

  5. 「2 -3」と「4 5」

    1. 内積:2 × 4 + (−3) × 5 = 8 − 15 = −7
    2. uの大きさ:√(4 + 9) = √13 = 3.605551…
    3. vの大きさ:√(16 + 25) = √41 = 6.403124…
    4. コサイン:−7 ÷ (3.605551 × 6.403124) = −7 ÷ 23.086793 = −0.303201…
    5. 角度:−0.303201…の逆コサインは107.6501…度で、1.8788…ラジアン

    鈍角の答えで、ここで多くの人が引っかかります。2つのベクトルのなす角は90度より大きくなることもあり、内積が負のときにそうなります。ここではuの成分の1つが負で、左や下を向いたベクトルはそう書きます。コサイン−0.3032は小さい数ですが、符号こそがメッセージの全部です。2つのベクトルが互いに離れる側に傾いていると言っており、107.6501度という角度がそれに同意しています。

適用限界

2つのベクトルは成分の数がそろっていなければならず、そろっていない組は0を足してごまかすのではなく、そのまま拒否します。ゼロベクトルはまるごと拒否します。すべての成分が0のベクトルは向きを持たないので、それと他の何かとの間の角度は定義できません。同じ向きだと読めてしまう角度0を表示するより、計算そのものを断ります。成分はふつうの数として読みます。カンマの直後に空白があれば成分の区切り、数字と数字の間にあって直後に空白がないカンマは小数点として読まれます。1,5は1.5のことです。桁区切りは解釈せず、推測もしないので、カンマを入れずにそのまま入力してください。成分は各ベクトルにつき200個まで受け付けます。手書きの例にはるかに大きな数で、データ処理が使う規模には届きません。内積そのものは出力に含まれていません。これは意図的で、角度を計算する途中の段階だからです。それを答えとして印字するのは別のページです。小数第4位は表示幅であって精度の主張ではなく、どちらの出力も丸める前の大きさから計算しているので、印字された2つの数を掛け合わせても印字された角度が正確に再現されるとは限りません。このページは成分が何で測られているかも関知しません。入力はただの数で、コサインもラジアンの値もただの数で、単位があるのは度だけです。

よくある質問

成分はどう入力しますか
空白で区切るか、カンマと空白で区切ってください。1 1 0と1, 1, 0はどちらも同じように読まれます。数字と数字の間にあって直後に空白がないカンマは小数点として読まれます。1,5は1.5のことです。「1,500」のような桁区切りは推測せずに拒否するので、カンマを入れずに入力してください。2つのベクトルは成分の数がそろっている必要があり、そろっていれば数に上限はありません。2次元と3次元は同じページです。
なす角のコサインは何の役に立ちますか
角度を計算する基になる数で、大事な3つの場合は角度より読み取りやすくなっています。コサインが1なら同じ向き、0なら垂直、−1なら反対向きです。その間は本物の角度で、ページが度とラジアンの両方で出します。
2つのベクトルが垂直かどうかはどうやって見分けますか
なす角のコサインが0で、ページはちょうど90度と表示します。この判定には角度の出力が使っている三角関数は一切要りません。内積が0のときにちょうど成り立ち、それには掛け算しか使いません。このページがコサインを表示しているのは、何も計算せずに直角の場合が見えるようにするためです。
角度が180度を超えないのはなぜですか
なす角のコサインが−1から1の間に収まり、逆コサインは0度から180度までの値しか返さないからです。180度というのは2つのベクトルがちょうど反対を向いているという意味で、2つの向きの間に200度という角度はありません。200度と160度は同じ2本の矢印を表しています。
度とラジアンの2つが出力されるのはなぜですか
読み手が2種類いるからです。人は度を読み、式やプログラミング言語はほとんどいつもラジアンを欲しがります。180度はπラジアンです。両方を印字すれば、πを掛けて180で割る手間がなくなり、180倍・180分の1の間違いが生まれる場所もなくなります。ラジアンの値は単位のないただの数です。
すべて0のベクトルを拒否するのはなぜですか
ゼロベクトルは向きを持たないので、それと他の何かとの間の角度は定義できないからです。大きさが0で、コサインは内積を2つの大きさの積で割ったものなので、計算しようとすれば0での割り算になります。0度を返すページは、入力したベクトルと同じ向きだと言っていることになり、存在しない向きについての主張になってしまいます。

参考文献

関連する計算ツール