この説明との類推により、非標準依存関係なしに言語Cで関数を書きます。
matrixfromnormal <point3>
局所軸z（つまり通常）のベクトルが特定のベクトル<point3>と一致するマトリックスを返します。マトリックスの移動の成分は[0.0.0]です。スケールのコンポーネントの値は、ベクトル<point3>を正規化するために必要な値によって逆です。
関数関数の例（意味）：
MatrixFromNormal（[0.0.1]）が戻ります（Matrix3 [1,0,0]、[0.1,0]、[0.0.1]、[0.0,0,0]））
MatrixFromNormal（[0.1.1]）が戻ります（Matrix3 [0、-0.707107.0.707107] [1.41421.0.0.0.0] [0,1,0,0,0,0]）
以下は、次の言語のこの関数の基本的な実装です。

#include <math.h>

struct matrix3 {
  フロートX [3] [3];
};

struct point3 {
  フロートX、Y、Z;
};

struct matrix3 matrixfromnormal（struct point3垂直）{
  struct matrix3の結果;

  float length = sqrt（normal.x * normal.x + normor.y * normor.y + normor.z * normal.z）;
  float invlength = 1.0f / length;

  result.x [0] [0] = normal.x * invlength;
  result.x [0] [1] = normal.y * invlength;
  result.x [0] [2] = normal.z * invlength;

  result.x [1] [0] = -normal.y * invlength;
  result.x [1] [1] = normal.x * invlength;
  result.x [1] [2] = 0;

  result.x [2] [0] = -normal.z * invlength;
  result.x [2] [1] = 0;
  result.x [2] [2] = normal.x * invlength;

  返品結果;
}



この実装は、入力ベクトルがゼロに等しくなく、ゼロベクトルではないことを示唆していることに注意してください。使用の場合に可能な場合、これらのケースを処理するために追加のコードを追加する必要がある場合があります。