game-vector-math-primitives について
幾何的な意味が重要なゲームコード向けに、ベクトル演算の基本手法を選ぶスキルです。方向や射影、面積、距離などの問いに対応する演算を示し、入力条件の確認も促します。
主な機能
- 01幾何的な問いに応じた演算の選択
- 02内積、外積、スカラー三重積の指針
- 03座標空間とベクトル長の確認
- 04向きと符号情報の保持
- 05境界条件を含むテストの提案
活用シーン
- 01方向や正面判定の実装
- 02三角形の法線と面積の計算
- 03平面に対する点の位置判定
- 04射影と距離の計算
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill game-vector-math-primitivesインストール後、Claude Code で/game-vector-math-primitivesを入力して読み込まれたか確認します。
詳細
ゲーム向けベクトル演算プリミティブ
ゲームコードで、幾何学的な意味が重要なベクトル演算が必要な場合に、このスキルを使用します。不透明な数式をそのまま貼り付けるのではなく、意図が明確なプリミティブを優先してください。
主な参考資料:Oleksandr Kaleniuk 著『Geometry for Programmers』 (https://www.manning.com/books/geometry-for-programmers)。特に第 2 章と第 9 章を参考に、内容を再構成して言い換えています。
基本的なワークフロー
- 求める幾何学的な量を特定します。角度、射影、側面、面積、法線、体積、距離、向き、補間などです。
- その問いに直接答えるプリミティブを選びます。
- 入力の前提を確認します。次元、座標空間、単位、右手系/左手系、正規化の有無、ゼロ長ベクトルなどです。
- 向きやどちら側かが重要な場合は、符号を保持します。呼び出し元が大きさだけを必要とする場合に限り、符号を破棄します。
- 中間値には意味が伝わる名前を付けます。
normal、signed_area2、light_factor、plane_distance、facing、projection_tなどです。 - 向き、逆順の巻き順、直交ベクトル、平行ベクトル、ゼロ長入力を検証するテストを追加します。
プリミティブガイド
内積
以下の用途には内積を使用します。
- ある方向への射影。
- 角度や向きの判定。
- ランバート方式のライティング係数。
- レイや線分に沿った距離。
- 直交性の確認。数値ポリシーにおいて、内積がゼロであることを確認します。
両方のベクトルが正規化されている場合、内積はそれらの間の角度の余弦になります。表示用の角度が必要な場合は、逆余弦を計算する前に値をクランプしてください。
外積と 2D 外積のスカラー値
以下の用途には外積を使用します。
- 三角形の 2 辺からの面法線の算出。
- 符号付き 2D 向き判定。
- 2D 三角形の符号付き面積の 2 倍。
- 大きさがほぼゼロであることによる、平行ベクトルの検出。
- 既知の向きを持つ接線フレームの構築。
2D では、コードベースですでに 3D 型を使用している場合を除き、見せかけの 3D ベクトルを作るのではなく、スカラー値 a.x * b.y - a.y * b.x を使用します。
三重積
以下の用途にはスカラー三重積を使用します。
- 符号付き体積。
- 向き付けられた平面に対する点の側の判定。
- 平面法線の長さで割ることによる、点から平面までの距離。
- 四面体の向きや、包含判定に類する述語。
どちら側かが重要な場合は、符号を保持します。絶対値を取るのは、符号なしの体積や距離が必要な場合に限ります。
注意点
- ベクトルの長さを確認する前に、正規化しないでください。
- 命名と API では、方向ベクトルと位置ベクトルを区別してください。
- 法線は、比較対象のベクトルと同じ座標空間に保ってください。
- 非一様スケールの適用後は、法線を正しく再計算または変換してください。
- 時計回りと反時計回りのどちらを標準の巻き順とするか決めてください。
- 距離を比較する際、平方根が不要であれば長さの二乗を使用してください。
- 実際の角度が必要な場合を除き、負荷の高い処理では逆三角関数を避けてください。通常、内積のしきい値を使うほうが低コストです。
よくある間違い
- 使用例で単位ベクトルが使われていたため、すべてのベクトルが正規化されているものとして扱う。
- 絶対値を早く取りすぎて、有用な符号情報を失う。
- 1 回の内積演算や外積演算で、異なる座標空間を混在させる。
- 内積のしきい値で簡潔に判定できる場面で、角度を計算する。
- 法線、カリング、向き判定の述語を更新せずに、三角形の巻き順を反転する。
コメント
Markdown 対応