数学関連クラス


とりあえず ToyBox2012 を試す為に理解すべき 数学関連のクラスは Vector3 と Matrix44 です。

ToyBox2012 では上記以外のクラスも使われていますが、 それらに関しては「C# で学ぶ Ray Tracing」の方で 説明していきます。

Vector3 クラス
Matrix44 クラス

Vector3 クラス
public class Vector3 {
	// ベクトル関係の演算
	static public float Dot(Vector3 inV1,Vector3 inV2);
	static public float AbsDot(Vector3 inV1,Vector3 inV2);
	static public Vector3 Cross(Vector3 inV1,Vector3 inV2);
	static public Vector3 UnitVector(Vector3 inV);

	// クラスプロパティ
	static public Vector3 Zero { get; }
	static public Vector3 XAxis { get; }	// (1,0,0)
	static public Vector3 YAxis { get; }	// (0,1,0)
	static public Vector3 ZAxis { get; }	// (0,0,1)

	// インスタンスプロパティ
	public float SquaredLength { get; }	// |v|^2
	public float Length { get; }		// |v|
	public float InvLength { get; }		// 1/|v|

	// コンストラクタ
	public Vector3(float inX,float inY,float inZ);
	public Vector3(Vector3 inSrc);
	
	// 初期化
	public void Init(float inX,float inY,float inZ);
	public void InitWithNormalize(float inX,
								  float inY,
								  float inZ);

	// 正規化
	public void Normalize();

	// 演算子オーバーロード
	static public Vector3 operator+(Vector3 inVec);	// 単項プラス
	static public Vector3 operator-(Vector3 inVec);	// 単項マイナス
	static public Vector3 operator+(Vector3 inV1,Vector3 inV2);
	static public Vector3 operator-(Vector3 inV1,Vector3 inV2);

	// 要素毎の乗算 (x1*x2,y1*y2,z1*z2)
	static public Vector3 operator*(Vector3 inV1,Vector3 inV2);

	static public Vector3 operator*(flaot inS,Vector3 inV);
	static public Vector3 operator*(Vector3 inV,float inS);
	static public Vector3 operator/(Vector3 inV,flaot inS);
	static public bool operator==(Vector3 inV1,Vector3 inV2);
	static public bool operator!=(Vector3 inV1,Vector3 inV2);

	// その他
	public override bool Equals(object inObj);
	public override int GetHashCode();
	public override string ToString();
}

Matrix44 クラス
// 実際のレイトレーサ用のコードでは、ここで示す以外のメソッドも
// 実装されています。詳しくは解説ページ「C# で学ぶ Ray Tracing」を
// 参照して下さい。
public class Matrix44 {
	// クラスプロパティ
	static public Matrix44 Identity { get; }

	// インスタンスプロパティ
	public float this[int inRow,int inCol] { get; }
	public float Det { get; }

	// コンストラクタ
	public Matrix44();	// ゼロ行列を生成
	public Matrix44(float inA11,float inA12,float inA13,float inA14,
					float inA21,float inA22,float inA23,float inA24,
					float inA31,float inA32,float inA33,float inA34,
					float inA41,float inA42,float inA43,float inA44);
	public Matrix44(float[] inAij);	// inAij={a11,a12,...,a44}

	// 行列演算
	public Matrix44 Inverse();
	public Matrix44 Transpose();

	// 演算子オーバーロード
	static public Matrix44 operator*(Matrix44 inA,Matrix44 inB);
}