内積(英語:Dot Product、通称:dot)とは、2つのベクトルの対応する要素同士を掛け合わせ、そのすべてを足し合わせる操作です。

public readonly struct Vec3
{
    public readonly float X;
    public readonly float Y;
    public readonly float Z;

    public Vec3(float x, float y, float z)
        => (X, Y, Z) = (x, y, z);

    public static float Dot(in Vec3 a, in Vec3 b)
        => a.X * b.X 
         + a.Y * b.Y
         + a.Z * b.Z;
}

内積は2つの方向がどれくらい似ているか(一致しているか)、あるいは一方の要素がもう一方にどれだけ寄与しているかを数値化します。

主な用途

2Dグラフィックス

2つの線がなす角度の計算やキャラクターの視界内に特定のオブジェクトが入っているかの判定に使われます。

3Dグラフィックスのライティング

ライティング(照明)計算の核心です。光源の方向ベクトルと面の向き(法線ベクトル)の内積をとることで、面がどれだけ光を受けて明るくなるかを決定します。

ニューラルネットワーク

ニューラルネットワークではニューロンの計算そのものです。大量の「入力」と「重み」を内積によって1つの数値に凝縮し、そのニューロンが次に伝えるべき信号の強さを一気に算出します。